harperdb 4.7.0-beta.6 → 4.7.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +25 -25
- package/bin/lite.js +2 -2
- package/launchServiceScripts/launchNatsIngestService.js +2 -2
- package/launchServiceScripts/launchNatsReplyService.js +11 -11
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +2 -2
- package/npm-shrinkwrap.json +5 -5
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +2 -2
- package/server/threads/threadServer.js +2 -2
- package/studio/web/assets/{index-BHCj3ttK.js → index-DTsBWAqE.js} +3 -3
- package/studio/web/assets/{index-DBRBB9ES.js → index-DszMXbbR.js} +1 -1
- package/studio/web/assets/{profiler-BYMsO1hL.js → profiler-D9XZGP7Y.js} +1 -1
- package/studio/web/assets/{startRecording-zNVxK0tn.js → startRecording-BUTy82Yk.js} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/scripts/restartHdb.js +2 -2
package/bin/lite.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var cX=Object.create;var hm=Object.defineProperty;var lX=Object.getOwnPropertyDescriptor;var uX=Object.getOwnPropertyNames;var dX=Object.getPrototypeOf,fX=Object.prototype.hasOwnProperty;var a=(e,t)=>hm(e,"name",{value:t,configurable:!0});var se=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)hm(e,r,{get:t[r],enumerable:!0})},CM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of uX(t))!fX.call(e,s)&&s!==r&&hm(e,s,{get:()=>t[s],enumerable:!(n=lX(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?cX(dX(e)):{},CM(t||!e||!e.__esModule?hm(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>CM(hm({},"__esModule",{value:!0}),e);var yt=M((qNe,LM)=>{var{join:mX,dirname:OM}=require("node:path"),{existsSync:pX,readFileSync:hX}=require("node:fs");function EX(){let t=__dirname,r,n=0;for(;!pX(r=mX(t,"package.json"));)if(t===(t=OM(t))||n++>10)throw new Error("Could not find package root");return r}a(EX,"findPackageJson");var PM=EX(),_X=JSON.parse(hX(PM,"utf8")),gX=OM(PM);LM.exports={packageJson:_X,PACKAGE_ROOT:gX}});var a_=M((VNe,DM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=yt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let N=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let $=0,ee=0;try{N.add(I),$=o(n(p,I)).mtimeMs-5e3,ee=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}$>ee&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!N.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let N=f("npx",["tsc"],{cwd:p});if(N.stdout?.length&&console.log(N.stdout.toString()),N.stderr?.length&&console.log(N.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),$=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),$=!0}catch{}if(!$){console.log("Starting background TypeScript compilation...");let ee=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});ee.on("error",G=>{console.error("Error trying to compile TypeScript",G)}),ee.pid&&l(I,String(ee.pid),"utf-8"),ee.unref()}}}}let g=DM.constructor,R=g._findPath;g._findPath=function(S,y,N){if(S.startsWith(".")&&!N&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),$;I.startsWith(E)?$=n(p,r(E,I)):$=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let ee=n($,S),G=ee+".js";if(i(G))return G;if(s(ee).includes(".")&&i(ee))return ee}return R(S,y,N)}}});var ai=M(ts=>{"use strict";global.Resource=ts.Resource=void 0;global.tables=ts.tables={};global.databases=ts.databases={};global.getUser=ts.getUser=void 0;global.authenticateUser=ts.authenticateUser=void 0;global.server=ts.server={};global.contentTypes=ts.contentTypes=null;global.threads=ts.threads=[];global.logger={};global.RequestTarget=ts.RequestTarget=void 0;global.operation=ts.operation=void 0;ts._assignPackageExport=(e,t)=>{global[e]=ts[e]=t}});var Em={};ye(Em,{server:()=>Be});var vM,Be,Hr=se(()=>{vM=b(ai()),Be={};(0,vM._assignPackageExport)("server",Be)});var z={};ye(z,{AUTH_AUDIT_STATUS:()=>ci,AUTH_AUDIT_TYPES:()=>Fa,BOOT_PROPS_FILE_NAME:()=>GX,BOOT_PROP_PARAMS:()=>xM,CLUSTERING_FLAG:()=>kb,CLUSTERING_PROCESSES:()=>CX,CLUSTER_MESSAGE_TYPE_ENUM:()=>Fb,CLUSTER_OPERATIONS:()=>n5,CONFIG_PARAMS:()=>F,CONFIG_PARAM_MAP:()=>BM,DATABASES_DIR_NAME:()=>jc,DATABASES_PARAM_CONFIG:()=>a5,DEFAULT_DATABASE_NAME:()=>PX,ESCAPED_FORWARD_SLASH_REGEX:()=>kX,FORWARD_SLASH_REGEX:()=>BX,FUNC_VAL:()=>g5,GEO_CONVERSION_ENUM:()=>i5,HDB_COMPONENT_CONFIG_FILE:()=>yX,HDB_CONFIG_FILE:()=>SX,HDB_DEFAULT_CONFIG_FILE:()=>TX,HDB_FILE_PERMISSIONS:()=>$X,HDB_HOME_DIR_NAME:()=>HX,HDB_PID_FILE:()=>OX,HDB_PROCESS_SERVICES:()=>NX,HDB_PROC_NAME:()=>RX,HDB_RESTART_SCRIPT:()=>bX,HDB_ROOT_DIR_NAME:()=>Mb,HDB_SETTINGS_NAMES:()=>Sm,HDB_SUPPORT_ADDRESS:()=>UM,INFO_TABLE_HASH_ATTRIBUTE:()=>jX,INSERT_MAX_CHARACTER_SIZE:()=>WX,INSTALL_PROMPTS:()=>YX,ITC_EVENT_TYPES:()=>m_,JOB_STATUS_ENUM:()=>ZX,JOB_TYPE_ENUM:()=>c5,JWT_ENUM:()=>Tm,LAUNCH_SERVICE_SCRIPTS:()=>DX,LEGACY_CONFIG_PARAMS:()=>o5,LEGACY_DATABASES_DIR_NAME:()=>u_,LICENSE_FILE_NAME:()=>XX,LICENSE_KEY_DIR_NAME:()=>Bb,LICENSE_VALUES:()=>l5,LOG_LEVELS:()=>_m,LOG_NAMES:()=>LX,METADATA_PROPERTY:()=>f5,NODE_ERROR_CODES:()=>d5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>E5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>h5,PRE_4_0_0_VERSION:()=>S5,PROCESS_DESCRIPTORS:()=>wX,PROCESS_NAME_ENV_PROP:()=>KX,RAM_ALLOCATION_ENUM:()=>u5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>f_,REG_KEY_FILE_NAME:()=>JX,RESTART_TIMEOUT_MS:()=>qX,ROLE_TYPES_ENUM:()=>vX,S3_BUCKET_AUTH_KEYS:()=>t5,SEARCH_NOT_FOUND_MESSAGE:()=>UX,SEARCH_WILDCARDS:()=>_5,SERVICE_ACTIONS_ENUM:()=>s5,SUPPORT_HELP_MSG:()=>MX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>QX,SYSTEM_SCHEMA_NAME:()=>gm,SYSTEM_TABLE_NAMES:()=>Du,THREAD_TYPES:()=>Gb,TIME_STAMP_NAMES:()=>p5,TIME_STAMP_NAMES_ENUM:()=>m5,TRANSACTIONS_DIR_NAME:()=>VX,UNICODE_FORWARD_SLASH:()=>FX,UNICODE_PERIOD:()=>xX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>zX,VALID_S3_FILE_TYPES:()=>e5,VALID_SQL_OPS_ENUM:()=>r5,VALUE_SEARCH_COMPARATORS:()=>d_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>Hb});var c_,l_,SX,TX,Mb,yX,RX,bX,MM,vb,Ub,xb,AX,IX,wX,NX,CX,OX,PX,LX,_m,DX,vX,UM,MX,UX,xX,BX,FX,kX,gm,HX,Bb,GX,qX,$X,jc,u_,VX,KX,xM,YX,WX,zX,Du,jX,QX,JX,XX,ZX,V,e5,t5,r5,n5,s5,i5,Sm,o5,F,BM,a5,c5,Fb,l5,u5,d5,f5,kb,FM,kM,m5,p5,h5,d_,Hb,E5,_5,g5,f_,Tm,m_,Gb,S5,ci,Fa,H=se(()=>{c_=require("node:path"),l_=b(yt()),SX="harperdb-config.yaml",TX="defaultConfig.yaml",Mb="hdb",yX="config.yaml",RX="harperdb.js",bX="restartHdb.js",MM="HarperDB",vb="Custom Functions",Ub="Clustering Hub",xb="Clustering Leaf",AX="Clustering Ingest Service",IX="Clustering Reply Service",wX={HDB:MM,CLUSTERING_HUB:Ub,CLUSTERING_LEAF:xb,CLUSTERING_INGEST_SERVICE:AX,CLUSTERING_REPLY_SERVICE:IX,CUSTOM_FUNCTIONS:vb,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"},NX={harperdb:MM,"clustering hub":Ub,"clustering leaf":xb,"custom functions":vb,custom_functions:vb,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},CX={CLUSTERING_HUB_PROC_DESCRIPTOR:Ub,CLUSTERING_LEAF_PROC_DESCRIPTOR:xb},OX="hdb.pid",PX="data",LX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},_m={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},DX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,c_.join)(l_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,c_.join)(l_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,c_.join)(l_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},vX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},UM="support@harperdb.io",MX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${UM}`,UX="None of the specified records were found.",xX="U+002E",BX=/\//g,FX="U+002F",kX=/U\+002F/g,gm="system",HX=".harperdb",Bb="keys",GX="hdb_boot_properties.file",qX=6e4,$X=448,jc="database",u_="schema",VX="transactions",KX="PROCESS_NAME",xM={SETTINGS_PATH_KEY:"settings_path"},YX={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"},WX=250,zX={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Du={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"},jX="info_id",QX={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"},JX="060493.ks",XX=".license",ZX={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",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",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",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",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"},e5={CSV:".csv",JSON:".json"},t5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},r5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},n5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},s5={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"},i5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Sm={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"},o5={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"},F={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_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL:"http_mtls_certificateVerification_crl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"http_mtls_certificateVerification_crl_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"http_mtls_certificateVerification_crl_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"http_mtls_certificateVerification_crl_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"http_mtls_certificateVerification_crl_gracePeriod",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP:"http_mtls_certificateVerification_ocsp",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"http_mtls_certificateVerification_ocsp_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"http_mtls_certificateVerification_ocsp_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"http_mtls_certificateVerification_ocsp_errorCacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"http_mtls_certificateVerification_ocsp_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_MTLS_CERTIFICATEVERIFICATION:"replication_mtls_certificateVerification",REPLICATION_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"replication_mtls_certificateVerification_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL:"replication_mtls_certificateVerification_crl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"replication_mtls_certificateVerification_crl_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"replication_mtls_certificateVerification_crl_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"replication_mtls_certificateVerification_crl_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"replication_mtls_certificateVerification_crl_gracePeriod",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP:"replication_mtls_certificateVerification_ocsp",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"replication_mtls_certificateVerification_ocsp_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"replication_mtls_certificateVerification_ocsp_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"replication_mtls_certificateVerification_ocsp_errorCacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"replication_mtls_certificateVerification_ocsp_failureMode",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"},BM={settings_path:xM.SETTINGS_PATH_KEY,hdb_root_key:F.ROOTPATH,hdb_root:F.ROOTPATH,rootpath:F.ROOTPATH,server_port_key:F.OPERATIONSAPI_NETWORK_PORT,server_port:F.OPERATIONSAPI_NETWORK_PORT,cert_key:F.TLS_CERTIFICATE,certificate:F.TLS_CERTIFICATE,private_key_key:F.TLS_PRIVATEKEY,private_key:F.TLS_PRIVATEKEY,http_secure_enabled_key:F.OPERATIONSAPI_NETWORK_HTTPS,https_on:F.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:F.OPERATIONSAPI_NETWORK_CORS,cors_on:F.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:F.LOGGING_LEVEL,log_level:F.LOGGING_LEVEL,log_path_key:F.LOGGING_ROOT,log_path:F.LOGGING_ROOT,clustering_node_name_key:F.CLUSTERING_NODENAME,node_name:F.CLUSTERING_NODENAME,clustering_enabled_key:F.CLUSTERING_ENABLED,clustering:F.CLUSTERING_ENABLED,max_http_threads:F.THREADS_COUNT,max_hdb_processes:F.THREADS_COUNT,server_timeout_key:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:F.LOGGING_AUDITLOG,disable_transaction_log:F.LOGGING_AUDITLOG,operation_token_timeout_key:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:F.HTTP_PORT,custom_functions_port:F.HTTP_PORT,custom_functions_directory_key:F.COMPONENTSROOT,custom_functions_directory:F.COMPONENTSROOT,max_custom_function_processes:F.THREADS_COUNT,logging_console:F.LOGGING_CONSOLE,log_to_file:F.LOGGING_FILE,log_to_stdstreams:F.LOGGING_STDSTREAMS,local_studio_on:F.LOCALSTUDIO_ENABLED,clustering_port:F.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:F.CLUSTERING_USER,customfunctions_network_port:F.HTTP_PORT,customfunctions_tls_certificate:F.TLS_CERTIFICATE,customfunctions_network_cors:F.HTTP_CORS,customfunctions_network_corsaccesslist:F.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:F.HTTP_HEADERSTIMEOUT,customfunctions_network_https:F.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:F.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:F.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:F.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:F.HTTP_TIMEOUT,customfunctions_tls:F.TLS,http_threads:F.THREADS_COUNT,threads:F.THREADS_COUNT,threads_count:F.THREADS_COUNT,customfunctions_processes:F.THREADS_COUNT,customfunctions_root:F.COMPONENTSROOT,operationsapi_root:F.ROOTPATH};for(let e in F){let t=F[e];BM[t.toLowerCase()]=t}a5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},c5={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"},Fb={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"},l5={VERSION_DEFAULT:"2.2.0"},u5={DEVELOPMENT:8192,DEFAULT:512},d5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},f5=Symbol("metadata"),kb="__clustering__",FM="__createdtime__",kM="__updatedtime__",m5={CREATED_TIME:FM,UPDATED_TIME:kM},p5=[FM,kM],h5=15984864e5,d_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Hb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},E5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},_5=["*","%"],g5="func_val",f_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Tm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},m_={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"},Gb={HTTP:"http"},S5="3.x.x",ci={SUCCESS:"success",FAILURE:"failure"},Fa={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Qc=M((YNe,qM)=>{"use strict";var HM=require("minimist");qM.exports=T5;function T5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=GM(process.env),n=GM(HM(process.argv))):(r=process.env,n=HM(process.argv));let s={};for(let i=0,o=e.length;i<o;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}a(T5,"assignCMDENVVariables");function GM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(GM,"objKeysToLowerCase")});var Yt=M((zNe,VM)=>{"use strict";var y5="__dbis__",R5="__txns__",b5="__environment_name__",A5="__dbi_defintion__",I5={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"},w5=["__createdtime__","__updatedtime__"],N5="\uFFFF",$M={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},C5=Object.values($M);VM.exports={AUDIT_STORE_NAME:R5,INTERNAL_DBIS_NAME:y5,DBI_DEFINITION_NAME:A5,SEARCH_TYPES:I5,TIMESTAMP_NAMES:w5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:b5,TRANSACTIONS_DBI_NAMES_ENUM:$M,TRANSACTIONS_DBIS:C5,OVERFLOW_MARKER:N5}});var Rt=M((jNe,JM)=>{"use strict";var Im=(H(),v(z)),O5=oe(),vn=me(),wm=require("path"),P5=require("minimist"),KM=require("fs-extra"),YM=require("lodash");vn.initSync();var{CONFIG_PARAMS:ka,DATABASES_PARAM_CONFIG:ym,SYSTEM_SCHEMA_NAME:p_}=Im,Rm,bm,Am;function WM(){if(Rm!==void 0)return Rm;if(vn.getHdbBasePath()!==void 0)return Rm=vn.get(ka.STORAGE_PATH)||wm.join(vn.getHdbBasePath(),Im.DATABASES_DIR_NAME),Rm}a(WM,"getBaseSchemaPath");function zM(){if(bm!==void 0)return bm;if(vn.getHdbBasePath()!==void 0)return bm=QM(p_),bm}a(zM,"getSystemSchemaPath");function jM(){if(Am!==void 0)return Am;if(vn.getHdbBasePath()!==void 0)return Am=vn.get(Im.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||wm.join(vn.getHdbBasePath(),Im.TRANSACTIONS_DIR_NAME),Am}a(jM,"getTransactionAuditStoreBasePath");function L5(e,t){let r=vn.get(ka.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||wm.join(jM(),e.toString())}a(L5,"getTransactionAuditStorePath");function QM(e,t){e=e.toString(),t=t&&t.toString();let r=vn.get(Im.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||wm.join(WM(),e)}a(QM,"getSchemaPath");function D5(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,P5(process.argv));let n=r[ka.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!O5.isObject(n))throw o;i=n}for(let o of i){let c=o[p_];if(!c)continue;let l=vn.get(ka.DATABASES);l=l??{};let u=c?.tables?.[t]?.[ym.PATH];if(u)return YM.set(l,[p_,ym.TABLES,t,ym.PATH],u),vn.setProperty(ka.DATABASES,l),u;let d=c?.[ym.PATH];if(d)return YM.set(l,[p_,ym.PATH],d),vn.setProperty(ka.DATABASES,l),d}}let s=r[ka.STORAGE_PATH.toUpperCase()];if(s){if(!KM.pathExistsSync(s))throw new Error(s+" does not exist");let i=wm.join(s,e);return KM.mkdirsSync(i),vn.setProperty(ka.STORAGE_PATH,s),i}return zM()}a(D5,"initSystemSchemaPaths");function v5(){Rm=void 0,bm=void 0,Am=void 0}a(v5,"resetPaths");JM.exports={getBaseSchemaPath:WM,getSystemSchemaPath:zM,getTransactionAuditStorePath:L5,getTransactionAuditStoreBasePath:jM,getSchemaPath:QM,initSystemSchemaPaths:D5,resetPaths:v5}});var Jr=M((JNe,oU)=>{"use strict";var XM=(H(),v(z)),ZM=Yt(),eU={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},tU=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),rU={500:tU("There was an error processing your request."),400:"Invalid request"},M5=rU[eU.INTERNAL_SERVER_ERROR],U5={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},x5={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},B5={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(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:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((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:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},F5={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 ${ZM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${ZM.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"},k5={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${XM.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 ${XM.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"},nU={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"},H5={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:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(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:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(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."},G5={ATTR_PERM_MISSING:a((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:a((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:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(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:a(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:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((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:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(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:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},q5={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((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:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},$5={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},V5={ALTER_USER_DUP_ROLES:a(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:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},sU={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(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")},iU={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:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},K5={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"},Y5={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},W5={...nU,...B5,...U5,...H5,...G5,...q5,...$5,...V5,...k5,...sU,...iU,...K5,...Y5,...x5};oU.exports={CHECK_LOGS_WRAPPER:tU,HDB_ERROR_MSGS:W5,DEFAULT_ERROR_MSGS:rU,DEFAULT_ERROR_RESP:M5,HTTP_STATUS_CODES:eU,LMDB_ERRORS_ENUM:F5,AUTHENTICATION_ERROR_MSGS:nU,VALIDATION_ERROR_MSGS:sU,ITC_ERRORS:iU}});var Mn=M((tCe,dU)=>{"use strict";var z5=Jr().LMDB_ERRORS_ENUM,ZNe=require("lmdb"),j5=Yt(),eCe=require("buffer").Buffer,{OVERFLOW_MARKER:aU,MAX_SEARCH_KEY_LENGTH:h_}=j5,cU=["number","string","symbol","boolean","bigint"];function Q5(e){if(e=e?.primaryStore||e,!e)throw new Error(z5.ENV_REQUIRED)}a(Q5,"validateEnv");function J5(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(J5,"stringifyData");function X5(e){return e instanceof Date?e.valueOf():e}a(X5,"convertKeyValueToWrite");function Z5(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(cU.includes(typeof e))return e.length>h_?[e.slice(0,h_)+aU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(cU.includes(typeof i))i.length>h_?r.push(i.slice(0,h_)+aU):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}a(Z5,"getIndexedValues");var E_=0,lU=0;function uU(){lU=Date.now()-performance.now()}a(uU,"adjustStartTime");uU();var e8=6e4;setInterval(uU,e8).unref();function t8(){let e=performance.now()+lU;return e>E_?(E_=e,e):(E_+=488e-6,E_)}a(t8,"getNextMonotonicTime");dU.exports={validateEnv:Q5,stringifyData:J5,convertKeyValueToWrite:X5,getNextMonotonicTime:t8,getIndexedValues:Z5}});var Nm=M((nCe,fU)=>{"use strict";var r8=(H(),v(z)).OPERATIONS_ENUM,qb=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=r8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};fU.exports=qb});var _e=M((iCe,hU)=>{"use strict";var vu=Jr(),n8=(H(),v(z)),__=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,mU),this.statusCode=n||vu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vu.DEFAULT_ERROR_MSGS[n]?vu.DEFAULT_ERROR_MSGS[n]:vu.DEFAULT_ERROR_MSGS[vu.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&&J()[s](i)}},$b=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},Vb=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function mU(e,t,r,n=n8.LOG_LEVELS.ERROR,s=null,i=!1){if(pU(e))return e;let o=new __(e,t,r,n,s);return i&&delete o.stack,o}a(mU,"handleHDBError");function Mu(e){this.message=e}a(Mu,"Violation");Mu.prototype=Object.create(Error.prototype);Mu.prototype.constructor=Mu;Mu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var Kb=class extends Mu{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function pU(e){return e.__proto__.constructor.name===__.name}a(pU,"isHDBError");hU.exports={isHDBError:pU,handleHDBError:mU,ClientError:$b,ServerError:Vb,AccessViolation:Kb,Violation:Mu,hdbErrors:vu}});var Cm=M((cCe,SU)=>{"use strict";var aCe=Nm(),g_=(H(),v(z)),Yb=oe(),EU=J(),s8=require("uuid"),{handleHDBError:S_,hdbErrors:i8}=_e(),{HDB_ERROR_MSGS:T_,HTTP_STATUS_CODES:y_}=i8;SU.exports=_U;function _U(e,t,r){for(let s=0;s<t.length;s++)gU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];o8(i,r,e.operation)}}a(_U,"processRows");_U.validateAttribute=gU;function gU(e){if(Buffer.byteLength(String(e))>g_.INSERT_MAX_CHARACTER_SIZE)throw S_(new Error,T_.ATTR_NAME_LENGTH_ERR(e),y_.BAD_REQUEST,void 0,void 0,!0);if(Yb.isEmptyOrZeroLength(e)||Yb.isEmpty(e.trim()))throw S_(new Error,T_.ATTR_NAME_NULLISH_ERR,y_.BAD_REQUEST,void 0,void 0,!0)}a(gU,"validateAttribute");function o8(e,t,r){if(!e.hasOwnProperty(t)||Yb.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=s8.v4();return}throw EU.error("Update transaction aborted due to record with no hash value:",e),S_(new Error,T_.RECORD_MISSING_HASH_ERR,y_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MAX_CHARACTER_SIZE)throw EU.error(e),S_(new Error,T_.HASH_VAL_LENGTH_ERR,y_.BAD_REQUEST,void 0,void 0,!0)}a(o8,"validateHash")});function wU(e){zb=e}function u8(){l8=setInterval(function(){for(let e of Wb)if(e.stale){let t=e.getContext()?.url;bU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},c8).unref()}var jb,RU,bU,AU,IU,TU,Wb,a8,Do,Om,yU,zb,vo,R_,c8,l8,Pm=se(()=>{jb=b(Mn()),RU=b(_e()),bU=b(J()),AU=b(me());H();IU=b(oe()),TU=100,Wb=new Set,a8=(0,IU.convertToMS)(AU.get(F.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Do={CLOSED:0,OPEN:1,LINGERING:2};a(wU,"replicationConfirmation");vo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Do.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===Do.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),Wb.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Wb.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Om&&!this.overloadChecked&&performance.now()-yU>a8)throw new RU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Do.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Do.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,jb.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 R=g[p===0?"before":"beforeIntermediate"];if(R){let S=R();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?Do.LINGERING:Do.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];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 Om||(Om=s,yU=performance.now(),Om.then(()=>{Om=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];zb&&p&&i.push(zb(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=Do.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},R_=class extends vo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,jb.getNextMonotonicTime)())}getReadTxn(){}},c8=3e4;a(u8,"startMonitoringTxns");u8()});var NU,rs,Qb,Uu=se(()=>{NU=require("events"),rs=class extends NU.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Qb;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)}},Qb=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Do.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 vo;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,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var CU,Ha=se(()=>{CU=b(ai());Pm();a(bt,"transaction");(0,CU._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.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 Xb={};ye(Xb,{add:()=>b_,applyReverse:()=>OU,getRecordAtTime:()=>Jb,rebuildUpdateBefore:()=>A_});function b_(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 A_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,b_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function OU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=d8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=PU}}function Jb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":OU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===PU&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var d8,PU,I_=se(()=>{qi();a(b_,"add");b_.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)};d8={add:b_};a(A_,"rebuildUpdateBefore");a(OU,"applyReverse");PU={};a(Jb,"getRecordAtTime")});var Ir=M(N_=>{var w_=J();for(let e of["trace","debug","info","warn","error","fatal","notify"])w_.logsAtLevel(e)&&(N_[e]=w_[e]);N_.loggerWithTag=e=>w_.loggerWithTag(e,!0);N_.setLogLevel=w_.setLogLevel});var BU={};ye(BU,{parse:()=>tA,streamAsJSON:()=>Dm,stringify:()=>Jc});function Dm(e){return new Zb({value:e})}function LU(e){return console.error(e),JSON.stringify(Lm(e))}function DU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Jc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===UU)return xU(e);if(t.resolution)return t.resolution.then(()=>Jc(e));throw t}}function xU(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+=xU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Jc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function tA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),p8.test(e)?f8.parse(e):JSON.parse(e)):null}var vU,eA,MU,f8,m8,UU,Lm,Zb,p8,rA=se(()=>{vU=require("stream"),eA=b(J()),MU=b(require("json-bigint-fixes")),f8=(0,MU.default)({useNativeBigInt:!0}),m8=1e4,UU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw UU};({errorToString:Lm}=eA);a(Dm,"streamAsJSON");Zb=class extends vU.Readable{static{a(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 o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(eA.warn("Error serializing in stream",c),o={done:!1,value:{error:Lm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Lm(c)}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.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),LU)}catch(s){yield LU(s)}else yield Jc(t)}else yield Jc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);DU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Lm(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>m8?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 DU(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(Lm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(LU,"handleError");a(DU,"when");a(Jc,"stringify");a(xU,"jsStringify");p8=/[[,:]\s*-?\d{16,}/;a(tA,"parse")});var WU={};ye(WU,{asyncSerialization:()=>aA,contentTypes:()=>oA,findBestSerializer:()=>O_,getDeserializer:()=>Bo,hasAsyncSerialization:()=>cA,registerContentHandlers:()=>Um,serialize:()=>xm,serializeMessage:()=>xo,toCsvStream:()=>C_});function h8(e){try{return e?.[0]===123?iA(e):e}catch{return e}}function Um(e){e.register(E8,{serializers:[{regex:/^application\/json$/,serializer:Dm},{regex:/^application\/cbor$/,serializer:a(function(t){return new Xc.EncoderStream(Mm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Zc.Readable.from((0,$i.encodeIter)(t,Mm)):(0,$i.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),C_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,$i.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Xc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function O_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,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=hn.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new HU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(hn.keys()).join(", "),406);n=hn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function xm(e,t,r){let n=kU&&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 Ms)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=O_(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}),sA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Uo.createBrotliCompress)({params:{[Uo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Uo.constants.BROTLI_MODE_TEXT:Uo.constants.BROTLI_MODE_GENERIC,[Uo.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>kU?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Uo.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function xo(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Mo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=O_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=vm(e);return Mo?.length>0?(Mo.length===1?Mo[0]:Promise.all(Mo)).then(()=>xo(e,t,!0)):n}finally{Mo=void 0}}function aA(e){if(Mo)Mo.push(e);else throw new Error("Unable to serialize asynchronously")}function cA(){return!!Mo}function _8(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 S8(e){return g8.includes(e)}function T8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Bo(e="",t=!1){let r=T8(e),n=r.type&&hn.get(r.type)?.deserialize||y8(r);return t?s=>_8(s).then(n):n}function y8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!S8(e.parameters.charset)&&sA.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 iA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function R8(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 C_(e,t){let r=Zc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new $U.Transform(n,s);return r.pipe(i)}var $i,Xc,Uo,HU,Zc,GU,nA,qU,sA,$U,VU,KU,vm,iA,Mm,hn,oA,FU,YU,E8,kU,Mo,g8,Fo=se(()=>{rA();$i=require("msgpackr"),Xc=require("cbor-x"),Uo=require("zlib"),HU=b(_e()),Zc=b(require("stream"));Hr();GU=b(ai()),nA=b(me());H();qU=b(require("yaml")),sA=b(Ir());ns();$U=require("json2csv"),VU=b(require("fastify-plugin")),KU=nA.default.get(F.SERIALIZATION_BIGINT)!==!1,vm=KU?Jc:JSON.stringify,iA=KU?tA:JSON.parse,Mm={useRecords:!1,useToJSON:!0},hn=new Map,oA=hn;Be.contentTypes=oA;(0,GU._assignPackageExport)("contentTypes",oA);hn.set("application/json",{serializeStream:Dm,serialize:vm,deserialize(e){return iA(e)},q:.8});FU=new Xc.Encoder(Mm);hn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Xc.EncoderStream(Mm).end(e)},serialize:FU.encode,deserialize:FU.decode,q:1});hn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Zc.Readable.from((0,$i.encodeIter)(e,Mm)):(0,$i.pack)(e)},serialize:$i.pack,deserialize:$i.unpack,q:.9});hn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),C_(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]),C_(e,e?.getColumns?.())},q:.1});hn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Zc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});hn.set("text/yaml",{serialize(e){return qU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});hn.set("text/event-stream",{serializeStream:a(function(e){return Zc.Readable.from(R8(e,this.serialize))},"serializeStream"),serialize:a(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+`
|
|
1
|
+
var cX=Object.create;var hm=Object.defineProperty;var lX=Object.getOwnPropertyDescriptor;var uX=Object.getOwnPropertyNames;var dX=Object.getPrototypeOf,fX=Object.prototype.hasOwnProperty;var a=(e,t)=>hm(e,"name",{value:t,configurable:!0});var se=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)hm(e,r,{get:t[r],enumerable:!0})},CM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of uX(t))!fX.call(e,s)&&s!==r&&hm(e,s,{get:()=>t[s],enumerable:!(n=lX(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?cX(dX(e)):{},CM(t||!e||!e.__esModule?hm(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>CM(hm({},"__esModule",{value:!0}),e);var yt=M((qNe,LM)=>{var{join:mX,dirname:OM}=require("node:path"),{existsSync:pX,readFileSync:hX}=require("node:fs");function EX(){let t=__dirname,r,n=0;for(;!pX(r=mX(t,"package.json"));)if(t===(t=OM(t))||n++>10)throw new Error("Could not find package root");return r}a(EX,"findPackageJson");var PM=EX(),_X=JSON.parse(hX(PM,"utf8")),gX=OM(PM);LM.exports={packageJson:_X,PACKAGE_ROOT:gX}});var a_=M((VNe,DM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=yt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let N=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let $=0,ee=0;try{N.add(I),$=o(n(p,I)).mtimeMs-5e3,ee=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}$>ee&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!N.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let N=f("npx",["tsc"],{cwd:p});if(N.stdout?.length&&console.log(N.stdout.toString()),N.stderr?.length&&console.log(N.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),$=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),$=!0}catch{}if(!$){console.log("Starting background TypeScript compilation...");let ee=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});ee.on("error",G=>{console.error("Error trying to compile TypeScript",G)}),ee.pid&&l(I,String(ee.pid),"utf-8"),ee.unref()}}}}let g=DM.constructor,R=g._findPath;g._findPath=function(S,y,N){if(S.startsWith(".")&&!N&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),$;I.startsWith(E)?$=n(p,r(E,I)):$=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let ee=n($,S),G=ee+".js";if(i(G))return G;if(s(ee).includes(".")&&i(ee))return ee}return R(S,y,N)}}});var ai=M(ts=>{"use strict";global.Resource=ts.Resource=void 0;global.tables=ts.tables={};global.databases=ts.databases={};global.getUser=ts.getUser=void 0;global.authenticateUser=ts.authenticateUser=void 0;global.server=ts.server={};global.contentTypes=ts.contentTypes=null;global.threads=ts.threads=[];global.logger={};global.RequestTarget=ts.RequestTarget=void 0;global.operation=ts.operation=void 0;ts._assignPackageExport=(e,t)=>{global[e]=ts[e]=t}});var Em={};ye(Em,{server:()=>Be});var vM,Be,Hr=se(()=>{vM=b(ai()),Be={};(0,vM._assignPackageExport)("server",Be)});var z={};ye(z,{AUTH_AUDIT_STATUS:()=>ci,AUTH_AUDIT_TYPES:()=>Fa,BOOT_PROPS_FILE_NAME:()=>GX,BOOT_PROP_PARAMS:()=>xM,CLUSTERING_FLAG:()=>kb,CLUSTERING_PROCESSES:()=>CX,CLUSTER_MESSAGE_TYPE_ENUM:()=>Fb,CLUSTER_OPERATIONS:()=>n5,CONFIG_PARAMS:()=>F,CONFIG_PARAM_MAP:()=>BM,DATABASES_DIR_NAME:()=>jc,DATABASES_PARAM_CONFIG:()=>a5,DEFAULT_DATABASE_NAME:()=>PX,ESCAPED_FORWARD_SLASH_REGEX:()=>kX,FORWARD_SLASH_REGEX:()=>BX,FUNC_VAL:()=>g5,GEO_CONVERSION_ENUM:()=>i5,HDB_COMPONENT_CONFIG_FILE:()=>yX,HDB_CONFIG_FILE:()=>SX,HDB_DEFAULT_CONFIG_FILE:()=>TX,HDB_FILE_PERMISSIONS:()=>$X,HDB_HOME_DIR_NAME:()=>HX,HDB_PID_FILE:()=>OX,HDB_PROCESS_SERVICES:()=>NX,HDB_PROC_NAME:()=>RX,HDB_RESTART_SCRIPT:()=>bX,HDB_ROOT_DIR_NAME:()=>Mb,HDB_SETTINGS_NAMES:()=>Sm,HDB_SUPPORT_ADDRESS:()=>UM,INFO_TABLE_HASH_ATTRIBUTE:()=>jX,INSERT_MAX_CHARACTER_SIZE:()=>WX,INSTALL_PROMPTS:()=>YX,ITC_EVENT_TYPES:()=>m_,JOB_STATUS_ENUM:()=>ZX,JOB_TYPE_ENUM:()=>c5,JWT_ENUM:()=>Tm,LAUNCH_SERVICE_SCRIPTS:()=>DX,LEGACY_CONFIG_PARAMS:()=>o5,LEGACY_DATABASES_DIR_NAME:()=>u_,LICENSE_FILE_NAME:()=>XX,LICENSE_KEY_DIR_NAME:()=>Bb,LICENSE_VALUES:()=>l5,LOG_LEVELS:()=>_m,LOG_NAMES:()=>LX,METADATA_PROPERTY:()=>f5,NODE_ERROR_CODES:()=>d5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>E5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>h5,PRE_4_0_0_VERSION:()=>S5,PROCESS_DESCRIPTORS:()=>wX,PROCESS_NAME_ENV_PROP:()=>KX,RAM_ALLOCATION_ENUM:()=>u5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>f_,REG_KEY_FILE_NAME:()=>JX,RESTART_TIMEOUT_MS:()=>qX,ROLE_TYPES_ENUM:()=>vX,S3_BUCKET_AUTH_KEYS:()=>t5,SEARCH_NOT_FOUND_MESSAGE:()=>UX,SEARCH_WILDCARDS:()=>_5,SERVICE_ACTIONS_ENUM:()=>s5,SUPPORT_HELP_MSG:()=>MX,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>QX,SYSTEM_SCHEMA_NAME:()=>gm,SYSTEM_TABLE_NAMES:()=>Du,THREAD_TYPES:()=>Gb,TIME_STAMP_NAMES:()=>p5,TIME_STAMP_NAMES_ENUM:()=>m5,TRANSACTIONS_DIR_NAME:()=>VX,UNICODE_FORWARD_SLASH:()=>FX,UNICODE_PERIOD:()=>xX,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>zX,VALID_S3_FILE_TYPES:()=>e5,VALID_SQL_OPS_ENUM:()=>r5,VALUE_SEARCH_COMPARATORS:()=>d_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>Hb});var c_,l_,SX,TX,Mb,yX,RX,bX,MM,vb,Ub,xb,AX,IX,wX,NX,CX,OX,PX,LX,_m,DX,vX,UM,MX,UX,xX,BX,FX,kX,gm,HX,Bb,GX,qX,$X,jc,u_,VX,KX,xM,YX,WX,zX,Du,jX,QX,JX,XX,ZX,V,e5,t5,r5,n5,s5,i5,Sm,o5,F,BM,a5,c5,Fb,l5,u5,d5,f5,kb,FM,kM,m5,p5,h5,d_,Hb,E5,_5,g5,f_,Tm,m_,Gb,S5,ci,Fa,H=se(()=>{c_=require("node:path"),l_=b(yt()),SX="harperdb-config.yaml",TX="defaultConfig.yaml",Mb="hdb",yX="config.yaml",RX="harperdb.js",bX="restartHdb.js",MM="HarperDB",vb="Custom Functions",Ub="Clustering Hub",xb="Clustering Leaf",AX="Clustering Ingest Service",IX="Clustering Reply Service",wX={HDB:MM,CLUSTERING_HUB:Ub,CLUSTERING_LEAF:xb,CLUSTERING_INGEST_SERVICE:AX,CLUSTERING_REPLY_SERVICE:IX,CUSTOM_FUNCTIONS:vb,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"},NX={harperdb:MM,"clustering hub":Ub,"clustering leaf":xb,"custom functions":vb,custom_functions:vb,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},CX={CLUSTERING_HUB_PROC_DESCRIPTOR:Ub,CLUSTERING_LEAF_PROC_DESCRIPTOR:xb},OX="hdb.pid",PX="data",LX={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},_m={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},DX={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,c_.join)(l_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,c_.join)(l_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,c_.join)(l_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},vX={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},UM="support@harperdb.io",MX=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${UM}`,UX="None of the specified records were found.",xX="U+002E",BX=/\//g,FX="U+002F",kX=/U\+002F/g,gm="system",HX=".harperdb",Bb="keys",GX="hdb_boot_properties.file",qX=6e4,$X=448,jc="database",u_="schema",VX="transactions",KX="PROCESS_NAME",xM={SETTINGS_PATH_KEY:"settings_path"},YX={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"},WX=250,zX={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Du={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"},jX="info_id",QX={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"},JX="060493.ks",XX=".license",ZX={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",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",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",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",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"},e5={CSV:".csv",JSON:".json"},t5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},r5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},n5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},s5={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"},i5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Sm={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"},o5={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"},F={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_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL:"http_mtls_certificateVerification_crl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"http_mtls_certificateVerification_crl_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"http_mtls_certificateVerification_crl_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"http_mtls_certificateVerification_crl_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"http_mtls_certificateVerification_crl_gracePeriod",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP:"http_mtls_certificateVerification_ocsp",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"http_mtls_certificateVerification_ocsp_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"http_mtls_certificateVerification_ocsp_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"http_mtls_certificateVerification_ocsp_errorCacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"http_mtls_certificateVerification_ocsp_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_MTLS_CERTIFICATEVERIFICATION:"replication_mtls_certificateVerification",REPLICATION_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"replication_mtls_certificateVerification_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL:"replication_mtls_certificateVerification_crl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"replication_mtls_certificateVerification_crl_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"replication_mtls_certificateVerification_crl_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"replication_mtls_certificateVerification_crl_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"replication_mtls_certificateVerification_crl_gracePeriod",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP:"replication_mtls_certificateVerification_ocsp",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"replication_mtls_certificateVerification_ocsp_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"replication_mtls_certificateVerification_ocsp_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"replication_mtls_certificateVerification_ocsp_errorCacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"replication_mtls_certificateVerification_ocsp_failureMode",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"},BM={settings_path:xM.SETTINGS_PATH_KEY,hdb_root_key:F.ROOTPATH,hdb_root:F.ROOTPATH,rootpath:F.ROOTPATH,server_port_key:F.OPERATIONSAPI_NETWORK_PORT,server_port:F.OPERATIONSAPI_NETWORK_PORT,cert_key:F.TLS_CERTIFICATE,certificate:F.TLS_CERTIFICATE,private_key_key:F.TLS_PRIVATEKEY,private_key:F.TLS_PRIVATEKEY,http_secure_enabled_key:F.OPERATIONSAPI_NETWORK_HTTPS,https_on:F.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:F.OPERATIONSAPI_NETWORK_CORS,cors_on:F.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:F.LOGGING_LEVEL,log_level:F.LOGGING_LEVEL,log_path_key:F.LOGGING_ROOT,log_path:F.LOGGING_ROOT,clustering_node_name_key:F.CLUSTERING_NODENAME,node_name:F.CLUSTERING_NODENAME,clustering_enabled_key:F.CLUSTERING_ENABLED,clustering:F.CLUSTERING_ENABLED,max_http_threads:F.THREADS_COUNT,max_hdb_processes:F.THREADS_COUNT,server_timeout_key:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:F.LOGGING_AUDITLOG,disable_transaction_log:F.LOGGING_AUDITLOG,operation_token_timeout_key:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:F.HTTP_PORT,custom_functions_port:F.HTTP_PORT,custom_functions_directory_key:F.COMPONENTSROOT,custom_functions_directory:F.COMPONENTSROOT,max_custom_function_processes:F.THREADS_COUNT,logging_console:F.LOGGING_CONSOLE,log_to_file:F.LOGGING_FILE,log_to_stdstreams:F.LOGGING_STDSTREAMS,local_studio_on:F.LOCALSTUDIO_ENABLED,clustering_port:F.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:F.CLUSTERING_USER,customfunctions_network_port:F.HTTP_PORT,customfunctions_tls_certificate:F.TLS_CERTIFICATE,customfunctions_network_cors:F.HTTP_CORS,customfunctions_network_corsaccesslist:F.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:F.HTTP_HEADERSTIMEOUT,customfunctions_network_https:F.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:F.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:F.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:F.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:F.HTTP_TIMEOUT,customfunctions_tls:F.TLS,http_threads:F.THREADS_COUNT,threads:F.THREADS_COUNT,threads_count:F.THREADS_COUNT,customfunctions_processes:F.THREADS_COUNT,customfunctions_root:F.COMPONENTSROOT,operationsapi_root:F.ROOTPATH};for(let e in F){let t=F[e];BM[t.toLowerCase()]=t}a5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},c5={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"},Fb={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"},l5={VERSION_DEFAULT:"2.2.0"},u5={DEVELOPMENT:8192,DEFAULT:512},d5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},f5=Symbol("metadata"),kb="__clustering__",FM="__createdtime__",kM="__updatedtime__",m5={CREATED_TIME:FM,UPDATED_TIME:kM},p5=[FM,kM],h5=15984864e5,d_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Hb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},E5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},_5=["*","%"],g5="func_val",f_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Tm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},m_={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"},Gb={HTTP:"http"},S5="3.x.x",ci={SUCCESS:"success",FAILURE:"failure"},Fa={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Qc=M((YNe,qM)=>{"use strict";var HM=require("minimist");qM.exports=T5;function T5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=GM(process.env),n=GM(HM(process.argv))):(r=process.env,n=HM(process.argv));let s={};for(let i=0,o=e.length;i<o;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}a(T5,"assignCMDENVVariables");function GM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(GM,"objKeysToLowerCase")});var Yt=M((zNe,VM)=>{"use strict";var y5="__dbis__",R5="__txns__",b5="__environment_name__",A5="__dbi_defintion__",I5={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"},w5=["__createdtime__","__updatedtime__"],N5="\uFFFF",$M={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},C5=Object.values($M);VM.exports={AUDIT_STORE_NAME:R5,INTERNAL_DBIS_NAME:y5,DBI_DEFINITION_NAME:A5,SEARCH_TYPES:I5,TIMESTAMP_NAMES:w5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:b5,TRANSACTIONS_DBI_NAMES_ENUM:$M,TRANSACTIONS_DBIS:C5,OVERFLOW_MARKER:N5}});var Rt=M((jNe,JM)=>{"use strict";var Im=(H(),v(z)),O5=oe(),vn=me(),wm=require("path"),P5=require("minimist"),KM=require("fs-extra"),YM=require("lodash");vn.initSync();var{CONFIG_PARAMS:ka,DATABASES_PARAM_CONFIG:ym,SYSTEM_SCHEMA_NAME:p_}=Im,Rm,bm,Am;function WM(){if(Rm!==void 0)return Rm;if(vn.getHdbBasePath()!==void 0)return Rm=vn.get(ka.STORAGE_PATH)||wm.join(vn.getHdbBasePath(),Im.DATABASES_DIR_NAME),Rm}a(WM,"getBaseSchemaPath");function zM(){if(bm!==void 0)return bm;if(vn.getHdbBasePath()!==void 0)return bm=QM(p_),bm}a(zM,"getSystemSchemaPath");function jM(){if(Am!==void 0)return Am;if(vn.getHdbBasePath()!==void 0)return Am=vn.get(Im.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||wm.join(vn.getHdbBasePath(),Im.TRANSACTIONS_DIR_NAME),Am}a(jM,"getTransactionAuditStoreBasePath");function L5(e,t){let r=vn.get(ka.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||wm.join(jM(),e.toString())}a(L5,"getTransactionAuditStorePath");function QM(e,t){e=e.toString(),t=t&&t.toString();let r=vn.get(Im.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||wm.join(WM(),e)}a(QM,"getSchemaPath");function D5(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,P5(process.argv));let n=r[ka.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!O5.isObject(n))throw o;i=n}for(let o of i){let c=o[p_];if(!c)continue;let l=vn.get(ka.DATABASES);l=l??{};let u=c?.tables?.[t]?.[ym.PATH];if(u)return YM.set(l,[p_,ym.TABLES,t,ym.PATH],u),vn.setProperty(ka.DATABASES,l),u;let d=c?.[ym.PATH];if(d)return YM.set(l,[p_,ym.PATH],d),vn.setProperty(ka.DATABASES,l),d}}let s=r[ka.STORAGE_PATH.toUpperCase()];if(s){if(!KM.pathExistsSync(s))throw new Error(s+" does not exist");let i=wm.join(s,e);return KM.mkdirsSync(i),vn.setProperty(ka.STORAGE_PATH,s),i}return zM()}a(D5,"initSystemSchemaPaths");function v5(){Rm=void 0,bm=void 0,Am=void 0}a(v5,"resetPaths");JM.exports={getBaseSchemaPath:WM,getSystemSchemaPath:zM,getTransactionAuditStorePath:L5,getTransactionAuditStoreBasePath:jM,getSchemaPath:QM,initSystemSchemaPaths:D5,resetPaths:v5}});var Jr=M((JNe,oU)=>{"use strict";var XM=(H(),v(z)),ZM=Yt(),eU={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},tU=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),rU={500:tU("There was an error processing your request."),400:"Invalid request"},M5=rU[eU.INTERNAL_SERVER_ERROR],U5={OP_NOT_SUPPORTED_FOR_FS:a(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:a(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:a(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:a(e=>`${e} not found.`,"NOT_FOUND")},x5={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},B5={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:a(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:a(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:a(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:a((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:a(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},F5={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 ${ZM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${ZM.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"},k5={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${XM.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 ${XM.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"},nU={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"},H5={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:a(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:a(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:a((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:a(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."},G5={ATTR_PERM_MISSING:a((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:a((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:a(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:a(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:a(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:a(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:a(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:a(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:a(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:a((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:a(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:a(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:a(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:a(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:a(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},q5={ATTR_NOT_FOUND:a((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:a((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:a(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:a(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:a(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:a((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:a((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},$5={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},V5={ALTER_USER_DUP_ROLES:a(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:a(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:a(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:a(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:a(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:a(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},sU={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:a(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")},iU={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:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},K5={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"},Y5={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},W5={...nU,...B5,...U5,...H5,...G5,...q5,...$5,...V5,...k5,...sU,...iU,...K5,...Y5,...x5};oU.exports={CHECK_LOGS_WRAPPER:tU,HDB_ERROR_MSGS:W5,DEFAULT_ERROR_MSGS:rU,DEFAULT_ERROR_RESP:M5,HTTP_STATUS_CODES:eU,LMDB_ERRORS_ENUM:F5,AUTHENTICATION_ERROR_MSGS:nU,VALIDATION_ERROR_MSGS:sU,ITC_ERRORS:iU}});var Mn=M((tCe,dU)=>{"use strict";var z5=Jr().LMDB_ERRORS_ENUM,ZNe=require("lmdb"),j5=Yt(),eCe=require("buffer").Buffer,{OVERFLOW_MARKER:aU,MAX_SEARCH_KEY_LENGTH:h_}=j5,cU=["number","string","symbol","boolean","bigint"];function Q5(e){if(e=e?.primaryStore||e,!e)throw new Error(z5.ENV_REQUIRED)}a(Q5,"validateEnv");function J5(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(J5,"stringifyData");function X5(e){return e instanceof Date?e.valueOf():e}a(X5,"convertKeyValueToWrite");function Z5(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(cU.includes(typeof e))return e.length>h_?[e.slice(0,h_)+aU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(cU.includes(typeof i))i.length>h_?r.push(i.slice(0,h_)+aU):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}a(Z5,"getIndexedValues");var E_=0,lU=0;function uU(){lU=Date.now()-performance.now()}a(uU,"adjustStartTime");uU();var e8=6e4;setInterval(uU,e8).unref();function t8(){let e=performance.now()+lU;return e>E_?(E_=e,e):(E_+=488e-6,E_)}a(t8,"getNextMonotonicTime");dU.exports={validateEnv:Q5,stringifyData:J5,convertKeyValueToWrite:X5,getNextMonotonicTime:t8,getIndexedValues:Z5}});var Nm=M((nCe,fU)=>{"use strict";var r8=(H(),v(z)).OPERATIONS_ENUM,qb=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=r8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};fU.exports=qb});var _e=M((iCe,hU)=>{"use strict";var vu=Jr(),n8=(H(),v(z)),__=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),J().warn(`An HDB Error was created: ${this.stack}`),Error.captureStackTrace(this,mU),this.statusCode=n||vu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vu.DEFAULT_ERROR_MSGS[n]?vu.DEFAULT_ERROR_MSGS[n]:vu.DEFAULT_ERROR_MSGS[vu.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&&J()[s](i)}},$b=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},Vb=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function mU(e,t,r,n=n8.LOG_LEVELS.ERROR,s=null,i=!1){if(pU(e))return e;let o=new __(e,t,r,n,s);return i&&delete o.stack,o}a(mU,"handleHDBError");function Mu(e){this.message=e}a(Mu,"Violation");Mu.prototype=Object.create(Error.prototype);Mu.prototype.constructor=Mu;Mu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var Kb=class extends Mu{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function pU(e){return e.__proto__.constructor.name===__.name}a(pU,"isHDBError");hU.exports={isHDBError:pU,handleHDBError:mU,ClientError:$b,ServerError:Vb,AccessViolation:Kb,Violation:Mu,hdbErrors:vu}});var Cm=M((cCe,SU)=>{"use strict";var aCe=Nm(),g_=(H(),v(z)),Yb=oe(),EU=J(),s8=require("uuid"),{handleHDBError:S_,hdbErrors:i8}=_e(),{HDB_ERROR_MSGS:T_,HTTP_STATUS_CODES:y_}=i8;SU.exports=_U;function _U(e,t,r){for(let s=0;s<t.length;s++)gU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];o8(i,r,e.operation)}}a(_U,"processRows");_U.validateAttribute=gU;function gU(e){if(Buffer.byteLength(String(e))>g_.INSERT_MAX_CHARACTER_SIZE)throw S_(new Error,T_.ATTR_NAME_LENGTH_ERR(e),y_.BAD_REQUEST,void 0,void 0,!0);if(Yb.isEmptyOrZeroLength(e)||Yb.isEmpty(e.trim()))throw S_(new Error,T_.ATTR_NAME_NULLISH_ERR,y_.BAD_REQUEST,void 0,void 0,!0)}a(gU,"validateAttribute");function o8(e,t,r){if(!e.hasOwnProperty(t)||Yb.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=s8.v4();return}throw EU.error("Update transaction aborted due to record with no hash value:",e),S_(new Error,T_.RECORD_MISSING_HASH_ERR,y_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MAX_CHARACTER_SIZE)throw EU.error(e),S_(new Error,T_.HASH_VAL_LENGTH_ERR,y_.BAD_REQUEST,void 0,void 0,!0)}a(o8,"validateHash")});function wU(e){zb=e}function u8(){l8=setInterval(function(){for(let e of Wb)if(e.stale){let t=e.getContext()?.url;bU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},c8).unref()}var jb,RU,bU,AU,IU,TU,Wb,a8,Do,Om,yU,zb,vo,R_,c8,l8,Pm=se(()=>{jb=b(Mn()),RU=b(_e()),bU=b(J()),AU=b(me());H();IU=b(oe()),TU=100,Wb=new Set,a8=(0,IU.convertToMS)(AU.get(F.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Do={CLOSED:0,OPEN:1,LINGERING:2};a(wU,"replicationConfirmation");vo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Do.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===Do.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),Wb.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Wb.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Om&&!this.overloadChecked&&performance.now()-yU>a8)throw new RU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Do.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Do.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,jb.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 R=g[p===0?"before":"beforeIntermediate"];if(R){let S=R();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?Do.LINGERING:Do.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];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 Om||(Om=s,yU=performance.now(),Om.then(()=>{Om=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];zb&&p&&i.push(zb(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=Do.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},R_=class extends vo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,jb.getNextMonotonicTime)())}getReadTxn(){}},c8=3e4;a(u8,"startMonitoringTxns");u8()});var NU,rs,Qb,Uu=se(()=>{NU=require("events"),rs=class extends NU.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Qb;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)}},Qb=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Do.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 vo;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,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var CU,Ha=se(()=>{CU=b(ai());Pm();a(bt,"transaction");(0,CU._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.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 Xb={};ye(Xb,{add:()=>b_,applyReverse:()=>OU,getRecordAtTime:()=>Jb,rebuildUpdateBefore:()=>A_});function b_(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 A_(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let o=e[s];if(o?.__op__)if(o.__op__===i.__op__)n||(n={}),n[s]=o;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=o,b_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function OU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=d8[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=PU}}function Jb(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":OU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===PU&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var d8,PU,I_=se(()=>{qi();a(b_,"add");b_.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)};d8={add:b_};a(A_,"rebuildUpdateBefore");a(OU,"applyReverse");PU={};a(Jb,"getRecordAtTime")});var Ir=M(N_=>{var w_=J();for(let e of["trace","debug","info","warn","error","fatal","notify"])w_.logsAtLevel(e)&&(N_[e]=w_[e]);N_.loggerWithTag=e=>w_.loggerWithTag(e,!0);N_.setLogLevel=w_.setLogLevel});var BU={};ye(BU,{parse:()=>tA,streamAsJSON:()=>Dm,stringify:()=>Jc});function Dm(e){return new Zb({value:e})}function LU(e){return console.error(e),JSON.stringify(Lm(e))}function DU(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Jc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===UU)return xU(e);if(t.resolution)return t.resolution.then(()=>Jc(e));throw t}}function xU(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+=xU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Jc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function tA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),p8.test(e)?f8.parse(e):JSON.parse(e)):null}var vU,eA,MU,f8,m8,UU,Lm,Zb,p8,rA=se(()=>{vU=require("stream"),eA=b(J()),MU=b(require("json-bigint-fixes")),f8=(0,MU.default)({useNativeBigInt:!0}),m8=1e4,UU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw UU};({errorToString:Lm}=eA);a(Dm,"streamAsJSON");Zb=class extends vU.Readable{static{a(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 o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(eA.warn("Error serializing in stream",c),o={done:!1,value:{error:Lm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Lm(c)}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.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),LU)}catch(s){yield LU(s)}else yield Jc(t)}else yield Jc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);DU(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Lm(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>m8?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 DU(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(Lm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(LU,"handleError");a(DU,"when");a(Jc,"stringify");a(xU,"jsStringify");p8=/[[,:]\s*-?\d{16,}/;a(tA,"parse")});var WU={};ye(WU,{asyncSerialization:()=>aA,contentTypes:()=>oA,findBestSerializer:()=>O_,getDeserializer:()=>Bo,hasAsyncSerialization:()=>cA,registerContentHandlers:()=>Um,serialize:()=>xm,serializeMessage:()=>xo,toCsvStream:()=>C_});function h8(e){try{return e?.[0]===123?iA(e):e}catch{return e}}function Um(e){e.register(E8,{serializers:[{regex:/^application\/json$/,serializer:Dm},{regex:/^application\/cbor$/,serializer:a(function(t){return new Xc.EncoderStream(Mm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Zc.Readable.from((0,$i.encodeIter)(t,Mm)):(0,$i.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),C_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,$i.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Xc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function O_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,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=hn.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new HU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(hn.keys()).join(", "),406);n=hn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function xm(e,t,r){let n=kU&&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 Ms)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=O_(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}),sA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Uo.createBrotliCompress)({params:{[Uo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Uo.constants.BROTLI_MODE_TEXT:Uo.constants.BROTLI_MODE_GENERIC,[Uo.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>kU?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Uo.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function xo(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Mo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=O_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=vm(e);return Mo?.length>0?(Mo.length===1?Mo[0]:Promise.all(Mo)).then(()=>xo(e,t,!0)):n}finally{Mo=void 0}}function aA(e){if(Mo)Mo.push(e);else throw new Error("Unable to serialize asynchronously")}function cA(){return!!Mo}function _8(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 S8(e){return g8.includes(e)}function T8(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Bo(e="",t=!1){let r=T8(e),n=r.type&&hn.get(r.type)?.deserialize||y8(r);return t?s=>_8(s).then(n):n}function y8(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!S8(e.parameters.charset)&&sA.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 iA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function R8(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 C_(e,t){let r=Zc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new $U.Transform(n,s);return r.pipe(i)}var $i,Xc,Uo,HU,Zc,GU,nA,qU,sA,$U,VU,KU,vm,iA,Mm,hn,oA,FU,YU,E8,kU,Mo,g8,Fo=se(()=>{rA();$i=require("msgpackr"),Xc=require("cbor-x"),Uo=require("zlib"),HU=b(_e()),Zc=b(require("stream"));Hr();GU=b(ai()),nA=b(me());H();qU=b(require("yaml")),sA=b(Ir());ns();$U=require("json2csv"),VU=b(require("fastify-plugin")),KU=nA.default.get(F.SERIALIZATION_BIGINT)!==!1,vm=KU?Jc:JSON.stringify,iA=KU?tA:JSON.parse,Mm={useRecords:!1,useToJSON:!0},hn=new Map,oA=hn;Be.contentTypes=oA;(0,GU._assignPackageExport)("contentTypes",oA);hn.set("application/json",{serializeStream:Dm,serialize:vm,deserialize(e){return iA(e)},q:.8});FU=new Xc.Encoder(Mm);hn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Xc.EncoderStream(Mm).end(e)},serialize:FU.encode,deserialize:FU.decode,q:1});hn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Zc.Readable.from((0,$i.encodeIter)(e,Mm)):(0,$i.pack)(e)},serialize:$i.pack,deserialize:$i.unpack,q:.9});hn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),C_(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]),C_(e,e?.getColumns?.())},q:.1});hn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Zc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});hn.set("text/yaml",{serialize(e){return qU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});hn.set("text/event-stream",{serializeStream:a(function(e){return Zc.Readable.from(R8(e,this.serialize))},"serializeStream"),serialize:a(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+`
|
|
2
2
|
`),e.data){let r=e.data;typeof r=="object"&&(r=vm(r)),t+="data: "+r+`
|
|
3
3
|
`}return e.id&&(t+="id: "+e.id+`
|
|
4
4
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -19,7 +19,7 @@ var cX=Object.create;var hm=Object.defineProperty;var lX=Object.getOwnPropertyDe
|
|
|
19
19
|
`}`;c?(c.length<Lq?c.push(E):c.length===Lq&&c.push(`Maximum log buffer rate reached, logs will be throttled
|
|
20
20
|
`),Ld&&(clearTimeout(o),f())):Ld||l<performance.now()+Dq?f(E):(l=Math.min(l,performance.now()+Dq),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();Zo.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{Zo.closeSync(s)}catch{}s=null,r&&(CS=null)}function p(h){if(!s){try{s=Zo.openSync(e,"a"),r&&(CS=s)}catch(E){if(E.code==="ENOENT"&&!h)return Zo.mkdirpSync(Xp.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},Rce).unref()}}}a(vq,"getFileLogger");function Cce(...e){Pt.info(...e)}a(Cce,"info");function Oce(...e){Pt.trace(...e)}a(Oce,"trace");function vN(...e){Pt.error(...e)}a(vN,"error");function Pce(...e){Pt.debug(...e)}a(Pce,"debug");function Lce(...e){Pt.notify(...e)}a(Lce,"notify");function Dce(...e){Pt.fatal(...e)}a(Dce,"fatal");function vce(...e){Pt.warn(...e)}a(vce,"warn");function Mce(e,t,r,...n){DN=r.service_name;try{Pt[e](...n)}finally{DN=void 0}}a(Mce,"logCustomLevel");function Uce(){let e;try{e=_ce.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ea(e,Kr.HDB_HOME_DIR_NAME,Kr.BOOT_PROPS_FILE_NAME);return Zo.existsSync(t)||(t=ea(MN,"utility/hdb_boot_properties.file")),t}a(Uce,"getPropsFilePath");function xce(e){lo=e}a(xce,"setLogLevel");function Bce(e){try{if(e.includes("config/settings.js")){let l=xq(e);return{level:l.get(Kr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:Xp.dirname(l.get(Kr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(Kr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(Kr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Uq.parseDocument(Zo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),o=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,rotation:c}}catch(t){if(t.code===Kr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Bce,"getLogConfig");function Fce(){try{let e=Uq.parseDocument(Zo.readFileSync(yce,"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)}}a(Fce,"getDefaultConfig");function kce(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(kce,"errorToString");function Hce(e){Pt=e}a(Hce,"setMainLogger");function Hq(){try{Zo.closeSync(CS)}catch{}CS=null}a(Hq,"closeLogFile");function Gce(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}a(Gce,"AuthAuditLog");var{RootConfigWatcher:qce}=(Cq(),v(Nq))});var me=M((Vq,Kq)=>{"use strict";var UN=require("fs-extra"),Fl=require("path"),Gq=require("os"),$ce=require("properties-reader"),rh=J(),th=oe(),He=(H(),v(z)),vS=gt(),Vce="Error initializing environment manager",MS="BOOT_PROPS_FILE_PATH",qq=!1,Kce={[He.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ta={};Object.assign(Vq,Kq.exports={BOOT_PROPS_FILE_PATH:MS,getHdbBasePath:Yce,setHdbBasePath:Wce,get:$q,initSync:jce,setProperty:tt,initTestEnvironment:Qce});function Yce(){return ta[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Yce,"getHdbBasePath");function Wce(e){ta[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Wce,"setHdbBasePath");function $q(e){let t=vS.getConfigValue(e);return t===void 0?ta[e]:t}a($q,"get");function tt(e,t){Kce[e]&&(ta[e]=t),vS.updateConfigObject(e,t)}a(tt,"setProperty");function zce(){let e;try{e=th.getPropsFilePath(),UN.accessSync(e,UN.constants.F_OK|UN.constants.R_OK),qq=!0;let t=$ce(e);return ta[He.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(He.HDB_SETTINGS_NAMES.INSTALL_USER),ta[He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ta[MS]=e,!0}catch{return rh.trace(`Environment manager found no properties file at ${e}`),!1}}a(zce,"doesPropFileExist");function jce(e=!1){try{(qq||zce()||th.noBootFile()||e)&&(vS.initConfig(e),ta[He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=vS.getConfigValue(He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){rh.error(Vce),rh.error(t),console.error(t),process.exit(1)}}a(jce,"initSync");function Qce(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,l=Fl.join(__dirname,"../../","unitTests");ta[MS]=Fl.join(l,"hdb_boot_properties.file"),tt(He.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Fl.join(l,"settings.test")),tt(He.HDB_SETTINGS_NAMES.INSTALL_USER,Gq.userInfo()?Gq.userInfo().username:void 0),tt(He.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),tt(He.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Fl.join(l,"envDir","log")),tt(He.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),tt(He.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),tt(He.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),tt(He.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Fl.join(l,"envDir")),tt(He.CONFIG_PARAMS.STORAGE_PATH,Fl.join(l,"envDir")),s&&(tt(He.CONFIG_PARAMS.HTTP_SECUREPORT,$q(He.CONFIG_PARAMS.HTTP_PORT)),tt(He.CONFIG_PARAMS.HTTP_PORT,null)),tt(He.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),tt(He.CONFIG_PARAMS.HTTP_PORT,9926),tt(He.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),tt(He.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),tt(He.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,th.isEmpty(i)?!1:i),tt(He.CONFIG_PARAMS.HTTP_CORS,th.isEmpty(i)?!1:i),tt(He.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),tt(He.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),tt(He.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),tt(He.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),tt(He.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Fl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),tt(He.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,th.isEmpty(c)?!1:c),o&&(tt("CORS_ACCESSLIST",o),tt(He.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(tt(He.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),tt(He.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(tt(He.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),tt(He.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(tt(He.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),tt(He.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${MS}. Please check your boot props and settings files`;rh.fatal(r),rh.error(t)}}a(Qce,"initTestEnvironment")});var FN={};ye(FN,{loadGQLSchema:()=>Zce,start:()=>BN,startOnMainThread:()=>Xce});function BN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=o(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let $=function(G){if(G.kind==="NonNullType"){let Y=$(G.type);return Y.nullable=!1,Y}if(G.kind==="ListType")return{type:"array",elements:$(G.type)};let j={type:G.name?.value};return Object.defineProperty(j,"location",{value:G.loc.startToken}),j};a($,"getProperty");let S=R.name.value,y=[],N={table:null,database:null,properties:y};m.set(S,N),i.allTypes.set(S,N);for(let G of R.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 I=!1,ee={};for(let G of R.fields){let k=$(G.type);k.name=G.name.value,y.push(k),ee[k.name]=void 0;for(let j of G.directives){let Y=j.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",j.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let ce={};for(let de of j.arguments||[])ce[de.name.value]=de.value.value;k.indexed=ce}else if(Y==="computed"){for(let ce of j.arguments||[])if(ce.name.value==="from"){let de=ce.value.value;k.computed={from:g(de,ce,ee)},k.version==null&&(k.version=de)}else ce.name.value==="version"&&(k.version=ce.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let ce={};for(let de of j.arguments)ce[de.name.value]=de.value.value;k.relationship=ce}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="enumerable")k.enumerable=!0;else if(Y==="allow"){let ce=k.authorizedRoles=[];for(let de of j.arguments)de.name.value==="role"&&ce.push(de.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(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):Jce.includes(R.type)||(0,Wq.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,xN.dirname)(n),R.tableClass):i.set((0,xN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new Yq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(g,"createComputedFrom")}}var xN,Yq,Wq,Jce,Xce,Zce,zq=se(()=>{xN=require("path"),Yq=require("node:vm");we();Wq=b(st());Wa();Jce=["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","enumerable"]);a(BN,"start");Xce=BN,Zce=a(e=>BN({ensureTable:Xe}).handleFile(e,null,null,new ed),"loadGQLSchema")});var HN={};ye(HN,{start:()=>cle});function ele(e){if(e.kind!==Ge.Kind.OPERATION_DEFINITION&&e.kind!==Ge.Kind.FRAGMENT_DEFINITION)throw new Yr(`Unexpected non-executable definition type ${e.kind}.`)}function jq(e){if(typeof e!="object"||e===null)throw new uo("Request body must be an object.");if(!("query"in e))throw new uo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new uo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new uo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new uo("Request body `operationName` field must be a string.")}function kN(e){return parseInt(e.value,10)}function Jq(e){return parseFloat(e.value)}function Xq(e,t,r){let n=r.get(e.name.value);return Zq(n)?e$(n,t):{attribute:t,value:n}}function Zq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function e$(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],Zq(n)?e$(n,t):{attribute:t,value:n}))}function tle(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Ge.Kind.NULL:return{attribute:t,value:null};case Ge.Kind.INT:return{attribute:t,value:kN(e.value)};case Ge.Kind.FLOAT:return{attribute:t,value:Jq(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:t,value:e.value.value};case Ge.Kind.VARIABLE:return Xq(e.value,t,r);case Ge.Kind.OBJECT:return t$(e.value,t,r);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new Yr(`Value type, ${e.value.kind}, is not supported.`)}}function t$(e,t,r){return e.fields.flatMap(n=>tle(n,t,r))}function rle(e,t){switch(e.value.kind){case Ge.Kind.NULL:return{attribute:e.name.value,value:null};case Ge.Kind.INT:return{attribute:e.name.value,value:kN(e.value)};case Ge.Kind.FLOAT:return{attribute:e.name.value,value:Jq(e.value)};case Ge.Kind.BOOLEAN:case Ge.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Ge.Kind.VARIABLE:return Xq(e.value,e.name.value,t);case Ge.Kind.OBJECT:return t$(e.value,[e.name.value],t);case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new Yr(`Argument type, ${e.value.kind}, is not supported.`)}}function nle(e,t){return e.flatMap(r=>rle(r,t))}function US(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Ge.Kind.FIELD:return r;case Ge.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Yr(`Fragment \`${n}\` not found.`);return US(s.selectionSet,t)}case Ge.Kind.INLINE_FRAGMENT:return US(r.selectionSet,t)}})}function r$(e,t){return US(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:r$(r.selectionSet,t)}:r.name.value)}async function sle(e,t,r,n){let s=Bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Yr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:r$(e.selectionSet,r),conditions:nle(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(o,n))c.push(l);return[e.name.value,c]}function n$(e){switch(e.kind){case Ge.Kind.NULL:return null;case Ge.Kind.INT:return kN(e);case Ge.Kind.FLOAT:return parseFloat(e.value);case Ge.Kind.STRING:case Ge.Kind.BOOLEAN:return e.value;case Ge.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:n$(r.value),...t}),{});case Ge.Kind.LIST:case Ge.Kind.ENUM:default:throw new Yr(`Value type, ${e.kind}, is not supported.`)}}function ile(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=n$(n.defaultValue)),n.type.kind===Ge.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Yr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function ole(e,t,r,n){if(e.operation===Ge.OperationTypeNode.SUBSCRIPTION)throw new Yr("Subscriptions are not supported.");if(e.operation===Ge.OperationTypeNode.MUTATION)throw new Yr("Mutations are not supported yet.");let s=ile(e.variableDefinitions,t),i=await Promise.all(US(e.selectionSet,r).map(c=>sle(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function Qq({query:e,variables:t={},operationName:r},n){let s=Ge.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(ele(u),u.kind===Ge.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Yr("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 Yr(`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 Yr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Yr(`Operation \`${r}\` not found.`);let l=await ole(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function ale(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 jq(r),Qq(r,e)}case"POST":{let r=await Bo(e.headers.get("content-type"),!0)(e._nodeRequest);return jq(r),Qq(r,e)}default:throw new uo("Method Not Allowed",405,{Allow:"GET, POST"})}}function cle(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await ale(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof uo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Yr)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 uo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Ge.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Yr)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 Ge,Yr,uo,s$=se(()=>{Ge=b(require("graphql"));Fo();Wa();a(ele,"assertExecutableDefinitionNode");a(jq,"assertRequestParams");a(kN,"processIntValueNode");a(Jq,"processFloatValueNode");a(Xq,"processVariableNode");a(Zq,"isObject");a(e$,"transformObjectIntoQueryCondition");a(tle,"processObjectFieldNode");a(t$,"processObjectValueNode");a(rle,"processArgumentNode");a(nle,"buildConditionsQuery");a(US,"fillInFragments");a(r$,"buildSelectQuery");a(sle,"processFieldNode");a(n$,"processConstValueNode");a(ile,"resolveVariables");a(ole,"executeOperation");a(Qq,"resolver");Yr=class extends Error{static{a(this,"GraphQLQueryingError")}},uo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(ale,"graphqlQueryingHandler");a(cle,"start")});var u$=M((uUe,l$)=>{var Dd=require("validate.js"),o$=mt(),vd=(H(),v(z)),{handleHDBError:lle,hdbErrors:ule}=_e(),{HDB_ERROR_MSGS:ir,HTTP_STATUS_CODES:dle}=ule,GN=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),fle={STRUCTURE_USER:"structure_user"},i$=Object.values(vd.ROLE_TYPES_ENUM),mle="attribute_permissions",ple="attribute_name",{PERMS_CRUD_ENUM:Md}=vd,hle=[mle,...Object.values(Md)],a$=[Md.READ,Md.INSERT,Md.UPDATE],Ele=[ple,...a$];function _le(e){let t=GN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,c$(e,t)}a(_le,"addRoleValidation");function gle(e){let t=GN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,c$(e,t)}a(gle,"alterRoleValidation");function Sle(e){let t=GN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,o$.validateObject(e,t)}a(Sle,"dropRoleValidation");var Tle=["operation","role","id","permission","hdb_user","access"];function c$(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Tle.includes(n[o])||s.push(n[o]);s.length>0&&pr(ir.INVALID_ROLE_JSON_KEYS(s),r);let i=o$.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{pr(o,r)}),e.permission){let o=yle(e);o&&pr(o,r),i$.forEach(c=>{e.permission[c]&&!Dd.isBoolean(e.permission[c])&&pr(ir.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(i$.indexOf(o)<0){if(o===fle.STRUCTURE_USER){let l=e.permission[o];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]||pr(ir.SCHEMA_NOT_FOUND(f),r)}continue}pr(ir.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){pr(ir.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){pr(ir.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{hle.includes(d)||pr(ir.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Md).forEach(d=>{Dd.isDefined(u[d])?Dd.isBoolean(u[d])||pr(ir.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):pr(ir.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){pr(ir.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){pr(ir.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][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=>{!Ele.includes(E)&&E!==Md.DELETE&&pr(ir.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Dd.isDefined(p.attribute_name)){pr(ir.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){pr(ir.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}a$.forEach(E=>{Dd.isDefined(p[E])?Dd.isBoolean(p[E])||pr(ir.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):pr(ir.ATTR_PERM_MISSING(E,h),r,o,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=`${o}.${l}`;pr(ir.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return Rle(r)}a(c$,"customValidate");l$.exports={addRoleValidation:_le,alterRoleValidation:gle,dropRoleValidation:Sle};function yle(e){let{operation:t,permission:r}=e;if(t===vd.OPERATIONS_ENUM.ADD_ROLE||t===vd.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 ir.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?vd.ROLE_TYPES_ENUM.SUPER_USER:vd.ROLE_TYPES_ENUM.CLUSTER_USER;return ir.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(yle,"validateNoSUPerms");function Rle(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:ir.ROLE_PERMS_ERROR,...e};return lle(new Error,n,dle.BAD_REQUEST)}else return null}a(Rle,"generateRolePermResponse");function pr(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]}}a(pr,"addPermError")});var sh=M((mUe,p$)=>{"use strict";var d$=$n(),f$=gn(),ble=Nl(),$N=u$(),VN=Wo(),fUe=require("uuid").v4,Ale=require("util"),xS=(H(),v(z)),Ile=oe(),KN=f$.searchByValue,wle=f$.searchByHash,Nle=Ale.promisify(ble.delete),Cle=mi(),Ole=cd(),{hdbErrors:Ple,handleHDBError:kl}=_e(),{HDB_ERROR_MSGS:m$,HTTP_STATUS_CODES:nh}=Ple,{UserEventMsg:YN}=cs();p$.exports={addRole:Lle,alterRole:Dle,dropRole:vle,listRoles:Mle};function qN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(qN,"scrubRoleDetails");async function Lle(e){let t=$N.addRoleValidation(e);if(t)throw t;e=qN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await KN(r)||[])}catch(i){throw kl(i)}if(n&&n.length>0)throw kl(new Error,m$.ROLE_ALREADY_EXISTS(e.role),nh.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 d$.insert(s),VN.signalUserChange(new YN(process.pid)),e=qN(e),e}a(Lle,"addRole");async function Dle(e){let t=$N.alterRoleValidation(e);if(t)throw t;e=qN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await d$.update(r)}catch(s){throw kl(s)}if(n&&n?.message==="updated 0 of 1 records")throw kl(new Error,"Invalid role id",nh.BAD_REQUEST,void 0,void 0,!0);return await VN.signalUserChange(new YN(process.pid)),e}a(Dle,"alterRole");async function vle(e){let t=$N.dropRoleValidation(e);if(t)throw kl(new Error,t,nh.BAD_REQUEST,void 0,void 0,!0);let r=new Ole(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await wle(r));if(n.length===0)throw kl(new Error,m$.ROLE_NOT_FOUND,nh.NOT_FOUND,void 0,void 0,!0);let s=new Cle(xS.SYSTEM_SCHEMA_NAME,xS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await KN(s)),o=!1;if(Ile.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw kl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,nh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Nle(c),VN.signalUserChange(new YN(process.pid)),`${n[0].role} successfully deleted`}a(vle,"dropRole");async function Mle(){return KN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(Mle,"listRoles")});var WN={};ye(WN,{start:()=>_$,startOnMainThread:()=>Ble});function _$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,h$.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 o in i.permission){if(Ule.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=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 xle(i)}}}async function xle(e){let t=ct().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,E$.isEqual)(i,e)?void 0:(e.id=r.id,(0,BS.alterRole)(e))}return(0,BS.addRole)(e)}var BS,h$,E$,Ule,Ble,g$=se(()=>{we();BS=b(sh()),h$=require("yaml"),E$=require("lodash"),Ule=["super_user","cluster_user","structure_user"];a(_$,"start");a(xle,"ensureRole");Ble=_$});async function FS(e){let t=(0,y$.pathToFileURL)(e).toString();if(Fle)return ih||(ih=kle(Gle)),(await(await ih).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function kle(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ih=new Compartment({console,Math,Date,fetch:Hle,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,T$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=lr,s.tables=Rn,s.databases=Me}};let n=await(0,S$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),ih}function Hle(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 Gle(){return{Resource:lr,tables:Rn}}var S$,T$,y$,Fle,ih,zN=se(()=>{Vo();we();S$=require("fs/promises"),T$=require("path"),y$=require("url"),Fle=!1;a(FS,"secureImport");a(kle,"getCompartment");a(Hle,"secureOnlyFetch");a(Gle,"getGlobalVars")});var jN={};ye(jN,{handleApplication:()=>qle,suppressHandleApplicationWarning:()=>$le});function R$(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function qle(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}FS(t.absolutePath).then(r=>{let n=(0,kS.dirname)(t.urlPath);R$(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),b$(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function b$(e,t,r){for(let n in t){let s=t[n],i=(0,kS.join)(r,n);R$(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&b$(e,s,i)}}var kS,$le,A$=se(()=>{zN();kS=require("path");a(R$,"isResource");a(qle,"handleApplication");a(b$,"recurseForResources");$le=!0});var JN={};ye(JN,{start:()=>Vle});function Vle({resources:e}){e.set("login",QN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var QN,I$=se(()=>{Vo();a(Vle,"start");QN=class extends lr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});function GS(e,t){let r={openapi:Kle,info:{title:"HarperDB HTTP REST interface",version:L$.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)HS[l.type]?o[l.name]=new ZN(HS[l.type],l.type):l.properties?(o[l.name]=new v$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new jle(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new P$(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let k=e.allTypes.get(i.path);u=k.sealed,l=k.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:k,name:j,elements:Y,relationship:ce,definition:de,nullable:te}of l){let ge=de??Y?.definition;ge&&s(ge),te===!1&&h.push(j),ce?k==="array"?m[j]={type:"array",items:{$ref:Vs+Y.type}}:m[j]={$ref:Vs+k}:ge?k==="array"?m[j]={type:"array",items:{$ref:Vs+ge.type}}:m[j]={$ref:Vs+ge.type}:k==="array"?Y.type==="Any"?m[j]={type:"array",items:{format:Y.type}}:m[j]={type:"array",items:new ZN(HS[Y.type],Y.type)}:k==="Any"?m[j]={format:k}:m[j]=new ZN(HS[k],k),p.push(new eC(j,"query",m[j]))}let E=Object.keys(m),g=new eC(f,"path",{type:"string",format:"ID"});g.required=!0,g.description="primary key of record";let R=new eC("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new P$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",N=typeof d.get=="function",I=typeof d.delete=="function",$=typeof d.patch=="function",ee=`/${o}/`;r.paths[ee]||(r.paths[ee]={}),S&&(r.paths[ee].post=new Yle(c,n,{200:new Ud({$ref:Vs+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[ee].options=new w$(p,n,{200:new N$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[ee].get=new XN(p,n,{200:new Ud({type:"array",items:{$ref:Vs+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[ee].delete=new O$(p,n,"delete all the records that match the provided query",{204:new C$}));let G="/"+o+"/{"+f+"}";if(r.paths[G]||(r.paths[G]={}),r.paths[G].options=new w$(p,n,{200:new N$},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[G].get=new XN([g],n,{200:new Ud({$ref:Vs+c})},"retrieve a record by its primary key")),y&&(r.paths[G].put=new Wle([g],n,c,{200:new Ud({$ref:Vs+c})},"create or update the record with the URL path that maps to the record's primary key")),$&&(r.paths[G].patch=new zle([g],n,c,{200:new Ud({$ref:Vs+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[G].delete=new O$([g],n,"delete a record with the given primary key",{204:new C$})),N&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new XN([g,R],n,{200:new Ud({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function Yle(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Vs+e}}}},this.security=t,this.responses=r}function XN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function w$(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function N$(){this.description=D$,this.headers={},this.content={}}function Ud(e,t){this.description=D$,this.content={"application/json":{schema:e}},this.headers=t}function C$(){this.description="successfully processed request, no content returned to client"}function Wle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function zle(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function O$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function P$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function ZN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function v$(e){this.$ref=`#/components/schemas/${e}`}function jle(e){this.type="array",this.items=new v$(e)}function eC(e,t,r){this.name=e,this.in=t,this.schema=r}var L$,Kle,HS,Vs,D$,tC=se(()=>{L$=b(yt()),Kle="3.0.3",HS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Vs="#/components/schemas/",D$="successful operation";a(GS,"generateJsonApi");a(Yle,"Post");a(XN,"Get");a(w$,"Options");a(N$,"ResponseOptions200");a(Ud,"Response200");a(C$,"Response204");a(Wle,"Put");a(zle,"Patch");a(O$,"Delete");a(P$,"ResourceSchema");a(ZN,"Type");a(v$,"Ref");a(jle,"ArrayRef");a(eC,"Parameter")});var U$={};ye(U$,{Request:()=>lc,createReuseportFd:()=>qS});var M$,lc,rC,nC,qS,oh=se(()=>{M$=require("os"),lc=class{static{a(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 nC(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 rC(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return 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)}},rC=class{static{a(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)}},nC=class{static{a(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,M$.platform)()!="win32"&&(qS=require("node-unix-socket").createReuseportFd)});var VS={};ye(VS,{parseHeaderValue:()=>iC,start:()=>Xle});async function Jle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&lg(e);let i=new Gs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==x$){let g=$S.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ui(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=iC(g);for(let S of R)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=iC(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.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 bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Bo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new xd.ClientError(g,400)}if(e.authorize=!0,o===x$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return GS($S,`${e.protocol}://${e.hostname}`);throw new xd.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 xd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new xd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,sC.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=DG(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=xm(f.data,e,f)),f}else if(isFinite(p)){Qle[0]=p;let g=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),sC.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=xm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?gi.warn(o):gi.info(o):gi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=xm(o.contentType?o:k$(o),e,c),c}}function Xle(e){sC=e,e.includeExpensiveRecordCountEstimates&&(lc.prototype.includeExpensiveRecordCountEstimates=!0),!B$&&(B$=!0,$S=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Jle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{ah++;let s=new rs;F$||(F$=!0,Qm(l=>{ah>0&&l.push({metric:"ws-connections",connections:ah,byThread:!0})}));let i;t.on("error",l=>{i=!0,gi.warn(l)});let o;t.on("message",a(function(u){o||(o=Bo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);Ve(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{ah--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=$S.getMatch(l,"ws");if(tn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ve(h=>({count:h.count,total:ah}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ui(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await xo(p.value,r);t.send(h),Ve(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?gi.warn(l):gi.info(l):gi.error(l),t.close(Zle[l.statusCode]||1011,k$(l))}t.close()},e))}function iC(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var gi,xd,k$,sn,Qle,sC,x$,B$,$S,F$,ah,Zle,H$=se(()=>{Fo();ss();gi=b(J()),xd=b(_e());ug();Uu();Ha();kp();tC();oh();fg();({errorToString:k$}=gi),sn=new Uint8Array(8),Qle=new Float64Array(sn.buffer,0,1),sC={},x$="openapi";a(Jle,"http");ah=0;a(Xle,"start");Zle={401:3e3,403:3003};a(iC,"parseHeaderValue")});var oC=M((kUe,q$)=>{var{recordAction:KS,recordActionBinary:G$}=(ss(),v(tg)),eue=require("fastify-plugin"),tue=200;q$.exports=eue(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=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),KS(o,"duration",u,f,d),G$(s.raw.statusCode<400,"success",u,f,d),G$(1,"response_"+s.raw.statusCode,u,f,d);let m=tue;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{KS(performance.now()-c,"transfer",u,f,d),KS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,KS(m,"bytes-sent",u,f,d));let p=o.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 V$=M((HUe,$$)=>{var rue=mt(),nue={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};$$.exports=function(e){return rue.validateObject(e,nue)}});var YS=M((GUe,K$)=>{"use strict";var sue=(H(),v(z)).OPERATIONS_ENUM,aC=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=sue.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};K$.exports=aC});var uh={};ye(uh,{createTokens:()=>uC,getJWTRSAKeys:()=>JS,refreshOperationToken:()=>dC,validateOperationToken:()=>fC,validateRefreshToken:()=>XS});async function JS(){if(WS)return WS;try{let e=ch.default.join(lh.default.getHdbBasePath(),Bb),t=await zS.default.readFile(ch.default.join(e,Tm.JWT_PASSPHRASE_NAME),"utf8"),r=await zS.default.readFile(ch.default.join(e,Tm.JWT_PRIVATE_KEY_NAME),"utf8");return WS={publicKey:await zS.default.readFile(ch.default.join(e,Tm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},WS}catch(e){throw QS.default.error(e),new Si.ClientError(Fd.NO_ENCRYPTION_KEYS,Bd.INTERNAL_SERVER_ERROR)}}async function uC(e){let t=(0,cC.validateBySchema)(e,fo.default.object({username:fo.default.string().optional(),password:fo.default.string().optional(),role:fo.default.string().optional(),expires_in:fo.default.alternatives(fo.default.string(),fo.default.number()).optional()}));if(t)throw new Si.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,lC.findAndValidateUser)(e.username,e.password,f)}catch(f){throw QS.default.error(f),new Si.ClientError(Fd.INVALID_CREDENTIALS,Bd.UNAUTHORIZED)}if(!r)throw new Si.ClientError(Fd.INVALID_CREDENTIALS,Bd.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 o=await JS(),c=await kd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??Q$,algorithm:jS,subject:Hd.OPERATION}),l=await kd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:iue,algorithm:jS,subject:Hd.REFRESH}),u=ww(l,$r.SHA256);if((await(0,Y$.update)(new W$.default(gm,Du.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Si.ClientError(Fd.REFRESH_TOKEN_SAVE_FAILED,Bd.INTERNAL_SERVER_ERROR);return z$.default.signalUserChange(new j$.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function dC(e){let t=(0,cC.validateBySchema)(e,fo.default.object({refresh_token:fo.default.string().required()}).required());if(t)throw new Si.ClientError(t.message);let{refresh_token:r}=e;await XS(r);let n=await JS(),s=await kd.default.decode(r);return{operation_token:await kd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:Q$,algorithm:jS,subject:Hd.OPERATION})}}async function fC(e){return J$(e,Hd.OPERATION)}async function XS(e){return J$(e,Hd.REFRESH)}async function J$(e,t){try{let r=await JS(),n=await kd.default.verify(e,r.publicKey,{algorithms:jS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,lC.findAndValidateUser)(n.username,void 0,!1);if(t===Hd.REFRESH&&!Nw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw QS.default.warn(r),r?.name==="TokenExpiredError"?new Si.ClientError(Fd.TOKEN_EXPIRED,Bd.FORBIDDEN):new Si.ClientError(Fd.INVALID_TOKEN,Bd.UNAUTHORIZED)}}var kd,zS,ch,fo,cC,Si,QS,lC,Y$,W$,z$,j$,lh,Bd,Fd,Q$,iue,jS,Hd,WS,Gd=se(()=>{kd=b(require("jsonwebtoken")),zS=b(require("fs-extra")),ch=b(require("node:path")),fo=b(require("joi")),cC=b(mt());H();Si=b(_e()),QS=b(J());Ow();lC=b(hs()),Y$=b($n()),W$=b(YS()),z$=b(Wo()),j$=b(cs()),lh=b(me()),{HTTP_STATUS_CODES:Bd,AUTHENTICATION_ERROR_MSGS:Fd}=Si.hdbErrors;lh.default.initSync();Q$=lh.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",iue=lh.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",jS="RS256",Hd={OPERATION:"operation",REFRESH:"refresh"};a(JS,"getJWTRSAKeys");a(uC,"createTokens");a(dC,"refreshOperationToken");a(fC,"validateOperationToken");a(XS,"validateRefreshToken");a(J$,"validateToken")});var mC=M((YUe,eV)=>{"use strict";var oue=V$(),qd=require("passport"),aue=require("passport-local").Strategy,cue=require("passport-http").BasicStrategy,lue=require("util"),uue=hs(),Z$=lue.callbackify(uue.findAndValidateUser),KUe=Jr(),due=(H(),v(z)),X$=(Gd(),v(uh));qd.use(new aue(function(e,t,r){Z$(e,t,r)}));qd.use(new cue(function(e,t,r){Z$(e,t,r)}));qd.serializeUser(function(e,t){t(null,e)});qd.deserializeUser(function(e,t){t(null,e)});function fue(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":qd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===due.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?X$.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):X$.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:qd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(fue,"authorize");function mue(e,t){let r=oue(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 o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(mue,"checkPermissions");eV.exports={authorize:fue,checkPermissions:mue}});var SC=M((QUe,sV)=>{var rT=require("clone"),nT=mt(),pue=oe(),eT=(H(),v(z)),zUe=J(),pC=require("fs"),EC=require("joi"),{string:tT}=EC.types(),{hdbErrors:hue,handleHDBError:ZS}=_e(),{HDB_ERROR_MSGS:jUe,HTTP_STATUS_CODES:hC}=hue,{commonValidators:$d}=ji(),tV=" is required",Eue=["insert","update","upsert"],_C={database:{presence:!1,format:$d.schema_format,length:$d.schema_length},schema:{presence:!1,format:$d.schema_format,length:$d.schema_length},table:{presence:!0,format:$d.schema_format,length:$d.schema_length},action:{inclusion:{within:Eue,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},_ue={schema:tT.required(),table:tT.required(),action:tT.valid("insert","update","upsert")},{AWS_ACCESS_KEY:gue,AWS_SECRET:Sue,AWS_BUCKET:Tue,AWS_FILE_KEY:yue,REGION:Rue}=eT.S3_BUCKET_AUTH_KEYS,bue={s3:{presence:!0},[`s3.${gue}`]:{presence:!0,type:"String"},[`s3.${Sue}`]:{presence:!0,type:"String"},[`s3.${Tue}`]:{presence:!0,type:"String"},[`s3.${yue}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Rue}`]:{presence:!0,type:"String"}},rV=rT(_C);rV.data.presence={message:tV};var nV=rT(_C);nV.file_path.presence={message:tV};var Aue=Object.assign(rT(_C),bue),gC=rT(_ue);gC.csv_url=tT.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();gC.passthrough_headers=EC.object();function Iue(e){let t=nT.validateObject(e,rV);return sT(e,t)}a(Iue,"dataObject");function wue(e){let t=nT.validateBySchema(e,EC.object(gC));return sT(e,t)}a(wue,"urlObject");function Nue(e){let t=nT.validateObject(e,nV);return sT(e,t)}a(Nue,"fileObject");function Cue(e){let t=nT.validateObject(e,Aue);return sT(e,t)}a(Cue,"s3FileObject");function sT(e,t){if(!t){let r=pue.checkGlobalSchemaTable(e.schema,e.table);if(r)return ZS(new Error,r,hC.BAD_REQUEST);if(e.operation===eT.OPERATIONS_ENUM.CSV_FILE_LOAD)try{pC.accessSync(e.file_path,pC.constants.R_OK|pC.constants.F_OK)}catch(n){return n.code===eT.NODE_ERROR_CODES.ENOENT?ZS(n,`No such file or directory ${n.path}`,hC.BAD_REQUEST):n.code===eT.NODE_ERROR_CODES.EACCES?ZS(n,`Permission denied ${n.path}`,hC.BAD_REQUEST):ZS(n)}}return t}a(sT,"postValidateChecks");sV.exports={dataObject:Iue,urlObject:wue,fileObject:Nue,s3FileObject:Cue}});var TC=M((XUe,iV)=>{"use strict";var dh=J(),iT=(H(),v(z));async function Oue(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===iT.OPERATIONS_ENUM.INSERT||t.operation===iT.OPERATIONS_ENUM.UPDATE||t.operation===iT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===iT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(dh.info(i.message),i):i.http_resp_msg?(dh.error(`Error calling operation: ${e.name}`),dh.error(i.http_resp_msg),i):(dh.error(`Error calling operation: ${e.name}`),dh.error(i),i)}}a(Oue,"callOperationFunctionAsAwait");iV.exports={callOperationFunctionAsAwait:Oue}});var yC=M((exe,aV)=>{"use strict";var{S3:Pue,GetObjectCommand:Lue}=require("@aws-sdk/client-s3");aV.exports={getFileStreamFromS3:Due,getS3AuthObj:oV};async function Due(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await oV(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Lue(r))).Body}a(Due,"getFileStreamFromS3");function oV(e,t,r){return new Pue({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(oV,"getS3AuthObj")});var lV=M((rxe,cV)=>{"use strict";var RC=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},bC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};cV.exports={BulkLoadFileObject:RC,BulkLoadDataObject:bC}});var dV=M((sxe,uV)=>{"use strict";var AC=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};uV.exports=AC});var mV=M((oxe,fV)=>{"use strict";var IC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};fV.exports=IC});var NC=M((cxe,hV)=>{"use strict";var pV=dV(),vue=mV(),{HDB_ERROR_MSGS:Mue}=Jr(),wC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Mue.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 pV(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new vue(c,s[c]);i.push(l)});let o=`${r}_${n}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new pV(r,n,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};hV.exports=wC});var Hl=M((dxe,SV)=>{"use strict";var uxe=gn(),fh=J(),{validateBySchema:EV}=mt(),ra=require("joi"),Uue=ro(),oT=oe(),{handleHDBError:aT,hdbErrors:xue,ClientError:_V}=_e(),{HDB_ERROR_MSGS:cT,HTTP_STATUS_CODES:CC}=xue,gV=me();gV.initSync();var{getDatabases:OC}=(we(),v(ft)),Bue=require("fs-extra"),Fue=(H(),v(z));SV.exports={describeAll:kue,describeTable:lT,describeSchema:Hue};async function kue(e={}){try{let t=oT.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=OC(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await lT({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await lT({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){fh.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return fh.error("Got an error in describeAll"),fh.error(t),aT(new Error,cT.DESCRIBE_ALL_ERR)}}a(kue,"describeAll");async function lT(e,t){oT.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=EV(e,ra.object({database:ra.string(),table:ra.string().required(),exact_count:ra.boolean().strict(),include_computed:ra.boolean().strict()}));if(i)throw new _V(i.message);let c=OC()[r];if(!c)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),CC.NOT_FOUND);let l=c[n];if(!l)throw aT(new Error,cT.TABLE_NOT_FOUND(e.schema,e.table),CC.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&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,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(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 Bue.stat(l.primaryStore.env.path)).size}catch(p){fh.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")),gV.get(Fue.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Uue.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){fh.warn(`unable to stat table dbi due to ${p}`)}return m}a(lT,"descTable");async function Hue(e){oT.transformReq(e);let t=EV(e,ra.object({database:ra.string(),exact_count:ra.boolean().strict(),include_computed:ra.boolean().strict()}));if(t)throw new _V(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=OC()[n];if(!i)throw aT(new Error,cT.SCHEMA_NOT_FOUND(e.schema),CC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),oT.isEmpty(l)||l.describe){let u=await lT({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(Hue,"describeSchema")});var AV=M((mxe,bV)=>{"use strict";var Gue=Hl(),{hdbErrors:TV}=_e(),{getDatabases:yV}=(we(),v(ft));bV.exports={checkSchemaExists:RV,checkSchemaTableExists:que,schemaDescribe:Gue};async function RV(e){if(!yV()[e])return TV.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(RV,"checkSchemaExists");async function que(e,t){let r=await RV(e);if(r)return r;if(!yV()[e][t])return TV.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(que,"checkSchemaTableExists")});var uT=M((hxe,IV)=>{"use strict";var $ue=ds();IV.exports={writeTransaction:Vue};function Vue(e,t,r){return $ue.writeTransaction(e,t,r)}a(Vue,"writeTransaction")});var MC=M((Txe,BV)=>{"use strict";var{decode:Kue}=require("msgpackr"),{isMainThread:_xe,parentPort:gxe,threadId:Sxe}=require("worker_threads"),mT=hr(),Vd=Ct(),DC=(H(),v(z)),An=J(),LC=me(),Yue=(H(),v(z)),{onMessageByType:Wue}=st(),OV=ro(),{recordAction:wV,recordActionBinary:zue}=(ss(),v(tg)),{publishToStream:jue}=mT,{ConsumerEvents:NV}=require("nats"),Que=gn(),{promisify:Jue}=require("util"),{decodeBlobsWithWrites:Xue}=(ns(),v(F_)),PV=Jue(setTimeout),pT=1e4,hT,fT,Zue,ede,LV,mh=new Map,Kd=new Map;BV.exports={initialize:DV,ingestConsumer:vC,setSubscription:tde,setIgnoreOrigin:sde,getDatabaseSubscriptions:nde,updateConsumer:vV};async function DV(){Wue(DC.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await vV(n)}),LV=!0,An.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await mT.getNATSReferences();hT=e,fT=e.info.server_name,Zue=t,ede=r}a(DV,"initialize");async function vV(e){if(e.status==="start"){let{js:t,jsm:r}=await MV(e.node_domain_name);vC(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=mh.get(e.stream_name+e.node_domain_name);t&&(An.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),mh.set(e.stream_name+e.node_domain_name,"close")),Kd.get(e.node_domain_name)==="failed"&&Kd.set(e.node_domain_name,"close")}}a(vV,"updateConsumer");var ET=new Map;function tde(e,t,r){let n=ET.get(e);n||ET.set(e,n=new Map),n.set(t,r),LV||DV().then(rde)}a(tde,"setSubscription");async function rde(){let e=await Que.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+Vd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await MV(r),!n))break;let{schema:o,table:c}=i,l=OV.createNatsTableStreamName(o,c);vC(l,n,s,r)}}}a(rde,"accessConsumers");async function MV(e){let t,r,n=1;for(;!r;)try{t=await hT.jetstream({domain:e}),r=await hT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Kd.get(e)==="close")break;Kd.set(e,"failed"),n%10===1&&An.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<pT?n++*100:pT;await PV(i)}return{js:t,jsm:r}}a(MV,"connectToRemoteJS");function nde(){return ET}a(nde,"getDatabaseSubscriptions");var UV;function sde(e){UV=e}a(sde,"setIgnoreOrigin");var xV=100,CV=new Array(xV),dT=0;async function vC(e,t,r,n){let{connection:s}=await mT.getNATSReferences();hT=s,fT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,fT),An.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Kd.get(n)==="close")break;o%10===1&&An.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(An.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await mT.createConsumer(r,e,fT,new Date(Date.now()).toISOString()));let d=o++*100<pT?o++*100:pT;await PV(d)}let c=!1,l;for(;!c;){if(mh.get(e+n)==="close"||Kd.get(n)==="close"){mh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:LC.get(DC.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),mh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===NV.ConsumerDeleted&&(await l.close(),c=!0),d.type===NV.HeartbeatsMissed){let f=d.data;An.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(An.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 CV[dT],CV[dT]=ide(d).catch(f=>{An.error(f)}),++dT>=xV&&(dT=0)}catch(d){d.message==="consumer deleted"?(An.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):An.error("Error consuming clustering ingest, restarting consumer",d)}}}a(vC,"ingestConsumer");async function ide(e){let t;await Xue(()=>{t=Kue(e.data)}),wV(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),An.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=LC.get(DC.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Vd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Vd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Vd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!UV),zue(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Vd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;An.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),An.trace(`messageProcessor nats msg id: ${e.headers.get(Vd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:g,user:R,node_name:S}=m||{},y=ET.get(c)?.get(u);if(!y)throw new Error(`Missing table for replication message: ${u}`);if(o==="define_schema")t.type=o,t.onCommit=h,y.send(t);else if(d.length===1&&!l)y.send({type:PC(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map(($,ee)=>({type:PC(o),value:$,expiresAt:p,id:f?.[ee],table:u}));for(;l;)I.push({type:PC(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:g,onCommit:h,user:R,nodeName:S})}LC.get(Yue.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&jue(e.subject.split(".").slice(0,-1).join("."),OV.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&wV(N,"replication-latency",e.subject,o,"ingest")}catch(o){An.error(o)}e.ack()}a(ide,"messageProcessor");function PC(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(PC,"convertOperation")});var hr=M((Nxe,e1)=>{"use strict";var Wr=me();Wr.initSync();var ode=require("fs-extra"),ade=require("semver"),Eh=require("path"),{monotonicFactory:cde}=require("ulidx"),kV=cde(),lde=require("util"),HV=require("child_process"),ude=lde.promisify(HV.exec),dde=HV.spawn,on=Ct(),rt=(H(),v(z)),{packageJson:fde,PACKAGE_ROOT:mde}=yt(),_T=oe(),Ti=J(),gT=ro(),pde=uT(),ph=gt(),{broadcast:hde,onMessageByType:Ede,getWorkerIndex:_de}=st(),{isMainThread:GV}=require("worker_threads"),{Encoder:gde,decode:FC}=require("msgpackr"),qV=new gde,{isEmpty:Vl}=_T,$V=hs(),Rxe=48*36e11;GV&&Ede(rt.ITC_EVENT_TYPES.RESTART,()=>{In=void 0,$l=void 0});var{connect:Sde,StorageType:Tde,RetentionPolicy:yde,AckPolicy:kC,DeliverPolicy:HC,DiscardPolicy:Rde,NatsConnection:bxe,JetStreamManager:Axe,JetStreamClient:Ixe,StringCodec:wxe,JSONCodec:bde,createInbox:GC,headers:Ade,ErrorCode:FV}=require("nats"),{recordAction:Ide}=(ss(),v(tg)),{encodeBlobsAsBuffers:wde}=(ns(),v(F_)),VV=bde(),Nde="clustering",Cde=fde.engines[on.NATS_SERVER_NAME],Ode=Eh.join(mde,"dependencies"),BC=Eh.join(Ode,`${process.platform}-${process.arch}`,on.NATS_BINARY_NAME),UC,xC,hh,Gl,ql;e1.exports={runCommand:KV,checkNATSServerInstalled:Pde,createConnection:qC,getConnection:_h,getJetStreamManager:gh,getJetStream:WV,getNATSReferences:mo,getServerList:Dde,createLocalStream:$C,listStreams:zV,deleteLocalStream:vde,getServerConfig:Yd,listRemoteStreams:Mde,viewStream:Ude,viewStreamIterator:xde,publishToStream:Bde,request:Hde,reloadNATS:VC,reloadNATSHub:Gde,reloadNATSLeaf:qde,extractServerName:kde,requestErrorHandler:$de,createLocalTableStream:XV,createTableStreams:Yde,purgeTableStream:ZV,purgeSchemaTableStreams:Wde,getStreamInfo:zde,updateLocalStreams:Qde,closeConnection:Lde,getJsmServerName:ST,addNatsMsgHeader:jV,clearClientCache:YV,updateRemoteConsumer:Vde,createConsumer:QV,updateConsumerIterator:Kde};async function KV(e,t=void 0){let{stdout:r,stderr:n}=await ude(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
21
21
|
`,""));return r.replace(`
|
|
22
|
-
`,"")}a(KV,"runCommand");async function Pde(){try{await ode.access(BC)}catch{return!1}let e=await KV(`${BC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ade.eq(t,Cde)}a(Pde,"checkNATSServerInstalled");async function qC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await $V.getClusterUser();if(Vl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ti.trace("create nats connection called");let i=await Sde({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Wr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Wr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Wr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ti.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ti.error("Error with Nats client connection, connection closed",o),i===In&&YV()}),i}a(qC,"createConnection");function YV(){In=void 0,Gl=void 0,ql=void 0,$l=void 0}a(YV,"clearClientCache");async function Lde(){In&&(await In.drain(),In=void 0,Gl=void 0,ql=void 0,$l=void 0)}a(Lde,"closeConnection");var In,$l;async function _h(){return $l||($l=qC(Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),In=await $l),In||$l}a(_h,"getConnection");async function gh(){if(Gl)return Gl;Vl(In)&&await _h();let{domain:e}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Vl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Gl=await In.jetstreamManager({domain:e,timeout:6e4}),Gl}a(gh,"getJetStreamManager");async function WV(){if(ql)return ql;Vl(In)&&await _h();let{domain:e}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Vl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ql=In.jetstream({domain:e,timeout:6e4}),ql}a(WV,"getJetStream");async function mo(){let e=In||await _h(),t=Gl||await gh(),r=ql||await WV();return{connection:e,jsm:t,js:r}}a(mo,"getNATSReferences");async function Dde(e){let t=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await $V.getClusterUser(),s=await qC(t,r,n),i=GC(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=VV.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 _T.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(Dde,"getServerList");async function $C(e,t){let{jsm:r}=await mo(),n=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Tde.File,retention:yde.Limits,subjects:t,discard:Rde.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a($C,"createLocalStream");async function zV(){let{jsm:e}=await mo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(zV,"listStreams");async function vde(e){let{jsm:t}=await mo();await t.streams.delete(e)}a(vde,"deleteLocalStream");async function Mde(e){let{connection:t}=await mo(),r=[],n=GC(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(VV.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Mde,"listRemoteStreams");async function Ude(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=kV(),o={durable_name:i,ack_policy:kC.Explicit};t&&(o.deliver_policy=HC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);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=FC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(on.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(Ude,"viewStream");async function*xde(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=kV(),o={durable_name:i,ack_policy:kC.Explicit};t&&(o.deliver_policy=HC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);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=FC(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(on.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(xde,"viewStreamIterator");async function Bde(e,t,r,n){Ti.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=jV(n,r);let{js:s}=await mo(),i=await ST(),o=`${e}.${i}`,c=await wde(()=>n instanceof Uint8Array?n:qV.encode(n));try{Ti.trace(`publishToStream publishing to subject: ${o}`),Ide(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return JV(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ti.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await $C(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Bde,"publishToStream");function jV(e,t){t===void 0&&(t=Ade());let r=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(jV,"addNatsMsgHeader");function Yd(e){e=e.toLowerCase();let t=Eh.join(Wr.get(rt.CONFIG_PARAMS.ROOTPATH),Nde);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Vl(xC)&&(xC={port:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Eh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),xC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Vl(UC)&&(UC={port:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:Eh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),UC;Ti.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Yd,"getServerConfig");async function QV(e,t,r,n){try{await e.consumers.add(t,{ack_policy:kC.Explicit,durable_name:r,deliver_policy:HC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(QV,"createConsumer");async function Fde(e,t,r){await e.consumers.delete(t,r)}a(Fde,"removeConsumer");function kde(e){return e.split(".")[1]}a(kde,"extractServerName");async function Hde(e,t,r=6e4,n=GC()){if(!_T.isObject(t))throw new Error("data param must be an object");let s=qV.encode(t),{connection:i}=await mo(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return FC(c.data)}a(Hde,"request");function VC(e){return new Promise(async(t,r)=>{let n=dde(BC,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(VC,"reloadNATS");async function Gde(){let{pid_file_path:e}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await VC(e)}a(Gde,"reloadNATSHub");async function qde(){let{pid_file_path:e}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await VC(e)}a(qde,"reloadNATSLeaf");function $de(e,t,r){let n;switch(e.code){case FV.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case FV.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a($de,"requestErrorHandler");async function Vde(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await mo(),{jsm:s}=await Xde(r),{schema:i,table:o}=e,c=gT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await JV(async()=>{if(e.subscribe===!0)await QV(s,c,n.info.server_name,l);else try{await Fde(s,c,n.info.server_name)}catch(u){Ti.trace(u)}})}a(Vde,"updateRemoteConsumer");async function Kde(e,t,r,n){let s=gT.createNatsTableStreamName(e,t),i=r+on.SERVER_SUFFIX.LEAF,o={type:rt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!GV&&_de()<Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=MC();await c(o)}await hde(o),n==="stop"&&await _T.asyncSetTimeout(1e3)}a(Kde,"updateConsumerIterator");function JV(e){return pde.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(JV,"exclusiveLock");async function XV(e,t){let r=gT.createNatsTableStreamName(e,t),n=await ST(),s=jde(e,t,n);await $C(r,[s])}a(XV,"createLocalTableStream");async function Yde(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await XV(n,s)}}a(Yde,"createTableStreams");async function ZV(e,t,r=void 0){if(Wr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=gT.createNatsTableStreamName(e,t),{domain:s}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await _h()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ti.warn(n);else throw n}}a(ZV,"purgeTableStream");async function Wde(e,t){if(Wr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await ZV(e,t[r])}a(Wde,"purgeSchemaTableStreams");async function zde(e){return(await gh()).streams.info(e)}a(zde,"getStreamInfo");function jde(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(jde,"createSubjectName");async function ST(){if(hh)return hh;if(hh=(await gh())?.nc?.info?.server_name,hh===void 0)throw new Error("Unable to get jetstream manager server name");return hh}a(ST,"getJsmServerName");async function Qde(){let e=await gh(),t=await ST(),r=await zV();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Jde(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ti.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Qde,"updateLocalStreams");function Jde(e){let{config:t}=e,r=!1,n=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Wr.get(rt.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}a(Jde,"updateStreamLimits");async function Xde(e){let t,r;try{t=await In.jetstream({domain:e}),r=await In.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ti.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Xde,"connectToRemoteJS")});function KC(e){let t=e.get(TT),r=t?(0,Wd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=nt(),s=!1;r.nodeName=nt();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Th(e)??1,nodes:[]})})}i[n]=0,e.putSync(TT,(0,Wd.pack)(r))}return r}function Sh(e){return KC(e).remoteNameToId}function r1(e,t){let r=KC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(TT,(0,Wd.pack)(r)),s}function yT(e,t){let r=KC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(TT,(0,Wd.pack)(r))}return t1.trace?.("The remote node name map",e,n,s),s}var t1,Wd,TT,YC=se(()=>{t1=b(Ir());Ss();Wd=require("msgpackr"),TT=Symbol.for("remote-ids");a(KC,"getIdMappingRecord");a(Sh,"exportIdMapping");a(r1,"remoteToLocalNodeId");a(yT,"getIdOfRemoteNode")});var c1={};ye(c1,{commitsAwaitingReplication:()=>jd,getHDBNodeTable:()=>Ht,getReplicationSharedStatus:()=>Qd,iterateRoutes:()=>Rh,shouldReplicateToNode:()=>yh,subscribeToNodeUpdates:()=>Jd});function Ht(){return n1||(n1=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 Qd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function Jd(e){Ht().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;a1.debug?.("adding node",n,"on node",nt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==nt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Ht().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function yh(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Ht().primaryStore.get(nt())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Zde(){Jd(e=>{uc({},(t,r)=>{let n=e.name,s=s1.get(n);if(s||s1.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=Qd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of jd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Rh(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=zd.default.get(F.REPLICATION_SECUREPORT)??(!zd.default.get(F.REPLICATION_PORT)&&zd.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||zd.default.get(F.REPLICATION_PORT)||zd.default.get(F.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){i1.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 i1,o1,zd,a1,n1,s1,jd,Xd=se(()=>{we();Ss();Pm();i1=require("worker_threads"),o1=b(_e()),zd=b(me());H();a1=b(Ir());server.nodes=[];a(Ht,"getHDBNodeTable");a(Qd,"getReplicationSharedStatus");a(Jd,"subscribeToNodeUpdates");a(yh,"shouldReplicateToNode");s1=new Map;wU((e,t,r)=>{if(r>server.nodes.length)throw new o1.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);jd||(jd=new Map,Zde());let n=jd.get(e);return n||(n=[],jd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Zde,"startSubscriptionToReplications");a(Rh,"iterateRoutes")});var h1={};ye(h1,{connectedToNode:()=>Kl,disconnectedFromNode:()=>ef,ensureNode:()=>na,requestClusterStatus:()=>p1,startOnMainThread:()=>WC});async function WC(e){let t=0,r=ct();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){RT.set(o,Th(u.auditStore));break}}}yi.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=nt();function l(){let u=Ht().primaryStore.get(c);if(u!==null){let d=e.url??dc();if(u===void 0||u.url!==d||u.shard!==e.shard)return na(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Ht().primaryStore.get(c)&&l();for(let u of Rh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),l1.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}Jd(s)});let n;function s(o,c=o?.name){let l=nt()&&c===nt()||dc()&&o?.url===dc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Ht().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of po){let h;for(let[E,{worker:g,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:N}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),N?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){po.get(m).iterator.remove(),po.delete(m);return}}return}if(l)return;if(!o.url){ot.info(`Node ${o.name} is missing url`);return}let u=po.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(ot.info(`Added node ${o.name} at ${o.url} for process ${nt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of Zd)if(o.url===p.url){Zd.delete(m);break}Zd.set(o.name,o)}let d=ct();if(u||(u=new Map,po.set(o.url,u)),u.iterator=uc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,g=[{replicateByDefault:p,...o}];RT.has(m)&&bh.default.get(F.REPLICATION_FAILOVER)&&(g.push({replicateByDefault:p,name:nt(),startTime:RT.get(m),endTime:Date.now(),replicates:!0}),RT.delete(m));let R=yh(o,m),S=yi.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=g,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:g,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=efe.HDB_LEADER_URL??process.env.HDB_LEADER_URL??l1[0]?.url??Array.from(Ht().primaryStore.getRange({}).filter(N=>N.name!==nt()))[0]?.url;g[0].isLeader=!y||g[0].url===y,setTimeout(()=>{let N={...g[0],type:"subscribe-to-node",database:m,nodes:g};E?E.postMessage(N):Ah(N)},tfe)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Ht().primaryStore.get(nt())?.replicates}),Ht().primaryStore.get(nt())?.replicates||(n=!1,ot.info("Disabling replication, this node name",nt(),Ht().primaryStore.get(nt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:g};E?E.postMessage(y):AT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),ef=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(Zd.keys()),l=c.sort(),u=l.indexOf(o.name||Ri(o.url));if(u===-1){ot.warn("Disconnected node not found in node map",o.name,c);return}let d=po.get(o.url),f=d?.get(o.database);if(!f){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!bh.default.get(F.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],g=Zd.get(E);d=po.get(g.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let N of f.nodes){if(S.some(I=>I.name===N.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}N.endTime<Date.now()||(S.push(N),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(N,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Kl=a(function(o){let c=po.get(o.url),l=c?.get(o.database);if(!l){ot.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!bh.default.get(F.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of po.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let g of h)i(g,o.database);else{let g=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});g.length<h.length&&(m.nodes=g)}}},"connectedToNode");function i(o,c,l=o){let u=yi.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):Ah({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,yi.onMessageByType)("disconnected-from-node",ef),(0,yi.onMessageByType)("connected-to-node",Kl),(0,yi.onMessageByType)("request-cluster-status",p1)}function p1(e,t){let r=[];for(let[n,s]of Zd)try{let i=po.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=d1(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function na(e,t){let r=Ht();e=e??Ri(t.url),t.name=e;try{if(t.ca){let s=new f1.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){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!bh.default.get(F.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=d1(n[s]);for(let c of t[s]){let l=!1;for(let u of o)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=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var yi,bT,ot,u1,bh,f1,m1,d1,efe,tfe,po,ef,Kl,Zd,RT,l1,Ih=se(()=>{we();yi=b(st());Ss();bT=require("worker_threads");Xd();ot=b(J()),u1=b(require("lodash")),bh=b(me());H();f1=require("crypto"),m1=b(require("minimist")),{cloneDeep:d1}=u1.default,efe=(0,m1.default)(process.argv),tfe=200,po=new Map,Zd=new Map,RT=new Map,l1=[];a(WC,"startOnMainThread");a(p1,"requestClusterStatus");bT.parentPort&&(ef=a(e=>{bT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Kl=a(e=>{bT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,yi.onMessageByType)("subscribe-to-node",e=>{Ah(e)}),(0,yi.onMessageByType)("unsubscribe-from-node",e=>{AT(e)}));a(na,"ensureNode")});var ys=M(Gt=>{"use strict";var Er=require("path"),{watch:rfe}=require("chokidar"),zn=require("fs-extra"),tf=require("node-forge"),y1=require("net"),{generateKeyPair:zC,X509Certificate:sa,createPrivateKey:R1,randomBytes:nfe}=require("node:crypto"),sfe=require("util");zC=sfe.promisify(zC);var Lt=tf.pki,bi=require("joi"),{v4:b1}=require("uuid"),{validateBySchema:XC}=mt(),{forComponent:ife}=J(),Ts=me(),Ks=(H(),v(z)),{CONFIG_PARAMS:Wl}=Ks,Ai=qw(),{ClientError:fc}=_e(),wT=require("node:tls"),{relative:A1,join:ofe}=require("node:path"),{CERTIFICATE_VALUES:E1}=Ai,afe=Qc(),jC=gt(),{table:cfe,getDatabases:lfe,databases:IT}=(we(),v(ft)),{getJWTRSAKeys:_1}=(Gd(),v(uh)),Je=ife("tls").conditional;Gt.generateKeys=tO;Gt.updateConfigCert=D1;Gt.createCsr=Efe;Gt.signCertificate=_fe;Gt.setCertTable=rf;Gt.loadCertificates=O1;Gt.reviewSelfSignedCert=nO;Gt.createTLSSelector=M1;Gt.listCertificates=x1;Gt.addCertificate=bfe;Gt.removeCertificate=Ife;Gt.createNatsCerts=Tfe;Gt.generateCertsKeys=Sfe;Gt.getReplicationCert=Nh;Gt.getReplicationCertAuth=hfe;Gt.renewSelfSigned=yfe;Gt.hostnamesFromCert=iO;Gt.getKey=wfe;Gt.getHostnamesFromCertificate=Nfe;Gt.getPrimaryHostName=sO;Gt.generateSerialNumber=OT;var{urlToNodeName:I1,getThisNodeUrl:ufe,getThisNodeName:CT,clearThisNodeName:dfe}=(Ss(),v(ia)),{readFileSync:ffe,statSync:w1}=require("node:fs"),qxe=me(),{getTicketKeys:mfe,onMessageFromWorkers:pfe}=st(),{isMainThread:N1}=require("worker_threads"),{TLSSocket:C1,createSecureContext:$xe}=require("node:tls"),ZC=3650,wh=["127.0.0.1","localhost","::1"],eO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function OT(){let e=nfe(8);return e[0]=e[0]&127|1,e.toString("hex")}a(OT,"generateSerialNumber");pfe(async e=>{e.type===Ks.ITC_EVENT_TYPES.RESTART&&(Ts.initSync(!0),await nO())});var an;function pc(){return an||(an=lfe().system.hdb_certificate,an||(an=cfe({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__"}]}))),an}a(pc,"getCertTable");async function Nh(){let e=M1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(CT());if(!r)return;let n=new sa(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(Nh,"getReplicationCert");async function hfe(){pc();let e=(await Nh()).options.cert,r=new sa(e).issuer.match(/CN=(.*)/)?.[1];return an.get(r)}a(hfe,"getReplicationCertAuth");var g1,mc=new Map;function O1(){if(g1)return;g1=!0;let e=[{configKey:Wl.TLS},{configKey:Wl.OPERATIONSAPI_TLS}];pc();let t=Er.dirname(jC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=jC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&A1(ofe(t,"keys"),o);c&&S1(o,l=>{mc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&N1){let d;S1(u,f=>{if(E1.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=v1(u),h=new sa(p),E;try{E=sO(h)}catch(y){Je.error?.("error extracting host name from certificate",y);return}if(E==null){Je.error?.("No host name found on certificate");return}if(h.checkIssued(new sa(E1.cert)))return;let g=an.primaryStore.get(E),R=w1(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=S){R<S&&Je.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=an.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,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}a(O1,"loadCertificates");function S1(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&N1&&Je.warn?.(`Reloading ${r}:`,i),n=c,t(v1(i)))}catch(c){Je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");zn.existsSync(e)?s(e,w1(e)):Je.error?.(`${r} file not found:`,e),rfe(e,{persistent:!1}).on("change",s)}a(S1,"loadAndWatch");function QC(){let e=ufe();if(e==null){let t=wh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return I1(e)}a(QC,"getHost");function NT(){let e=CT();if(e==null){let t=wh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(NT,"getCommonName");async function Efe(){let e=await Nh(),t=Lt.certificateFromPem(e.options.cert),r=Lt.privateKeyFromPem(e.options.key);Je.info?.("Creating CSR with cert named:",e.name);let n=Lt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:NT()},...eO];Je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:P1()}];return Je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),tf.pki.certificationRequestToPem(n)}a(Efe,"createCsr");function P1(){let e=wh.includes(NT())?wh:[...wh,NT()];return e.includes(QC())||e.push(QC()),[{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=>y1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(P1,"certExtensions");async function _fe(e){let t={},r=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;pc();for await(let d of an.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(mc.has(d.private_key_name)){n=mc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await zn.exists(Er.join(r,d.private_key_name))){n=zn.readFile(Er.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await JC();s=d.ca,n=d.private_key}n=Lt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Lt.certificateFromPem(s.certificate);Je.info?.("Signing CSR with cert named",s.name);let o=Lt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=tf.pki.createCertificate();c.serialNumber=OT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+ZC),Je.info?.("sign cert setting validity:",c.validity),Je.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,tf.md.sha256.create()),t.certificate=Lt.certificateToPem(c)}else Je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(_fe,"signCertificate");async function gfe(e,t){await rf({name:CT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await rf({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Lt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(gfe,"createCertificateTable");async function rf(e){let t;try{t=new sa(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},pc(),await an.patch(e)}a(rf,"setCertTable");async function tO(){let e=await zC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Lt.publicKeyFromPem(e.publicKey),privateKey:Lt.privateKeyFromPem(e.privateKey)}}a(tO,"generateKeys");async function rO(e,t,r){let n=Lt.createCertificate();if(!t){let o=await Nh();t=Lt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+ZC);let i=[{name:"commonName",value:NT()},...eO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(P1()),n.sign(e,tf.md.sha256.create()),Lt.certificateToPem(n)}a(rO,"generateCertificates");async function JC(){let e=await x1(),t;for(let r of e){if(!r.is_authority)continue;let n=await U1(r.private_key_name);if(r.private_key_name&&n&&new sa(r.certificate).checkPrivateKey(R1(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")}a(JC,"getCertAuthority");async function L1(e,t,r=!0){let n=Lt.createCertificate();n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+ZC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ts.get(Wl.REPLICATION_HOSTNAME)??I1(Ts.get(Wl.REPLICATION_URL))??b1().split("-")[0]}`},...eO];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,tf.md.sha256.create());let o=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=Er.join(o,Ai.PRIVATEKEY_PEM_NAME);return r&&await zn.writeFile(c,Lt.privateKeyToPem(e)),n}a(L1,"generateCertAuthority");async function Sfe(){let{privateKey:e,publicKey:t}=await tO(),r=await L1(e,t),n=await rO(e,t,r);await gfe(n,r),D1()}a(Sfe,"generateCertsKeys");async function Tfe(){let e=await rO(Lt.privateKeyFromPem(Ai.CERTIFICATE_VALUES.key),void 0,Lt.certificateFromPem(Ai.CERTIFICATE_VALUES.cert)),t=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=Er.join(t,Ai.NATS_CERTIFICATE_PEM_NAME);await zn.exists(r)||await zn.writeFile(r,e);let n=Er.join(t,Ai.NATS_CA_PEM_NAME);await zn.exists(n)||await zn.writeFile(n,Ai.CERTIFICATE_VALUES.cert)}a(Tfe,"createNatsCerts");async function yfe(){pc();for await(let e of an.search([{attribute:"is_self_signed",value:!0}]))await an.delete(e.name);await nO()}a(yfe,"renewSelfSigned");async function nO(){dfe(),await O1(),pc();let e=await JC();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=a(u=>{try{return{key:Lt.privateKeyFromPem(zn.readFileSync(u)),keyPath:u}}catch(d){return Je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ts.get(Wl.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=Ts.get(Wl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=A1(o,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 tO(),zn.existsSync(Er.join(o,Ai.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${b1().split("-")[0]}.pem`),await zn.writeFile(Er.join(o,c),Lt.privateKeyToPem(s)));let l=await L1(s,Lt.setRsaPublicKey(s.n,s.e),!1);await rf({name:l.subject.getField("CN").value,uses:["https"],certificate:Lt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Nh()){let r=CT();Je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await JC();let n=Lt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await rO(Lt.privateKeyFromPem(e.private_key),s,n);await rf({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(nO,"reviewSelfSignedCert");function D1(){let e=afe(Object.keys(Ks.CONFIG_PARAM_MAP),!0),t=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=Er.join(t,Ai.PRIVATEKEY_PEM_NAME),n=Er.join(t,Ai.NATS_CERTIFICATE_PEM_NAME),s=Er.join(t,Ai.NATS_CA_PEM_NAME),i=Ks.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),jC.updateConfigValue(void 0,void 0,o,!1,!0)}a(D1,"updateConfigCert");function v1(e){return e.startsWith("-----BEGIN")?e:ffe(e,"utf8")}a(v1,"readPEM");var T1=wT.createSecureContext;wT.createSecureContext=function(e){if(!e.cert||!e.key)return T1(e);let t={...e};delete t.key,delete t.cert;let r=T1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Rfe=C1.prototype._init;C1.prototype._init=function(e,t){Rfe.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Yl=new Map;function M1(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Yl.clear();let d=0;if(IT===void 0){c();return}for await(let f of IT.system.hdb_certificate.search([])){let m=f.certificate,p=new sa(m);f.is_authority&&(p.asString=m,Yl.set(p.subject,m))}for await(let f of IT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await U1(f.private_key_name),E=f.certificate,g=new sa(E);if(Yl.has(g.issuer)&&(E+=`
|
|
22
|
+
`,"")}a(KV,"runCommand");async function Pde(){try{await ode.access(BC)}catch{return!1}let e=await KV(`${BC} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return ade.eq(t,Cde)}a(Pde,"checkNATSServerInstalled");async function qC(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await $V.getClusterUser();if(Vl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Ti.trace("create nats connection called");let i=await Sde({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Wr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Wr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Wr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Ti.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&Ti.error("Error with Nats client connection, connection closed",o),i===In&&YV()}),i}a(qC,"createConnection");function YV(){In=void 0,Gl=void 0,ql=void 0,$l=void 0}a(YV,"clearClientCache");async function Lde(){In&&(await In.drain(),In=void 0,Gl=void 0,ql=void 0,$l=void 0)}a(Lde,"closeConnection");var In,$l;async function _h(){return $l||($l=qC(Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),In=await $l),In||$l}a(_h,"getConnection");async function gh(){if(Gl)return Gl;Vl(In)&&await _h();let{domain:e}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Vl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Gl=await In.jetstreamManager({domain:e,timeout:6e4}),Gl}a(gh,"getJetStreamManager");async function WV(){if(ql)return ql;Vl(In)&&await _h();let{domain:e}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Vl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ql=In.jetstream({domain:e,timeout:6e4}),ql}a(WV,"getJetStream");async function mo(){let e=In||await _h(),t=Gl||await gh(),r=ql||await WV();return{connection:e,jsm:t,js:r}}a(mo,"getNATSReferences");async function Dde(e){let t=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await $V.getClusterUser(),s=await qC(t,r,n),i=GC(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=VV.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 _T.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(Dde,"getServerList");async function $C(e,t){let{jsm:r}=await mo(),n=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Tde.File,retention:yde.Limits,subjects:t,discard:Rde.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a($C,"createLocalStream");async function zV(){let{jsm:e}=await mo(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(zV,"listStreams");async function vde(e){let{jsm:t}=await mo();await t.streams.delete(e)}a(vde,"deleteLocalStream");async function Mde(e){let{connection:t}=await mo(),r=[],n=GC(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(VV.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Mde,"listRemoteStreams");async function Ude(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=kV(),o={durable_name:i,ack_policy:kC.Explicit};t&&(o.deliver_policy=HC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);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=FC(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(on.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(Ude,"viewStream");async function*xde(e,t=void 0,r=void 0){let{jsm:n,js:s}=await mo(),i=kV(),o={durable_name:i,ack_policy:kC.Explicit};t&&(o.deliver_policy=HC.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);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=FC(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(on.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(xde,"viewStreamIterator");async function Bde(e,t,r,n){Ti.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=jV(n,r);let{js:s}=await mo(),i=await ST(),o=`${e}.${i}`,c=await wde(()=>n instanceof Uint8Array?n:qV.encode(n));try{Ti.trace(`publishToStream publishing to subject: ${o}`),Ide(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return JV(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){Ti.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await $C(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(Bde,"publishToStream");function jV(e,t){t===void 0&&(t=Ade());let r=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(on.MSG_HEADERS.ORIGIN)&&r&&t.append(on.MSG_HEADERS.ORIGIN,r),t}a(jV,"addNatsMsgHeader");function Yd(e){e=e.toLowerCase();let t=Eh.join(Wr.get(rt.CONFIG_PARAMS.ROOTPATH),Nde);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Vl(xC)&&(xC={port:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.HUB,config_file:on.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Eh.join(t,on.PID_FILES.HUB),hdbNatsPath:t}),xC;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Vl(UC)&&(UC={port:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,config_file:on.NATS_CONFIG_FILES.LEAF_SERVER,domain:ph.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+on.SERVER_SUFFIX.LEAF,pid_file_path:Eh.join(t,on.PID_FILES.LEAF),hdbNatsPath:t}),UC;Ti.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Yd,"getServerConfig");async function QV(e,t,r,n){try{await e.consumers.add(t,{ack_policy:kC.Explicit,durable_name:r,deliver_policy:HC.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(QV,"createConsumer");async function Fde(e,t,r){await e.consumers.delete(t,r)}a(Fde,"removeConsumer");function kde(e){return e.split(".")[1]}a(kde,"extractServerName");async function Hde(e,t,r=6e4,n=GC()){if(!_T.isObject(t))throw new Error("data param must be an object");let s=qV.encode(t),{connection:i}=await mo(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return FC(c.data)}a(Hde,"request");function VC(e){return new Promise(async(t,r)=>{let n=dde(BC,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(VC,"reloadNATS");async function Gde(){let{pid_file_path:e}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await VC(e)}a(Gde,"reloadNATSHub");async function qde(){let{pid_file_path:e}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await VC(e)}a(qde,"reloadNATSLeaf");function $de(e,t,r){let n;switch(e.code){case FV.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case FV.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a($de,"requestErrorHandler");async function Vde(e,t){let r=t+on.SERVER_SUFFIX.LEAF,{connection:n}=await mo(),{jsm:s}=await Xde(r),{schema:i,table:o}=e,c=gT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await JV(async()=>{if(e.subscribe===!0)await QV(s,c,n.info.server_name,l);else try{await Fde(s,c,n.info.server_name)}catch(u){Ti.trace(u)}})}a(Vde,"updateRemoteConsumer");async function Kde(e,t,r,n){let s=gT.createNatsTableStreamName(e,t),i=r+on.SERVER_SUFFIX.LEAF,o={type:rt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!GV&&_de()<Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=MC();await c(o)}await hde(o),n==="stop"&&await _T.asyncSetTimeout(1e3)}a(Kde,"updateConsumerIterator");function JV(e){return pde.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(JV,"exclusiveLock");async function XV(e,t){let r=gT.createNatsTableStreamName(e,t),n=await ST(),s=jde(e,t,n);await $C(r,[s])}a(XV,"createLocalTableStream");async function Yde(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await XV(n,s)}}a(Yde,"createTableStreams");async function ZV(e,t,r=void 0){if(Wr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=gT.createNatsTableStreamName(e,t),{domain:s}=Yd(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await _h()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")Ti.warn(n);else throw n}}a(ZV,"purgeTableStream");async function Wde(e,t){if(Wr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await ZV(e,t[r])}a(Wde,"purgeSchemaTableStreams");async function zde(e){return(await gh()).streams.info(e)}a(zde,"getStreamInfo");function jde(e,t,r){return`${on.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(jde,"createSubjectName");async function ST(){if(hh)return hh;if(hh=(await gh())?.nc?.info?.server_name,hh===void 0)throw new Error("Unable to get jetstream manager server name");return hh}a(ST,"getJsmServerName");async function Qde(){let e=await gh(),t=await ST(),r=await zV();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Jde(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");Ti.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(Qde,"updateLocalStreams");function Jde(e){let{config:t}=e,r=!1,n=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Wr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Wr.get(rt.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}a(Jde,"updateStreamLimits");async function Xde(e){let t,r;try{t=await In.jetstream({domain:e}),r=await In.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw Ti.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Xde,"connectToRemoteJS")});function KC(e){let t=e.get(TT),r=t?(0,Wd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=nt(),s=!1;r.nodeName=nt();let i=r.remoteNameToId;if(i[n]!==0){let o=0,c;for(let l in i){let u=i[l];u===0?c=l:u>o&&(o=u)}if(c){o++,i[c]=o;let l=[Symbol.for("seq"),o];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Th(e)??1,nodes:[]})})}i[n]=0,e.putSync(TT,(0,Wd.pack)(r))}return r}function Sh(e){return KC(e).remoteNameToId}function r1(e,t){let r=KC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(TT,(0,Wd.pack)(r)),s}function yT(e,t){let r=KC(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let o in n){let c=n[o];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(TT,(0,Wd.pack)(r))}return t1.trace?.("The remote node name map",e,n,s),s}var t1,Wd,TT,YC=se(()=>{t1=b(Ir());Ss();Wd=require("msgpackr"),TT=Symbol.for("remote-ids");a(KC,"getIdMappingRecord");a(Sh,"exportIdMapping");a(r1,"remoteToLocalNodeId");a(yT,"getIdOfRemoteNode")});var c1={};ye(c1,{commitsAwaitingReplication:()=>jd,getHDBNodeTable:()=>Ht,getReplicationSharedStatus:()=>Qd,iterateRoutes:()=>Rh,shouldReplicateToNode:()=>yh,subscribeToNodeUpdates:()=>Jd});function Ht(){return n1||(n1=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 Qd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function Jd(e){Ht().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;a1.debug?.("adding node",n,"on node",nt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==nt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Ht().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function yh(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Ht().primaryStore.get(nt())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Zde(){Jd(e=>{uc({},(t,r)=>{let n=e.name,s=s1.get(n);if(s||s1.set(n,s=new Map),s.has(r))return;let i;for(let o in t)if(i=t[o].auditStore,i)break;if(i){let o=Qd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of jd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*Rh(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=zd.default.get(F.REPLICATION_SECUREPORT)??(!zd.default.get(F.REPLICATION_PORT)&&zd.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||zd.default.get(F.REPLICATION_PORT)||zd.default.get(F.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){i1.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 i1,o1,zd,a1,n1,s1,jd,Xd=se(()=>{we();Ss();Pm();i1=require("worker_threads"),o1=b(_e()),zd=b(me());H();a1=b(Ir());server.nodes=[];a(Ht,"getHDBNodeTable");a(Qd,"getReplicationSharedStatus");a(Jd,"subscribeToNodeUpdates");a(yh,"shouldReplicateToNode");s1=new Map;wU((e,t,r)=>{if(r>server.nodes.length)throw new o1.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);jd||(jd=new Map,Zde());let n=jd.get(e);return n||(n=[],jd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Zde,"startSubscriptionToReplications");a(Rh,"iterateRoutes")});var h1={};ye(h1,{connectedToNode:()=>Kl,disconnectedFromNode:()=>ef,ensureNode:()=>na,requestClusterStatus:()=>p1,startOnMainThread:()=>WC});async function WC(e){let t=0,r=ct();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){RT.set(o,Th(u.auditStore));break}}}yi.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=nt();function l(){let u=Ht().primaryStore.get(c);if(u!==null){let d=e.url??dc();if(u===void 0||u.url!==d||u.shard!==e.shard)return na(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Ht().primaryStore.get(c)&&l();for(let u of Rh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),l1.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}Jd(s)});let n;function s(o,c=o?.name){let l=nt()&&c===nt()||dc()&&o?.url===dc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Ht().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of po){let h;for(let[E,{worker:g,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:N}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),N?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){po.get(m).iterator.remove(),po.delete(m);return}}return}if(l)return;if(!o.url){ot.info(`Node ${o.name} is missing url`);return}let u=po.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(ot.info(`Added node ${o.name} at ${o.url} for process ${nt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of Zd)if(o.url===p.url){Zd.delete(m);break}Zd.set(o.name,o)}let d=ct();if(u||(u=new Map,po.set(o.url,u)),u.iterator=uc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,g=[{replicateByDefault:p,...o}];RT.has(m)&&bh.default.get(F.REPLICATION_FAILOVER)&&(g.push({replicateByDefault:p,name:nt(),startTime:RT.get(m),endTime:Date.now(),replicates:!0}),RT.delete(m));let R=yh(o,m),S=yi.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=g,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:g,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=efe.HDB_LEADER_URL??process.env.HDB_LEADER_URL??l1[0]?.url,N=y?new URL(y).hostname:Array.from(Ht().primaryStore.getKeys({}).filter(I=>I!==nt()))[0];ot.warn(`Setting up subscription with leader ${N} for node ${g[0].name}`),g[0].isLeader=!N||g[0].name===N,setTimeout(()=>{let I={...g[0],type:"subscribe-to-node",database:m,nodes:g};E?E.postMessage(I):Ah(I)},tfe)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Ht().primaryStore.get(nt())?.replicates}),Ht().primaryStore.get(nt())?.replicates||(n=!1,ot.info("Disabling replication, this node name",nt(),Ht().primaryStore.get(nt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:g};E?E.postMessage(y):AT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),ef=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(Zd.keys()),l=c.sort(),u=l.indexOf(o.name||Ri(o.url));if(u===-1){ot.warn("Disconnected node not found in node map",o.name,c);return}let d=po.get(o.url),f=d?.get(o.database);if(!f){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!bh.default.get(F.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],g=Zd.get(E);d=po.get(g.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let N of f.nodes){if(S.some(I=>I.name===N.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}N.endTime<Date.now()||(S.push(N),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(N,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Kl=a(function(o){let c=po.get(o.url),l=c?.get(o.database);if(!l){ot.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!bh.default.get(F.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of po.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let g of h)i(g,o.database);else{let g=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});g.length<h.length&&(m.nodes=g)}}},"connectedToNode");function i(o,c,l=o){let u=yi.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):Ah({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,yi.onMessageByType)("disconnected-from-node",ef),(0,yi.onMessageByType)("connected-to-node",Kl),(0,yi.onMessageByType)("request-cluster-status",p1)}function p1(e,t){let r=[];for(let[n,s]of Zd)try{let i=po.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=d1(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function na(e,t){let r=Ht();e=e??Ri(t.url),t.name=e;try{if(t.ca){let s=new f1.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){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!bh.default.get(F.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=d1(n[s]);for(let c of t[s]){let l=!1;for(let u of o)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=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var yi,bT,ot,u1,bh,f1,m1,d1,efe,tfe,po,ef,Kl,Zd,RT,l1,Ih=se(()=>{we();yi=b(st());Ss();bT=require("worker_threads");Xd();ot=b(J()),u1=b(require("lodash")),bh=b(me());H();f1=require("crypto"),m1=b(require("minimist")),{cloneDeep:d1}=u1.default,efe=(0,m1.default)(process.argv),tfe=200,po=new Map,Zd=new Map,RT=new Map,l1=[];a(WC,"startOnMainThread");a(p1,"requestClusterStatus");bT.parentPort&&(ef=a(e=>{bT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Kl=a(e=>{bT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,yi.onMessageByType)("subscribe-to-node",e=>{Ah(e)}),(0,yi.onMessageByType)("unsubscribe-from-node",e=>{AT(e)}));a(na,"ensureNode")});var ys=M(Gt=>{"use strict";var Er=require("path"),{watch:rfe}=require("chokidar"),zn=require("fs-extra"),tf=require("node-forge"),y1=require("net"),{generateKeyPair:zC,X509Certificate:sa,createPrivateKey:R1,randomBytes:nfe}=require("node:crypto"),sfe=require("util");zC=sfe.promisify(zC);var Lt=tf.pki,bi=require("joi"),{v4:b1}=require("uuid"),{validateBySchema:XC}=mt(),{forComponent:ife}=J(),Ts=me(),Ks=(H(),v(z)),{CONFIG_PARAMS:Wl}=Ks,Ai=qw(),{ClientError:fc}=_e(),wT=require("node:tls"),{relative:A1,join:ofe}=require("node:path"),{CERTIFICATE_VALUES:E1}=Ai,afe=Qc(),jC=gt(),{table:cfe,getDatabases:lfe,databases:IT}=(we(),v(ft)),{getJWTRSAKeys:_1}=(Gd(),v(uh)),Je=ife("tls").conditional;Gt.generateKeys=tO;Gt.updateConfigCert=D1;Gt.createCsr=Efe;Gt.signCertificate=_fe;Gt.setCertTable=rf;Gt.loadCertificates=O1;Gt.reviewSelfSignedCert=nO;Gt.createTLSSelector=M1;Gt.listCertificates=x1;Gt.addCertificate=bfe;Gt.removeCertificate=Ife;Gt.createNatsCerts=Tfe;Gt.generateCertsKeys=Sfe;Gt.getReplicationCert=Nh;Gt.getReplicationCertAuth=hfe;Gt.renewSelfSigned=yfe;Gt.hostnamesFromCert=iO;Gt.getKey=wfe;Gt.getHostnamesFromCertificate=Nfe;Gt.getPrimaryHostName=sO;Gt.generateSerialNumber=OT;var{urlToNodeName:I1,getThisNodeUrl:ufe,getThisNodeName:CT,clearThisNodeName:dfe}=(Ss(),v(ia)),{readFileSync:ffe,statSync:w1}=require("node:fs"),qxe=me(),{getTicketKeys:mfe,onMessageFromWorkers:pfe}=st(),{isMainThread:N1}=require("worker_threads"),{TLSSocket:C1,createSecureContext:$xe}=require("node:tls"),ZC=3650,wh=["127.0.0.1","localhost","::1"],eO=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function OT(){let e=nfe(8);return e[0]=e[0]&127|1,e.toString("hex")}a(OT,"generateSerialNumber");pfe(async e=>{e.type===Ks.ITC_EVENT_TYPES.RESTART&&(Ts.initSync(!0),await nO())});var an;function pc(){return an||(an=lfe().system.hdb_certificate,an||(an=cfe({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__"}]}))),an}a(pc,"getCertTable");async function Nh(){let e=M1("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(CT());if(!r)return;let n=new sa(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(Nh,"getReplicationCert");async function hfe(){pc();let e=(await Nh()).options.cert,r=new sa(e).issuer.match(/CN=(.*)/)?.[1];return an.get(r)}a(hfe,"getReplicationCertAuth");var g1,mc=new Map;function O1(){if(g1)return;g1=!0;let e=[{configKey:Wl.TLS},{configKey:Wl.OPERATIONSAPI_TLS}];pc();let t=Er.dirname(jC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=jC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&A1(ofe(t,"keys"),o);c&&S1(o,l=>{mc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&N1){let d;S1(u,f=>{if(E1.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=v1(u),h=new sa(p),E;try{E=sO(h)}catch(y){Je.error?.("error extracting host name from certificate",y);return}if(E==null){Je.error?.("No host name found on certificate");return}if(h.checkIssued(new sa(E1.cert)))return;let g=an.primaryStore.get(E),R=w1(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=S){R<S&&Je.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=an.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,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}a(O1,"loadCertificates");function S1(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&N1&&Je.warn?.(`Reloading ${r}:`,i),n=c,t(v1(i)))}catch(c){Je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");zn.existsSync(e)?s(e,w1(e)):Je.error?.(`${r} file not found:`,e),rfe(e,{persistent:!1}).on("change",s)}a(S1,"loadAndWatch");function QC(){let e=ufe();if(e==null){let t=wh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return I1(e)}a(QC,"getHost");function NT(){let e=CT();if(e==null){let t=wh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(NT,"getCommonName");async function Efe(){let e=await Nh(),t=Lt.certificateFromPem(e.options.cert),r=Lt.privateKeyFromPem(e.options.key);Je.info?.("Creating CSR with cert named:",e.name);let n=Lt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:NT()},...eO];Je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:P1()}];return Je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),tf.pki.certificationRequestToPem(n)}a(Efe,"createCsr");function P1(){let e=wh.includes(NT())?wh:[...wh,NT()];return e.includes(QC())||e.push(QC()),[{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=>y1.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(P1,"certExtensions");async function _fe(e){let t={},r=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;pc();for await(let d of an.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(mc.has(d.private_key_name)){n=mc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await zn.exists(Er.join(r,d.private_key_name))){n=zn.readFile(Er.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await JC();s=d.ca,n=d.private_key}n=Lt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Lt.certificateFromPem(s.certificate);Je.info?.("Signing CSR with cert named",s.name);let o=Lt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=tf.pki.createCertificate();c.serialNumber=OT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+ZC),Je.info?.("sign cert setting validity:",c.validity),Je.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,tf.md.sha256.create()),t.certificate=Lt.certificateToPem(c)}else Je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(_fe,"signCertificate");async function gfe(e,t){await rf({name:CT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await rf({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Lt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(gfe,"createCertificateTable");async function rf(e){let t;try{t=new sa(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},pc(),await an.patch(e)}a(rf,"setCertTable");async function tO(){let e=await zC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Lt.publicKeyFromPem(e.publicKey),privateKey:Lt.privateKeyFromPem(e.privateKey)}}a(tO,"generateKeys");async function rO(e,t,r){let n=Lt.createCertificate();if(!t){let o=await Nh();t=Lt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+ZC);let i=[{name:"commonName",value:NT()},...eO];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(P1()),n.sign(e,tf.md.sha256.create()),Lt.certificateToPem(n)}a(rO,"generateCertificates");async function JC(){let e=await x1(),t;for(let r of e){if(!r.is_authority)continue;let n=await U1(r.private_key_name);if(r.private_key_name&&n&&new sa(r.certificate).checkPrivateKey(R1(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")}a(JC,"getCertAuthority");async function L1(e,t,r=!0){let n=Lt.createCertificate();n.publicKey=t,n.serialNumber=OT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+ZC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ts.get(Wl.REPLICATION_HOSTNAME)??I1(Ts.get(Wl.REPLICATION_URL))??b1().split("-")[0]}`},...eO];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,tf.md.sha256.create());let o=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=Er.join(o,Ai.PRIVATEKEY_PEM_NAME);return r&&await zn.writeFile(c,Lt.privateKeyToPem(e)),n}a(L1,"generateCertAuthority");async function Sfe(){let{privateKey:e,publicKey:t}=await tO(),r=await L1(e,t),n=await rO(e,t,r);await gfe(n,r),D1()}a(Sfe,"generateCertsKeys");async function Tfe(){let e=await rO(Lt.privateKeyFromPem(Ai.CERTIFICATE_VALUES.key),void 0,Lt.certificateFromPem(Ai.CERTIFICATE_VALUES.cert)),t=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=Er.join(t,Ai.NATS_CERTIFICATE_PEM_NAME);await zn.exists(r)||await zn.writeFile(r,e);let n=Er.join(t,Ai.NATS_CA_PEM_NAME);await zn.exists(n)||await zn.writeFile(n,Ai.CERTIFICATE_VALUES.cert)}a(Tfe,"createNatsCerts");async function yfe(){pc();for await(let e of an.search([{attribute:"is_self_signed",value:!0}]))await an.delete(e.name);await nO()}a(yfe,"renewSelfSigned");async function nO(){dfe(),await O1(),pc();let e=await JC();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=a(u=>{try{return{key:Lt.privateKeyFromPem(zn.readFileSync(u)),keyPath:u}}catch(d){return Je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ts.get(Wl.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=Ts.get(Wl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=A1(o,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 tO(),zn.existsSync(Er.join(o,Ai.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${b1().split("-")[0]}.pem`),await zn.writeFile(Er.join(o,c),Lt.privateKeyToPem(s)));let l=await L1(s,Lt.setRsaPublicKey(s.n,s.e),!1);await rf({name:l.subject.getField("CN").value,uses:["https"],certificate:Lt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Nh()){let r=CT();Je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await JC();let n=Lt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await rO(Lt.privateKeyFromPem(e.private_key),s,n);await rf({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(nO,"reviewSelfSignedCert");function D1(){let e=afe(Object.keys(Ks.CONFIG_PARAM_MAP),!0),t=Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=Er.join(t,Ai.PRIVATEKEY_PEM_NAME),n=Er.join(t,Ai.NATS_CERTIFICATE_PEM_NAME),s=Er.join(t,Ai.NATS_CA_PEM_NAME),i=Ks.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),jC.updateConfigValue(void 0,void 0,o,!1,!0)}a(D1,"updateConfigCert");function v1(e){return e.startsWith("-----BEGIN")?e:ffe(e,"utf8")}a(v1,"readPEM");var T1=wT.createSecureContext;wT.createSecureContext=function(e){if(!e.cert||!e.key)return T1(e);let t={...e};delete t.key,delete t.cert;let r=T1(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Rfe=C1.prototype._init;C1.prototype._init=function(e,t){Rfe.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,o)=>{this.sni_context=o?.context||o,this.certCbDone()})}};var Yl=new Map;function M1(e,t){let r=new Map,n,s=!1;return i.initialize=o=>i.ready?i.ready:(o&&(o.secureContexts=r,o.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Yl.clear();let d=0;if(IT===void 0){c();return}for await(let f of IT.system.hdb_certificate.search([])){let m=f.certificate,p=new sa(m);f.is_authority&&(p.asString=m,Yl.set(p.subject,m))}for await(let f of IT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await U1(f.private_key_name),E=f.certificate,g=new sa(E);if(Yl.has(g.issuer)&&(E+=`
|
|
23
23
|
`+Yl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:mfe(),availableCAs:Yl,ca:t&&Array.from(Yl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let S=f.hostnames??iO(g);Array.isArray(S)||(S=[S]);for(let I of S)I===QC()&&(p+=1);let y=wT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Yl),y.certStart=E.toString().slice(0,100);let N;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),y1.isIP(I)&&(N=!0);let $=r.get(I)?.quality??0;Je.trace?.("Assigning TLS for hostname",I,"if",p,">",$),p>$&&r.set(I,y)}else Je.error?.("No hostname found for certificate at",wT.certificate);Je.trace?.("Adding TLS",y.name,"for",o.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,o&&(o.defaultContext=y))}catch(m){Je.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),IT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Je.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Je.debug?.("Found certificate for",o,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}o?Je.debug?.("No certificate found to match",o,"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)}a(i,"SNICallback")}a(M1,"createTLSSelector");async function U1(e){let t=mc.get(e);return!t&&e?await zn.readFile(Er.join(Ts.get(Wl.ROOTPATH),Ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(U1,"getPrivateKeyByName");async function x1(){pc();let e=[];for await(let t of an.search([]))e.push(t);return e}a(x1,"listCertificates");async function bfe(e){let t=XC(e,bi.object({name:bi.string().required(),certificate:bi.string().required(),is_authority:bi.boolean().required(),private_key:bi.string(),hosts:bi.array(),uses:bi.array()}));if(t)throw new fc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new sa(n),c=!1,l=!1,u;for(let[p,h]of mc)!s&&!c&&o.checkPrivateKey(R1(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new fc("A suitable private key was not found for this certificate");let d;if(!r){try{d=sO(o)}catch(p){Je.error?.(p)}if(d==null)throw new fc("Error extracting certificate host name, please provide a name parameter")}let f=Afe(r??d);s&&!c&&!l&&(await zn.writeFile(Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),mc.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 rf(m),"Successfully added certificate: "+f}a(bfe,"addCertificate");function Afe(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Afe,"sanitizeName");async function Ife(e){let t=XC(e,bi.object({name:bi.string().required()}));if(t)throw new fc(t.message);let{name:r}=e;pc();let n=await an.get(r);if(!n)throw new fc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await an.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Je.info?.("Removing private key named",s),await zn.remove(Er.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,s)))}return await an.delete(r),"Successfully removed "+r}a(Ife,"removeCertificate");function sO(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||iO(e)[0]}a(sO,"getPrimaryHostName");function iO(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]:[]}a(iO,"hostnamesFromCert");async function wfe(e){if(e.bypass_auth!==!0)throw new fc("Unauthorized","401");let t=XC(e,bi.object({name:bi.string().required()}));if(t)throw new fc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await _1()).privateKey;if(r===".jwtPublic")return(await _1()).publicKey;if(mc.get(r))return mc.get(e.name);throw new fc("Key not found")}a(wfe,"getKey");function Nfe(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(Nfe,"getHostnamesFromCertificate")});var oK={};ye(oK,{BACK_PRESSURE_RATIO_POSITION:()=>nK,CONFIRMATION_STATUS_POSITION:()=>rK,LATENCY_POSITION:()=>MT,NodeReplicationConnection:()=>sf,OPERATION_REQUEST:()=>uO,RECEIVED_TIME_POSITION:()=>fO,RECEIVED_VERSION_POSITION:()=>dO,RECEIVING_STATUS_POSITION:()=>mO,RECEIVING_STATUS_RECEIVING:()=>iK,RECEIVING_STATUS_WAITING:()=>sK,SENDING_TIME_POSITION:()=>Oh,createWebSocket:()=>UT,databaseSubscriptions:()=>Ec,replicateOverWS:()=>Ph,tableUpdateListeners:()=>EO});async function UT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=nt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!cO){let l=(0,X1.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),cO=u.secureContexts}if(i=cO.get(s),i&&ue.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 o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,eK.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((nf?.caCount!==oa.size||nf?.derivedFromContext!==i)&&(nf=Z1.createSecureContext({...i.options,ca:[...oa,...i.options.availableCAs.values()]}),nf.caCount=oa.size,nf.derivedFromContext=i),c.secureContext=nf),new j1.WebSocket(e,"harperdb-replication-v1",c)}function Ph(e,t,r){let n=t.port||t.securePort,s=hO.pid%1e3+"-"+Q1.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ue.debug?.(s,"Initializing replication connection",r);let i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||Ec,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&ct()[u],g,R=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,N,I,$,ee,G,k,j=6e4,Y,ce=0,de=0,te=0,ge=z1.default.get(F.REPLICATION_BLOBTIMEOUT)??12e4,be=new Map,Ye=[],qe=0,Ar;if(t.url){let A=a(()=>{ee&&de===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(ee=performance.now(),e.ping(),de=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,Y1).unref(),A()}else er();e._socket?.setMaxListeners(200);function er(){clearTimeout($),de=e._socket?.bytesRead,te=e._socket?.bytesWritten,$=setTimeout(()=>{de===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},Y1*2).unref()}a(er,"resetPingTimer");let Qr=0,xr=0,wu=!1,Kc=3e4;function Ut(){if(pn?.length>0){let A=performance.now(),U=A-xr;Qr=(Qr*Kc+(wu?U:0))/(Kc+U),m&&(m[nK]=Qr),xr=A}}a(Ut,"updateBackPressureRatio"),setInterval(Ut,Kc).unref();function ii(){if(!(!g||!u))return m||(m=Qd(f,u,g)),m}a(ii,"getSharedStatus"),u&&Yc(u);let Ma,ZE,cm=[],e_=[],lm,ve=[],t_=[],Nb=[],Nu=150,Hi=25,Ds=0,um=0,dm=!1,Lo,Dn,pn,Br;e.on("message",Cu);async function Cu(A){if(r=await r,!r){ue.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}fm(A),e.off("message",Cu),e.on("message",fm)}a(Cu,"onWSMessageWhenAuthorized");function fm(A){ce=performance.now();try{let U=A.dataView=new nl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let W=(0,at.decode)(A),[Q,B,Ee]=W;switch(Q){case F1:{if(B){if(g){if(g!==B){ue.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${B}, disconnecting`),e.send((0,at.encode)([Ch])),Fr(1008,"Node name mismatch");return}}else if(g=B,t.connection?.tentativeNode){let le=t.connection.tentativeNode;le.name=g,t.connection.tentativeNode=null,na(g,le)}if(t.connection&&(t.connection.nodeName=g),ue.debug?.(s,"received node name:",g,"db:",u??W[2]),!u)try{Yc(u=W[2]),u==="system"&&(Ma=uc(t,(le,ae)=>{Ba(ae)&&K(ae)}),e.on("close",()=>{Ma?.remove()}))}catch(le){ue.warn?.(s,"Error setting database",le),e.send((0,at.encode)([Ch])),Fr(1008,le.message);return}mm()}break}case V1:{ue.debug?.(s,"Received table definitions for",B.map(le=>le.table));for(let le of B){let ae=W[2];le.database=ae;let xe;if(Ba(ae)){if(u==="system")Me[ae]?.[le.table]||(xe=D(le,Me[ae]?.[le.table]));else{if(ae!=="data"&&!Me[ae]){ue.warn?.("Database not found",ae);return}xe=D(le,Me[ae]?.[le.table])}f||(f=xe?.auditStore),E||(E=ct()?.[ae])}}break}case Ch:Fr();break;case uO:try{let le=r?.replicates||r?.subscribers||r?.name;ue.debug?.("Received operation request",B,"from",g),server.operation(B,{user:r},!le).then(ae=>{ue.debug?.("Requested request from finished",g,ae),Array.isArray(ae)&&(ae={results:ae}),ae.requestId=B.requestId,e.send((0,at.encode)([LT,ae]))},ae=>{ue.debug?.("Failed requested operation from",g,ae),e.send((0,at.encode)([LT,{requestId:B.requestId,error:oO(ae)}]))})}catch(le){e.send((0,at.encode)([LT,{requestId:B.requestId,error:oO(le)}]))}break;case LT:let{resolve:fe,reject:pe}=R.get(B.requestId);ue.debug?.("Received completed operation request",g,B),B.error?pe(new Error(B.error)):fe(B),R.delete(B.requestId);break;case aO:let re=W[3];if(!E){u?ue.error?.(s,"No database found for",u):ue.error?.(s,"Database name never received"),Fr();return}let ie=E[re];ie=D({table:re,database:u,attributes:B.attributes,schemaDefined:B.schemaDefined},ie),cm[Ee]={name:re,decoder:new at.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:B.typedStructs,structures:B.structures}),getEntry(le){return ie.primaryStore.getEntry(le)},rootStore:ie.primaryStore.rootStore};break;case k1:Br=f?r1(B,f):new Map,lm=W[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${lm}`);break;case H1:let Oe=Ee;Nb[Oe]=B;break;case $1:ii()[rK]=B,ue.trace?.(s,"received and broadcasting committed update",B),ii().buffer.notify();break;case q1:y=B,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case DT:{let le=W[1],{fileId:ae,size:xe,finished:Ce,error:Le}=le,De=be.get(ae);ue.debug?.("Received blob",ae,"has stream",!!De,"connectedToBlob",!!De?.connectedToBlob,"length",W[2].length,"finished",Ce),De||(De=new lO.PassThrough,De.expectedSize=xe,be.set(ae,De)),De.lastChunk=Date.now();let pt=W[2];Ve(pt.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Ce?(Le?(De.on("error",()=>{}),De.destroy(new Error("Blob error: "+Le+" for record "+(De.recordId??"unknown")+" from "+g))):De.end(pt),De.connectedToBlob&&be.delete(ae)):De.write(pt)}catch(wt){ue.error?.(`Error receiving blob for ${De.recordId} from ${g} and streaming to storage`,wt),be.delete(ae)}break}case G1:{let le=B,ae;try{let xe=W[3],Ce=e_[Ee]||(e_[Ee]=E[W[4]]);if(!Ce)return ue.warn?.("Unknown table id trying to handle record request",Ee);let Le=Ce.primaryStore.getBinaryFast(Symbol.for("structures")),De=Le?.length??0;if(De>0&&De!==um){um=De;let wt=(0,at.decode)(Le);e.send((0,at.encode)([aO,{typedStructs:wt.typed,structures:wt.named},Ee,Ce.tableName]))}let pt=Ce.primaryStore.getBinaryFast(xe);if(pt){let wt=Ce.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),xt=lt||{};xt.version=(0,tK.getLastVersion)(),lt&<[Ku]&Zr&&(wt=Buffer.from(wt),km(()=>Ce.primaryStore.decoder.decode(pt),n_=>Ua(n_,xe),Ce.primaryStore.rootStore)),ae=(0,at.encode)([PT,le,{value:wt,expiresAt:xt.expiresAt,version:xt.version,residencyId:xt.residencyId,nodeId:xt.nodeId,user:xt.user}])}else ae=(0,at.encode)([PT,le])}catch(xe){ae=(0,at.encode)([PT,le,{error:xe.message}])}e.send(ae);break}case PT:{let{resolve:le,reject:ae,tableId:xe,key:Ce}=R.get(W[1]),Le=W[2];if(Le?.error)ae(new Error(Le.error));else if(Le){let De;B_(()=>{let pt=cm[xe].decoder.decode(Le.value);Le.value=pt,Le.key=Ce,le(Le)||De&&setTimeout(()=>De.forEach(M_),6e4).unref()},f?.rootStore,pt=>{let wt=xa(pt,Ce);return De||(De=[]),De.push(wt),wt})}else le();R.delete(W[1]);break}case B1:{pn=B;let le,ae,xe=!1;if(h){if(u!==h.databaseName&&!h.then){ue.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",pn),!h){let Pe;h=new Promise(tr=>{ue.debug?.("Waiting for subscription to database "+u),Pe=tr}),h.ready=Pe,Ec.set(u,h)}if(r.name)ae=Ht().subscribe(r.name),ae.then(async Pe=>{le=Pe;for await(let tr of le){let ht=tr.value;if(!(ht?.replicates===!0||ht?.replicates?.receives||ht?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){xe=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},Pe=>{ue.error?.(s,"Error subscribing to HDB nodes",Pe)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,at.encode)([Ch])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Dn&&(ue.debug?.(s,"stopping previous subscription",u),Dn.emit("close")),pn.length===0)return;let Ce=pn[0],Le=a(Pe=>{if(Pe&&(Ce.replicateByDefault?!Ce.tables.includes(Pe.tableName):Ce.tables.includes(Pe.tableName)))return{table:Pe}},"tableToTableEntry"),De={txnTime:0},pt,wt,xt=1/0,n_,s_=a((Pe,tr)=>{if(Pe.type==="end_txn"){De.txnTime&&(o[i]!==66&&ue.error?.("Invalid encoding of message"),C(9),C(z_),O(n_=tr),IM()),i=c,De.txnTime=0;return}let ht=Pe.nodeId,kr=Pe.tableId,Nt=wt[kr];if(!Nt&&(Nt=wt[kr]=Le(h.tableById[kr]),!Nt))return ue.debug?.("Not subscribed to table",kr);let vs=Nt.table,Kt=vs.primaryStore,oi=Kt.encoder;(Pe.extendedType&ig||!oi.typedStructs)&&(oi._mergeStructures(oi.getStructures()),oi.typedStructs&&(oi.lastTypedStructuresLength=oi.typedStructs.length));let Lu=pt[ht];if(!(Lu&&Lu.startTime<tr&&(!Lu.endTime||Lu.endTime>tr)))return vT&&ue.trace?.(s,"skipping replication update",Pe.recordId,"to:",g,"from:",ht,"subscribed:",pt),wM();vT&&ue.trace?.(s,"sending replication update",Pe.recordId,"to:",g,"from:",ht,"subscribed:",pt);let Cb=Pe.version;De.txnTime!==Cb&&(De.txnTime&&(vT&&ue.trace?.(s,"new txn time, sending queued txn",De.txnTime),o[i]!==66&&ue.error?.("Invalid encoding of message"),IM()),De.txnTime=Cb,i=c,O(Cb));let Wc=Pe.residencyId,Ob=r_(Wc,vs),i_;if(Ob&&!Ob.includes(g)){let Gi=r_(Pe.previousResidencyId,vs);if(Gi&&!Gi.includes(g)&&(Pe.type==="put"||Pe.type==="patch")||vs.getResidencyById)return wM();let zc=Pe.recordId;ue.trace?.(s,"sending invalidation",zc,g,"from",ht);let pm=0;Wc&&(pm|=sl),Pe.previousResidencyId&&(pm|=il);let Db,o_=null;for(let NM in vs.indices){if(!o_){if(Db=Pe.getValue(Kt,!0),!Db)break;o_={}}o_[NM]=Db[NM]}i_=ol(Pe.version,kr,zc,null,ht,Pe.user,Pe.type==="put"||Pe.type==="patch"?"invalidate":Pe.type,oi.encode(o_),pm,Wc,Pe.previousResidencyId,Pe.expiresAt)}function wM(){return ue.trace?.(s,"skipping audit record",Pe.recordId),G||(G=setTimeout(()=>{G=null,(n_||0)+K1/2<xt&&(vT&&ue.trace?.(s,"sending skipped sequence update",xt),e.send((0,at.encode)([q1,xt])))},K1).unref()),new Promise(setImmediate)}a(wM,"skipAuditRecord");let Pb=oi.typedStructs,Lb=oi.structures;if((Pb?.length!=Nt.typed_length||Lb?.length!=Nt.structure_length)&&(Nt.typed_length=Pb?.length,Nt.structure_length=Lb.length,ue.debug?.(s,"send table struct",Nt.typed_length,Nt.structure_length),Nt.sentName||(Nt.sentName=!0),e.send((0,at.encode)([aO,{typedStructs:Pb,structures:Lb,attributes:vs.attributes,schemaDefined:vs.schemaDefined},kr,Nt.table.tableName]))),Wc&&!t_[Wc]&&(e.send((0,at.encode)([H1,Ob,Wc])),t_[Wc]=!0),i_)C(i_.length),P(i_);else{let Gi=Pe.encoded;Pe.extendedType&Zr&&km(()=>Pe.getValue(Kt),pm=>Ua(pm,Pe.recordId),Kt.rootStore);let zc=Gi[0]===66?8:0;C(Gi.length-zc),P(Gi,zc),ue.trace?.("wrote record",Pe.recordId,"length:",Gi.length)}if(e._socket.writableNeedDrain){let Gi=performance.now();return wu=!0,Ut(),new Promise(zc=>{ue.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",()=>{zc(),wu=!1,Ut()})})}else return qe>Hi?new Promise(Gi=>{Ar=Gi}):new Promise(setImmediate)},"sendAuditRecord"),IM=a(()=>{c-i>8?(e.send(o.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ve(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");Dn=new pO.EventEmitter,Dn.once("close",()=>{xe=!0,le?.end()});for(let{startTime:Pe}of pn)Pe<xt&&(xt=Pe);(ae||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,wt=h.tableById.map(Le),pt=[];for(let{name:tr,startTime:ht,endTime:kr}of pn){let Nt=yT(tr,f);ue.debug?.("subscription to",tr,"using local id",Nt,"starting",ht),pt[Nt]={startTime:ht,endTime:kr}}K(u),Ma||(Ma=Bl(tr=>{tr.databaseName===u&&K(u)}),ZE=jp(tr=>{tr===u&&(e.send((0,at.encode)([Ch])),Fr())}),e.on("close",()=>{Ma?.remove(),ZE?.remove()})),e.send((0,at.encode)([k1,Sh(h.auditStore),pn.map(({name:tr})=>tr)]));let Pe=!0;do{isFinite(xt)||(ue.warn?.("Invalid sequence id "+xt),Fr(1008,"Invalid sequence id"+xt));let tr;if(Pe&&!xe&&(Pe=!1,xt===0)){ue.info?.("Replicating all tables to",g);let ht=Date.now(),kr=xT(f);for(let Nt in E){if(!Le(Nt))continue;let vs=E[Nt];for(let Kt of vs.primaryStore.getRange({snapshot:!1,versions:!0})){if(xe)return;ue.trace?.(s,"Copying record from",u,Nt,Kt.key,Kt.localTime),ht=Math.max(Kt.localTime??1,ht),tr=!0,ii()[Oh]=1;let oi=ol(Kt.version,vs.tableId,Kt.key,null,kr,null,"put",km(()=>vs.primaryStore.encoder.encode(Kt.value),Lu=>Ua(Lu,Kt.key)),Kt.metadataFlags&-256,Kt.residencyId,null,Kt.expiresAt);await s_({recordId:Kt.key,tableId:vs.tableId,type:"put",getValue(){return Kt.value},encoded:oi,version:Kt.version,residencyId:Kt.residencyId,nodeId:kr,extendedType:Kt.metadataFlags},Kt.localTime)}}De.txnTime||(De.txnTime=ht,O(ht)),s_({type:"end_txn"},ht),ii()[Oh]=0,xt=ht}for(let{key:ht,value:kr}of f.getRange({start:xt||1,exclusiveStart:!0,snapshot:!1})){if(xe)return;let Nt=At(kr);ue.debug?.("sending audit record",ht,Nt.recordId),ii()[Oh]=ht,xt=ht,await s_(Nt,ht),Dn.startTime=ht,tr=!0}tr&&s_({type:"end_txn"},xt),ii()[Oh]=0,await A0(f)}while(!xe)}).catch(Pe=>{ue.error?.(s,"Error handling subscription to node",Pe),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let w=!0,L,q;do{ii();let W=U.readInt();if(W===9&&U.getUint8(U.position)==z_){U.position++,y=q=U.readFloat64(),m[dO]=y,m[fO]=Date.now(),m[mO]=sK,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),ue.trace?.("received remote sequence update",y,u);break}let Q=U.position,B=At(A,Q,Q+W),Ee=cm[B.tableId];Ee||ue.error?.(`No table found with an id of ${B.tableId}`);let fe;B.residencyId&&(fe=Nb[B.residencyId],ue.trace?.(s,"received residency list",fe,B.type,B.recordId));let pe=B.recordId;try{B_(()=>{L={table:Ee.name,id:B.recordId,type:B.type,nodeId:Br.get(B.nodeId),residencyList:fe,timestamp:B.version,value:B.getValue(Ee),user:B.user,beginTxn:w,expiresAt:B.expiresAt}},f?.rootStore,re=>xa(re,pe))}catch(re){throw re.message+=" record id: "+pe,re.message+=" typed structures for current decoder"+JSON.stringify(Ee.decoder.typedStructs),re.message+=" structures for current decoder"+JSON.stringify(Ee.decoder.structures),re}w=!1,ue.debug?.(s,"received replication message",B.type,"id",L.id,"version",new Date(B.version),"nodeId",L.nodeId),m[dO]=B.version,m[fO]=Date.now(),m[mO]=iK,h.send(L),U.position=Q+W}while(U.position<A.byteLength);Ds++,u!=="system"&&Ve(A.byteLength,"bytes-received",`${g}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ds>Nu&&!dm&&(dm=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let W=Date.now()-L.timestamp;u!=="system"&&Ve(W,"replication-latency",g+"."+u+"."+L.table,L.type,"ingest")}Ds--,dm&&(dm=!1,e.resume(),ue.debug?.(`Replication resuming ${g}`)),Ye.length>0&&await Promise.all(Ye),ue.trace?.("All blobs finished"),!N&&q&&(ue.trace?.(s,"queuing confirmation of a commit at",q),setTimeout(()=>{e.send((0,at.encode)([$1,N])),ue.trace?.(s,"sent confirmation of a commit at",N),N=null},Ofe)),N=q,ue.debug?.("last sequence committed",new Date(q),u)}})}catch(U){ue.error?.(s,"Error handling incoming replication message",U)}}a(fm,"onWSMessage"),e.on("ping",er),e.on("pong",()=>{if(t.connection){let A=performance.now()-ee;t.connection.latency=A,ii()&&(m[MT]=A),t.isSubscriptionConnection&&Kl({name:g,database:u,url:t.url,latency:A})}ee=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout($),clearInterval(k),Dn&&Dn.emit("close"),Lo&&Lo.end();for(let[w,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));ue.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,ue.debug?.(s,"closing",g,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(w){ue.error?.(s,"Error closing connection",w)}}a(Fr,"close");let Ou=new Set;async function Ua(A,U){let w=U_(A);if(Ou.has(w)){ue.debug?.("Blob already being sent",w);return}Ou.add(w);try{let L;qe++;for await(let q of A.stream())L&&(ue.debug?.("Sending blob chunk",w,"length",L.length),e.send((0,at.encode)([DT,{fileId:w,size:A.size},L]))),L=q,e._socket.writableNeedDrain&&(ue.debug?.("draining",w),await new Promise(W=>e._socket.once("drain",W)),ue.debug?.("drained",w)),Ve(q.length,"bytes-sent",`${g}.${u}`,"replication","blob");ue.debug?.("Sending final blob chunk",w,"length",L.length),e.send((0,at.encode)([DT,{fileId:w,size:A.size,finished:!0},L]))}catch(L){ue.warn?.("Error sending blob",L,"blob id",w,"for record",U),e.send((0,at.encode)([DT,{fileId:w,finished:!0,error:oO(L)},Buffer.alloc(0)]))}finally{Ou.delete(w),qe--,qe<Hi&&Ar?.()}}a(Ua,"sendBlobs");function xa(A,U){let w=U_(A),L=be.get(w);ue.debug?.("Received transaction with blob",w,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&be.delete(w):(L=new lO.PassThrough,be.set(w,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let q=L.blob??createBlob(L,A);L.blob=q;let W=Ho(()=>Fm(q).saving,h.auditStore?.rootStore);return W&&(W.blobId=w,Ye.push(W),W.finally(()=>{ue.debug?.(`Finished receiving blob stream ${w}`),Ye.splice(Ye.indexOf(W),1)})),q}a(xa,"receiveBlobs");function mm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",mm)),!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 A=new Map;f||(f=h?.auditStore);try{for(let L of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let q of L.value.nodes||[])q.lastTxnTime>(A.get(q.id)??0)&&A.set(q.id,q.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let w=t.connection?.nodeSubscriptions.map((L,q)=>{let W=[],{replicateByDefault:Q}=L;if(L.subscriptions){for(let pe of L.subscriptions)if(pe.subscribe&&(pe.schema||pe.database)===u){let re=pe.table;E?.[re]?.replicate!==!1&&W.push(re)}Q=!1}else for(let pe in E)(Q?E[pe].replicate===!1:E[pe].replicate)&&W.push(pe);let B=f&&yT(L.name,f),Ee=h?.dbisDB?.get([Symbol.for("seq"),B])??1,fe=Math.max(Ee?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(ue.debug?.("Starting time recorded in db",L.name,B,u,Ee?.seqId,"start time:",fe,new Date(fe)),U!==L){let pe=f&&yT(U.name,f),re=h?.dbisDB?.get([Symbol.for("seq"),pe])??1;for(let ie of re?.nodes||[])ie.name===L.name&&(fe=ie.seqId,ue.debug?.("Using sequence id from proxy node",U.name,fe))}return B===void 0?ue.warn("Starting subscription request from node",L,"but no node id found"):S.push(B),A.get(B)>fe&&(fe=A.get(B),ue.debug?.("Updating start time from more recent txn recorded",U.name,fe)),fe===1&&(L.isLeader?(ue.warn?.(`Requesting full copy of database ${u} from ${L.url}`),fe=0):fe=Date.now()-6e4),ue.trace?.(s,"defining subscription request",L.name,u,new Date(fe)),{name:L.name,replicateByDefault:Q,tables:W,startTime:fe,isLeader:L.isLeader,endTime:L.endTime}});if(w)if(ue.debug?.(s,"sending subscription request",w,h?.dbisDB?.path),clearTimeout(Y),w.length>0)e.send((0,at.encode)([B1,w]));else{let L=a(()=>{let q=performance.now();Y=setTimeout(()=>{ce<=q?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},j).unref()},"scheduleClose");L()}}a(mm,"sendSubscriptionRequestUpdate");function r_(A,U){if(!A)return;let w=ve[A];return w||(w=U.getResidencyRecord(A),ve[A]=w),w}a(r_,"getResidence");function Ba(A){return!(hc&&hc!="*"&&!hc[A]&&!hc.includes?.(A)&&!hc.some?.(U=>U.name===A))}a(Ba,"checkDatabaseAccess");function Yc(A){if(h=h||d.get(A),!Ba(A))throw new Error(`Access to database "${A}" is not permitted`);h||ue.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=ct()?.[A]);let U=nt();if(U===g)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return Pu(U,A),!0}a(Yc,"setDatabase");function Pu(A,U){let w=ct()?.[U],L=[];for(let q in w){let W=w[q];L.push({table:q,schemaDefined:W.schemaDefined,attributes:W.attributes.map(Q=>({name:Q.name,type:Q.type,isPrimaryKey:Q.isPrimaryKey}))})}ue.trace?.("Sending database info for node",A,"database name",U),e.send((0,at.encode)([F1,A,U,L]))}a(Pu,"sendNodeDBName");function K(A){let U=ct()?.[A],w=[];for(let L in U){if(pn&&!pn.some(W=>W.replicateByDefault?!W.tables.includes(L):W.tables.includes(L)))continue;let q=U[L];w.push({table:L,schemaDefined:q.schemaDefined,attributes:q.attributes.map(W=>({name:W.name,type:W.type,isPrimaryKey:W.isPrimaryKey}))})}e.send((0,at.encode)([V1,w,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of be)U.lastChunk+ge<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${g}`),be.delete(A),U.end())},ge).unref();let _=1,T=[];return{end(){Lo&&Lo.end(),Dn&&Dn.emit("close")},getRecord(A){let U=_++;return new Promise((w,L)=>{let q=[G1,U,A.table.tableId,A.id];T[A.table.tableId]||(q.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,at.encode)(q)),ce=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(W){let{table:Q,entry:B}=A;if(w(W),W)return Q._recordRelocate(B,W)},reject:L})})},sendOperation(A){let U=_++;return A.requestId=U,e.send((0,at.encode)([uO,A])),new Promise((w,L)=>{R.set(U,{resolve:w,reject:L})})}};function C(A){x(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,w=A.length){let L=w-U;x(L),A.copy(o,c,U,w),c+=L}function O(A){x(8),l.setFloat64(c,A),c+=8}function x(A){if(A+16>o.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(U,0,i,c),c=c-i,i=0,o=U,l=new DataView(o.buffer,0,o.length)}}function D(A,U){let w=A.database??"data";U||(U={});let L=U.schemaDefined,q=!1,W=A.schemaDefined,Q=U.attributes||[];for(let B=0;B<A.attributes?.length;B++){let Ee=A.attributes[B],fe=Q.find(pe=>pe.name===Ee.name);(!fe||fe.type!==Ee.type)&&(L?ue.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${Ee.name}: ${Ee.type}' from '${g}' does not match local attribute ${fe?"'"+fe.name+": "+fe.type+"'":"which does not exist"}`):(q=!0,W||(Ee.indexed=!0),fe?Q[Q.indexOf(fe)]=Ee:Q.push(Ee)))}return q?(ue.debug?.("(Re)creating",A),Xe({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:Q,...U})):U}}var z1,at,j1,Q1,J1,pO,X1,Z1,hO,eK,lO,tK,Cfe,oO,ue,B1,F1,k1,Ch,H1,aO,G1,PT,uO,LT,q1,$1,V1,DT,rK,dO,fO,Oh,MT,mO,nK,sK,iK,EO,Ec,vT,K1,Ofe,Y1,cO,nf,W1,sf,_O=se(()=>{we();qi();YC();tI();Ss();z1=b(me());H();al();at=require("msgpackr"),j1=require("ws"),Q1=require("worker_threads"),J1=b(J());Ih();pO=require("events"),X1=b(ys()),Z1=b(require("node:tls"));Xd();hO=b(require("node:process")),eK=require("node:net");ss();ns();lO=require("node:stream"),tK=require("lmdb"),{forComponent:Cfe,errorToString:oO}=J1.default,ue=Cfe("replication").conditional,B1=129,F1=140,k1=141,Ch=142,H1=130,aO=132,G1=133,PT=134,uO=136,LT=137,q1=143,$1=144,V1=145,DT=146,rK=0,dO=1,fO=2,Oh=3,MT=4,mO=5,nK=6,sK=0,iK=1,EO=new Map,Ec=new Map,vT=!0,K1=300,Ofe=2,Y1=3e4;a(UT,"createWebSocket");W1=500,sf=class extends pO.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=W1;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??Ri(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await UT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${hO.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=W1,this.nodeSubscriptions&&Kl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Ph(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"?(ue.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"?ue.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`):ue.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&&ef({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();ue.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))}};a(Ph,"replicateOverWS")});function _c(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(`
|
|
24
24
|
`)}function cK(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}function TO(e){try{let t=zl(e),n=ho.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return aa.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=ca.fromBER(n.extnValue.valueBlock.valueHexView);if(s.offset===-1)throw new Error("Failed to parse ASN.1 structure in CRL Distribution Points extension");let i=new ho.CRLDistributionPoints({schema:s.result}),o=[];for(let c of i.distributionPoints)if(c.distributionPoint&&Array.isArray(c.distributionPoint)){for(let l of c.distributionPoint)if(l.type===6&&typeof l.value=="string"){let u=l.value;(u.startsWith("http://")||u.startsWith("https://"))&&o.push(u)}}return aa.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return aa.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function lK(e){try{let t=zl(e),r=ho.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=ca.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1){let c=new ho.CRLDistributionPoints({schema:o.result});for(let l of c.distributionPoints)if(l.distributionPoint&&Array.isArray(l.distributionPoint)){for(let u of l.distributionPoint)if(u.type===6&&typeof u.value=="string"){let d=u.value;(d.startsWith("http://")||d.startsWith("https://"))&&n.push(d)}}}}catch(o){aa.warn?.(`Failed to parse CRL Distribution Points extension: ${o}`)}else if(i.extnID==="1.3.6.1.5.5.7.1.1")try{let o=ca.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof ca.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof ca.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof ca.ObjectIdentifier&&l.valueBlock.toString()==="1.3.6.1.5.5.7.48.1"&&u.idBlock.tagNumber===6){let d=String.fromCharCode(...Array.from(u.valueBlock.valueHexView));(d.startsWith("http://")||d.startsWith("https://"))&&s.push(d)}}}}catch(o){aa.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return aa.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return aa.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function zl(e){let t=e.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s/g,""),r=atob(t),n=new ArrayBuffer(r.length),s=new Uint8Array(n);for(let i=0;i<r.length;i++)s[i]=r.charCodeAt(i);return n}function BT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,SO.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function yO(e,t){return`${e}:${t}`}function uK(e){try{let t=zl(e),n=ho.Certificate.fromBER(t).serialNumber.valueBlock.valueHexView;return Array.from(n).map(s=>s.toString(16).padStart(2,"0")).join("")}catch(t){throw aa.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function RO(e){try{let t=zl(e),r=ho.Certificate.fromBER(t),n=r.extensions?.find(i=>i.extnID==="2.5.29.35");if(n){let i=new ho.AuthorityKeyIdentifier({schema:n.parsedValue});if(i.keyIdentifier){let o=i.keyIdentifier.valueBlock.valueHexView;return Array.from(o).map(c=>c.toString(16).padStart(2,"0")).join("")}}let s=r.issuer.typesAndValues.map(i=>`${i.type}=${i.value.valueBlock.value}`).join(",");return(0,SO.createHash)("sha256").update(s).digest("hex")}catch(t){throw aa.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function FT(){return gO||(gO=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"}]})),gO}var SO,ho,ca,aK,aa,gO,kT=se(()=>{SO=require("node:crypto"),ho=b(require("pkijs")),ca=b(require("asn1js")),aK=b(Ir());we();aa=(0,aK.loggerWithTag)("cert-verification-utils");a(_c,"bufferToPem");a(cK,"extractCertificateChain");a(TO,"extractCRLDistributionPoints");a(lK,"extractRevocationUrls");a(zl,"pemToBuffer");a(BT,"createCacheKey");a(yO,"createRevokedCertificateId");a(uK,"extractSerialNumber");a(RO,"extractIssuerKeyId");gO=null;a(FT,"getCertificateCacheTable")});function dK(e){let{error:t,value:r}=vfe.validate(e,{abortEarly:!1,allowUnknown:!1});if(t){let n=t.details.map(s=>s.message).join("; ");throw new Error(`Invalid certificate verification configuration: ${n}`)}return r}var zr,Pfe,of,af,bO,Lfe,Dfe,vfe,fK=se(()=>{zr=b(require("joi")),Pfe="fail-closed",of={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},af={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},bO=zr.default.string().valid("fail-open","fail-closed"),Lfe=zr.default.alternatives().try(zr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...af}),zr.default.object({enabled:zr.default.boolean().default(!0),timeout:zr.default.number().min(1e3).default(af.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:zr.default.number().min(1e3).default(af.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:bO.default(af.failureMode),gracePeriod:zr.default.number().min(0).default(af.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),Dfe=zr.default.alternatives().try(zr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...of}),zr.default.object({enabled:zr.default.boolean().default(!0),timeout:zr.default.number().min(1e3).default(of.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:zr.default.number().min(1e3).default(of.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:zr.default.number().min(1e3).default(of.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:bO.default(of.failureMode)})),vfe=zr.default.object({failureMode:bO.default(Pfe),crl:Lfe.default({enabled:!0,...af}),ocsp:Dfe.default({enabled:!0,...of})});a(dK,"validateAndParseCertificateVerificationConfig")});function yK(e){if(typeof e=="boolean"||e==null){if(e===AO&&IO)return Eo.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===AO&&HT!==null)return Eo.trace?.("Using cached certificate verification config (primitive)"),HT;Eo.trace?.("Parsing and caching certificate verification config (primitive)"),AO=e;try{return HT=hK(e),IO=null,HT}catch(n){return IO=n,Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(pK.get(e))return Eo.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=mK.get(e);if(r!==void 0)return Eo.trace?.("Using cached certificate verification config (object)"),r;Eo.trace?.("Parsing and caching certificate verification config (object)");try{let n=hK(e);return mK.set(e,n),n}catch(n){return pK.set(e,n),Eo.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function hK(e){if(Eo.trace?.(`getCertificateVerificationConfig called with: ${JSON.stringify({mtlsConfig:e})}`),!e)return!1;let t=e===!0?void 0:e.certificateVerification;return Eo.trace?.(`Certificate verification config: ${JSON.stringify({verificationConfig:t})}`),t==null||t===!1?!1:dK(t===!0?{}:t)}var EK,_K,Eo,gK,SK,TK,mK,AO,HT,pK,IO,wO=se(()=>{EK=b(Ir()),_K=b(yt());fK();Eo=(0,EK.loggerWithTag)("cert-verification-config"),gK=10080*60*1e3,SK=3e5,TK=`Harper/${_K.packageJson.version} CRL-Client`,mK=new WeakMap,AO=null,HT=null,pK=new WeakMap,IO=null;a(yK,"getCachedCertificateVerificationConfig");a(hK,"getCertificateVerificationConfig")});function Lh(e){return e===bK||e===Mfe}function Ufe(e){return e===AK||e===IK}function NO(e){return e===bK?AK:IK}function xfe(){if(RK)return;RK=!0;let e=jl.CryptoEngine.prototype,t=jl.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 Lh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return Lh(s)?{name:NO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Ufe(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=jl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(Lh(i)){let o=NO(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),o,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(Lh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new Dh.X509Certificate(Buffer.from(i)),l=new Dh.X509Certificate(Buffer.from(o));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,o]=n,c=o.algorithm.algorithmId;if(Lh(c)){let l=NO(c);try{let u=this.crypto?.subtle||this.subtle||jl.getCrypto(!0)?.subtle||Dh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",o.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return"unusedBits"in i.valueBlock&&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 jl,Dh,bK,Mfe,AK,IK,RK,wK=se(()=>{jl=b(require("pkijs")),Dh=require("node:crypto"),bK="1.3.101.112",Mfe="1.3.101.113",AK="Ed25519",IK="Ed448",RK=!1;a(Lh,"isEd25519OrEd448");a(Ufe,"isEdDSAAlgorithmName");a(NO,"getEdDSAAlgorithmName");a(xfe,"applyEd25519Patch");xfe()});var PK={};ye(PK,{CRLSignatureVerificationError:()=>vh,performCRLCheck:()=>kfe,verifyCRL:()=>PO});function Bfe(){return GT||(GT=FT(),GT.sourcedFrom(cf)),GT}function Ffe(){return qT||(qT=Xe({table:"hdb_crl_cache",database:"system",attributes:[{name:"distribution_point",isPrimaryKey:!0},{name:"issuer_dn"},{name:"crl_blob"},{name:"this_update"},{name:"next_update"},{name:"signature_valid"},{name:"expiresAt",expiresAt:!0,indexed:!0}]}),qT.sourcedFrom(OO)),qT}function CK(){return CO||(CO=Xe({table:"hdb_revoked_certificates",database:"system",attributes:[{name:"composite_id",isPrimaryKey:!0},{name:"serial_number",indexed:!0},{name:"issuer_key_id",indexed:!0},{name:"revocation_date"},{name:"revocation_reason"},{name:"crl_source",indexed:!0},{name:"crl_next_update"},{name:"expiresAt",expiresAt:!0,indexed:!0}]})),CO}async function PO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=_c(e,"CERTIFICATE"),i=_c(t,"CERTIFICATE"),o=n??TO(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=BT(s,i,"crl"),l=await Bfe().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Pr.error?.("Cache fetch returned null - this indicates a source configuration issue"),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"crl"}:(Pr.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Pr.trace?.(`CRL ${d?"source fetch":"cache hit"} for certificate`),{valid:u.status==="good",status:u.status,cached:!d,method:u.method||"crl"}}catch(s){return Pr.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Pr.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function kfe(e,t,r,n){let s=n??TO(e);if(s.length===0)return{status:"good"};let i=uK(e),o=RO(t),c=yO(o,i);try{let u=await CK().get(c);if(u){let f=Date.now(),m=u;return m.crl_next_update>f?{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}:m.crl_next_update+r.gracePeriod>f?(Pr.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Pr.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await Hfe(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Pr.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Pr.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function Hfe(e,t,r){let n=Date.now();for(let s of e)try{let i=Ffe(),o=null,c=null;try{c=await i.get(s),(c&&c.next_update>n||c&&c.next_update+r.gracePeriod>n)&&(o=c)}catch{}o||(o=await OK(s,t,r.timeout));let l=o.next_update;if(l>n){if(!c)try{await i.put(s,o)}catch{}return{upToDate:!0,source:s}}else return l+r.gracePeriod>n?{upToDate:!0,source:s}:{upToDate:!1,reason:"crl-expired"}}catch(i){if(i instanceof vh)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function OK(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":TK}});if(clearTimeout(s),!i.ok)throw new Error(`CRL download failed: ${i.status}`);let o=Buffer.from(await i.arrayBuffer()),c,l=o.toString("utf8");l.includes("-----BEGIN X509 CRL-----")?c=Buffer.from(zl(l)):c=o;let u=$T.CertificateRevocationList.fromBER(c),d=$T.Certificate.fromBER(zl(t)),f=await u.verify({issuerCertificate:d});if(!f){let g=`CRL signature verification failed for: ${e}`;throw Pr.error?.(g),new vh(g)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+gK,h=d.issuer.typesAndValues.map(g=>`${g.type}=${g.value.valueBlock.value}`).join(","),E={distribution_point:e,issuer_dn:h,crl_blob:o,this_update:m,next_update:p,signature_valid:f,expiresAt:p};return Gfe(u,t,e,p).catch(g=>{Pr.error?.(`Error processing revoked certificates: ${g}`)}),E}finally{clearTimeout(s)}}async function Gfe(e,t,r,n){let s=CK(),i=RO(t),o=r;try{await qfe(s,o)}catch(c){Pr.warn?.(`Failed to clear existing CRL entries: ${c}`)}if(e.revokedCertificates)for(let c of e.revokedCertificates)try{let l=c.userCertificate.valueBlock.valueHexView;if(!l){Pr.warn?.("Could not extract serial number from revoked certificate");continue}let u=Array.from(l).map(h=>h.toString(16).padStart(2,"0")).join(""),d=yO(i,u),f=c.revocationDate.value.getTime(),p={composite_id:d,serial_number:u,issuer_key_id:i,revocation_date:f,revocation_reason:"unspecified",crl_source:o,crl_next_update:n,expiresAt:n};await s.create(p.composite_id,p)}catch(l){Pr.warn?.(`Failed to process revoked certificate: ${l}`)}}async function qfe(e,t){try{let r=e.search([{attribute:"crl_source",value:t}]);for await(let n of r)try{await e.delete(n.composite_id)}catch(s){Pr.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Pr.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var $T,NK,vh,Pr,GT,OO,qT,CO,LO=se(()=>{$T=b(require("pkijs")),NK=b(Ir());we();Vo();kT();wO();DO();vh=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Pr=(0,NK.loggerWithTag)("crl-verification");a(Bfe,"getCertificateCacheTable");OO=class extends lr{static{a(this,"CertificateRevocationListSource")}async get(t){let n=this.getContext()?.requestContext;if(!n?.distributionPoint||!n?.issuerPem)throw new Error(`No CRL data provided for cache key: ${t}`);let{distributionPoint:s,issuerPem:i,config:o}=n;try{let c=await OK(s,i,o.timeout),l=c.next_update,u=Date.now()+o.cacheTtl,d=Math.min(l,u);return{...c,expiresAt:d}}catch(c){if(Pr.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+SK;return{crl_id:t,distribution_point:s,issuer_dn:"unknown",crl_blob:Buffer.alloc(0),this_update:Date.now(),next_update:l,signature_valid:!1,expiresAt:l}}return Pr.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(Ffe,"getCRLCacheTable");a(CK,"getRevokedCertificateTable");a(PO,"verifyCRL");a(kfe,"performCRLCheck");a(Hfe,"checkCRLFreshness");a(OK,"downloadAndParseCRL");a(Gfe,"processRevokedCertificates");a(qfe,"clearExistingCRLEntries")});async function $fe(){vO||(vO=(await Promise.resolve().then(()=>(LO(),PK))).performCRLCheck),MO||(MO=(await Promise.resolve().then(()=>(UO(),DK))).performOCSPCheck)}var LK,y0e,vO,MO,cf,DO=se(()=>{Vo();LK=b(Ir()),y0e=(0,LK.loggerWithTag)("cert-verification-source");a($fe,"loadVerificationFunctions");cf=class extends lr{static{a(this,"CertificateVerificationSource")}async get(t){let r=t.id,s=this.getContext()?.requestContext;if(!s||!s.certPem||!s.issuerPem)return null;let{certPem:i,issuerPem:o,ocspUrls:c,config:l}=s,u;r.startsWith("crl:")?u="crl":r.startsWith("ocsp:")?u="ocsp":u="unknown",await $fe();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await vO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await MO(i,o,f,c);else throw new Error(`Unsupported verification method: ${u} for ID: ${r}`);let m=Date.now()+f.cacheTtl;return{certificate_id:r,status:d.status,reason:d.reason,checked_at:Date.now(),expiresAt:m,method:u}}}});var DK={};ye(DK,{performOCSPCheck:()=>Kfe,verifyOCSP:()=>xO});function Vfe(){return KT||(KT=FT(),KT.sourcedFrom(cf)),KT}async function xO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=_c(e,"CERTIFICATE"),i=_c(t,"CERTIFICATE"),o=BT(s,i,"ocsp"),c=await Vfe().get(o,{certPem:s,issuerPem:i,ocspUrls:n,config:{ocsp:r??{}}});if(!c)return r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(VT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return VT.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(s){return VT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(VT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Kfe(e,t,r,n){try{let s=await(0,vK.getCertStatus)(e,{ca:t,timeout:r.timeout,...n?.length&&{ocspUrl:n[0]}});switch(s.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:s.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(s){return{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}var vK,MK,VT,KT,UO=se(()=>{wK();vK=require("easy-ocsp"),MK=b(Ir());kT();DO();VT=(0,MK.loggerWithTag)("ocsp-verification");a(Vfe,"getCertificateCacheTable");a(xO,"verifyOCSP");a(Kfe,"performOCSPCheck")});async function lf(e,t){cn.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=yK(t);if(r===!1)return cn.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=cK(e);if(cn.trace?.(`Certificate chain length: ${n.length}`),n.length<2||!n[0].issuer)return cn.debug?.("Certificate chain insufficient for revocation checking - need certificate and issuer"),{valid:!0,status:"no-issuer-cert",method:"disabled"};let s=_c(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=lK(s);if(cn.debug?.(`Certificate extensions: CRL distribution points=${i.length}, OCSP URLs=${o.length}`),i.length>0)if(r.crl.enabled)try{cn.debug?.("Attempting CRL verification");let c=await PO(n[0].cert,n[0].issuer,r.crl,i);if(c.status==="good"||c.status==="revoked")return cn.debug?.(`CRL verification result: ${c.status}`),c;cn.debug?.(`CRL verification inconclusive: ${c.status}, trying OCSP fallback`)}catch(c){cn.warn?.(`CRL verification failed: ${c}`)}else cn.debug?.("Skipping CRL - disabled in configuration");else cn.debug?.("Skipping CRL - no distribution points in certificate");if(o.length>0)if(r.ocsp.enabled)try{cn.debug?.("Attempting OCSP verification");let c=await xO(n[0].cert,n[0].issuer,r.ocsp,o);return cn.debug?.(`OCSP verification result: ${c.status}`),c}catch(c){cn.warn?.(`OCSP verification failed: ${c}`)}else cn.debug?.("Skipping OCSP - disabled in configuration");else cn.debug?.("Skipping OCSP - no responder URLs in certificate");return r.failureMode==="fail-closed"?{valid:!1,status:"no-verification-available",method:"disabled"}:{valid:!0,status:"verification-unavailable-allowed",method:"disabled"}}var UK,cn,YT=se(()=>{UK=b(Ir());kT();wO();UO();LO();cn=(0,UK.loggerWithTag)("cert-verification");a(lf,"verifyCertificate")});var ia={};ye(ia,{buildReplicationMtlsConfig:()=>VK,clearThisNodeName:()=>eme,disableReplication:()=>jfe,enabledDatabases:()=>hc,forEachReplicatedDatabase:()=>uc,getThisNodeId:()=>xT,getThisNodeName:()=>nt,getThisNodeUrl:()=>dc,hostnameToUrl:()=>QT,lastTimeInAuditStore:()=>Th,monitorNodeCAs:()=>KK,replicateOperation:()=>rme,replicationCertificateAuthorities:()=>oa,sendOperationToNode:()=>Mh,servers:()=>Wfe,setReplicator:()=>WK,start:()=>zfe,startOnMainThread:()=>WC,subscribeToNode:()=>Ah,unsubscribeFromNode:()=>AT,urlToNodeName:()=>Ri});function VK(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function zfe(e){if(!e.port&&!e.securePort&&(e.port=Ys.default.get(F.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ys.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),!nt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let i of Rh(e))t.set(Ri(i.url),i);Qfe(e);let r=VK(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Be.ws(async(i,o,c,l)=>{if(It.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),Ph(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Be.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${i.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`,i._nodeRequest.socket.authorizationError);let c=Ht().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,qK.getHostnamesFromCertificate)(i.peerCertificate),u;for(let d of l)if(u=d&&(c.get(d)||t.get(d)),u)break;if(u){let d=await lf(i.peerCertificate,e.mtls);if(!d.valid){It.warn("Certificate verification failed:",d.status,"for node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}if(u?.revoked_certificates?.includes(i.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else It.warn(`No node found for certificate common name/SANs: ${l}, available nodes are ${Array.from(c.getRange({}).filter(({value:d})=>d).map(({key:d})=>d)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let l=c.get(i.ip)||t.get(i.ip);l?i.user=l:It.warn(`No node found for IP address ${i.ip}, available nodes are ${Array.from(new Set([...c.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return o(i)},e);let s=[];for(let i of n)if(i.secureContexts){let o=a(()=>{let c=new Set(i.secureContexts.values());i.defaultContext&&c.add(i.defaultContext);for(let l of c)try{let u=Array.from(oa);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=jT.createSecureContext(d)}catch(u){It.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1&&o()}KK(()=>{for(let i of s)i()})}function KK(e){let t=0;Jd(r=>{r?.ca&&(oa.add(r.ca),oa.size!==t&&(t=oa.size,e?.()))})}function jfe(e=!0){$K=e}function Qfe(e){$K||(ct(),hc=e.databases,uc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Ec;for(let[s,i]of zT){let o=i.get(r);o&&(o.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];WK(r,s,e),EO.get(s)?.forEach(i=>i(s))}}))}function WK(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 YK extends lr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Ec,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(It.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new rs,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Be.hostname)continue;let E=Xfe(h,YK.subscription,e);if(E?.isConnected){let g=Qd(t.auditStore,e,h)[MT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new HK.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Yfe++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",Ql,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Jfe(e,t,r,n,s,i){let o=t+"-"+e,c=zT.get(o);c||(c=new Map,zT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new sf(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function Xfe(e,t,r){let n=xK.get(Ql);n||(n=new Map,xK.set(Ql,n));let s=n.get(r);if(s)return s;let i=Ht().primaryStore.get(e);return i?.url&&(s=new sf(i.url,t,r,Ql,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function Mh(e,t,r){r||(r={}),r.serverName=e.name;let n=await UT(e.url,r),s=Ph(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Ah(e){try{GK.isMainThread&&It.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Ec.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Ec.set(e.database,t)}let r=Jfe(e.nodes[0].url,e.url,t,e.database,e.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=>yh(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function AT({url:e,nodes:t,database:r}){It.trace("Unsubscribing from node",e,r,"nodes",Array.from(Ht().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=zT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function Zfe(){if(BO!==void 0)return BO;let e=Ys.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||Ys.default.get(F.TLS_CERTIFICATE);if(e)return BO=new FK.X509Certificate((0,kK.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function nt(){return Ql||(Ql=Ys.default.get("replication_hostname")??Ri(Ys.default.get("replication_url"))??Zfe()??BK("operationsapi_network_secureport")??BK("operationsapi_network_port")??"127.0.0.1")}function eme(){Ql=void 0}function BK(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function WT(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function xT(e){return Sh(e)?.[nt()]}function dc(){let e=Ys.default.get("replication_url");return e||QT(nt())}function QT(e){let t=WT("replication_port");if(t)return`ws://${e}:${t}`;if(t=WT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=WT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=WT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function Ri(e){if(e)return new URL(e).hostname}function uc(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return jp(n=>{r(n)}),Bl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.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):tme(n)&&t(s,n,!1)}a(r,"forDatabase")}function tme(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function Th(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function rme(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Be.nodes.map(n=>n.name));let r=await Promise.allSettled(Be.nodes.map(n=>Mh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Be.nodes[s]?.name,i})}return t}var Ys,It,FK,kK,jT,HK,GK,qK,$K,Yfe,Wfe,oa,hc,zT,xK,BO,Ql,Ss=se(()=>{we();Vo();Uu();_O();Hr();Ys=b(me()),It=b(J()),FK=require("crypto");YT();kK=require("fs");Ih();Xd();H();YC();jT=b(require("node:tls")),HK=b(_e()),GK=require("worker_threads"),qK=b(ys()),Yfe=1,Wfe=[],oa=Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(jT.rootCertificates):new Set;a(VK,"buildReplicationMtlsConfig");a(zfe,"start");a(KK,"monitorNodeCAs");a(jfe,"disableReplication");a(Qfe,"assignReplicationSource");a(WK,"setReplicator");zT=new Map;a(Jfe,"getSubscriptionConnection");xK=new Map;a(Xfe,"getRetrievalConnectionByName");a(Mh,"sendOperationToNode");a(Ah,"subscribeToNode");a(AT,"unsubscribeFromNode");a(Zfe,"getCommonNameFromCert");a(nt,"getThisNodeName");a(eme,"clearThisNodeName");Object.defineProperty(Be,"hostname",{get(){return nt()}});a(BK,"getHostFromListeningPort");a(WT,"getPortFromListeningPort");a(xT,"getThisNodeId");Be.replication={getThisNodeId:xT,exportIdMapping:Sh};a(dc,"getThisNodeUrl");a(QT,"hostnameToUrl");a(Ri,"urlToNodeName");a(uc,"forEachReplicatedDatabase");a(tme,"hasExplicitlyReplicatedTable");a(Th,"lastTimeInAuditStore");a(rme,"replicateOperation")});var ty=M((K0e,XK)=>{"use strict";var uf=AV(),{validateBySchema:Uh}=mt(),{commonValidators:df,schemaRegex:FO}=ji(),_r=require("joi"),nme=J(),sme=require("uuid").v4,ZT=Wo(),ff=(H(),v(z)),ime=require("util"),gc=ds(),{handleHDBError:la,hdbErrors:ome,ClientError:Jl}=_e(),{HDB_ERROR_MSGS:JT,HTTP_STATUS_CODES:ua}=ome,{SchemaEventMsg:ey}=cs(),zK=hr(),{getDatabases:ame}=(we(),v(ft)),{transformReq:mf}=oe(),{replicateOperation:jK}=(Ss(),v(ia)),{cleanupOrphans:cme}=(ns(),v(F_)),XT=_r.string().min(1).max(df.schema_length.maximum).pattern(FO).messages({"string.pattern.base":"{:#label} "+df.schema_format.message}),lme=_r.string().min(1).max(df.schema_length.maximum).pattern(FO).messages({"string.pattern.base":"{:#label} "+df.schema_format.message}).required(),ume=_r.string().min(1).max(df.schema_length.maximum).pattern(FO).messages({"string.pattern.base":"{:#label} "+df.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();XK.exports={createSchema:dme,createSchemaStructure:QK,createTable:fme,createTableStructure:JK,createAttribute:_me,dropSchema:mme,dropTable:pme,dropAttribute:hme,getBackup:gme,cleanupOrphanBlobs:Sme};async function dme(e){let t=await QK(e);return ZT.signalSchemaChange(new ey(process.pid,e.operation,e.schema)),t}a(dme,"createSchema");async function QK(e){let t=Uh(e,_r.object({database:XT,schema:XT}));if(t)throw new Jl(t.message);if(mf(e),!await uf.checkSchemaExists(e.schema))throw la(new Error,JT.SCHEMA_EXISTS_ERR(e.schema),ua.BAD_REQUEST,ff.LOG_LEVELS.ERROR,JT.SCHEMA_EXISTS_ERR(e.schema),!0);return await gc.createSchema(e),`database '${e.schema}' successfully created`}a(QK,"createSchemaStructure");async function fme(e){return mf(e),e.hash_attribute=e.primary_key??e.hash_attribute,await JK(e)}a(fme,"createTable");async function JK(e){let t=Uh(e,_r.object({database:XT,schema:XT,table:lme,residence:_r.array().items(_r.string().min(1)).optional(),hash_attribute:ume}));if(t)throw new Jl(t.message);if(!await uf.checkSchemaTableExists(e.schema,e.table))throw la(new Error,JT.TABLE_EXISTS_ERR(e.schema,e.table),ua.BAD_REQUEST,ff.LOG_LEVELS.ERROR,JT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:sme(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await gc.createTable(n,e);else throw la(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ua.BAD_REQUEST);else await gc.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(JK,"createTableStructure");async function mme(e){let t=Uh(e,_r.object({database:_r.string(),schema:_r.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Jl(t.message);mf(e);let r=await uf.checkSchemaExists(e.schema);if(r)throw la(new Error,r,ua.NOT_FOUND,ff.LOG_LEVELS.ERROR,r,!0);let n=await uf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await gc.dropSchema(e),ZT.signalSchemaChange(new ey(process.pid,e.operation,e.schema)),await zK.purgeSchemaTableStreams(e.schema,s);let i=await jK(e);return i.message=`successfully deleted '${e.schema}'`,i}a(mme,"dropSchema");async function pme(e){let t=Uh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required()}));if(t)throw new Jl(t.message);mf(e);let r=await uf.checkSchemaTableExists(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,ff.LOG_LEVELS.ERROR,r,!0);await gc.dropTable(e),await zK.purgeTableStream(e.schema,e.table);let n=await jK(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(pme,"dropTable");async function hme(e){let t=Uh(e,_r.object({database:_r.string(),schema:_r.string(),table:_r.string().required(),attribute:_r.string().required()}));if(t)throw new Jl(t.message);mf(e);let r=await uf.checkSchemaTableExists(e.schema,e.table);if(r)throw la(new Error,r,ua.NOT_FOUND,ff.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw la(new Error,"You cannot drop a hash attribute",ua.BAD_REQUEST,void 0,void 0,!0);if(ff.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw la(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ua.BAD_REQUEST,void 0,void 0,!0);try{return await gc.dropAttribute(e),Eme(e),ZT.signalSchemaChange(new ey(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw nme.error(`Got an error deleting attribute ${ime.inspect(e)}.`),n}}a(hme,"dropAttribute");function Eme(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(Eme,"dropAttributeFromGlobal");async function _me(e){mf(e);let t=ame()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw la(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ua.BAD_REQUEST,void 0,void 0,!0);return await gc.createAttribute(e),ZT.signalSchemaChange(new ey(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(_me,"createAttribute");function gme(e){return gc.getBackup(e)}a(gme,"getBackup");function Sme(e){if(!e.database)throw new Jl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Jl(`Unknown database '${e.database}'`);return cme(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(Sme,"cleanupOrphanBlobs")});var eY=M((W0e,ZK)=>{"use strict";var{OPERATIONS_ENUM:Tme}=(H(),v(z)),kO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Tme.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};ZK.exports=kO});var HO=M((Q0e,iY)=>{"use strict";var yme=ds(),j0e=eY(),ry=oe(),ny=(H(),v(z)),Rme=me(),{handleHDBError:tY,hdbErrors:bme}=_e(),{HDB_ERROR_MSGS:rY,HTTP_STATUS_CODES:nY}=bme,Ame=Object.values(ny.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),sY="To use this operation audit log must be enabled in harperdb-config.yaml";iY.exports=Ime;async function Ime(e){if(ry.isEmpty(e.schema))throw new Error(rY.SCHEMA_REQUIRED_ERR);if(ry.isEmpty(e.table))throw new Error(rY.TABLE_REQUIRED_ERR);if(!Rme.get(ny.CONFIG_PARAMS.LOGGING_AUDITLOG))throw tY(new Error,sY,nY.BAD_REQUEST,ny.LOG_LEVELS.ERROR,sY,!0);let t=ry.checkSchemaTableExist(e.schema,e.table);if(t)throw tY(new Error,t,nY.NOT_FOUND,ny.LOG_LEVELS.ERROR,t,!0);if(!ry.isEmpty(e.search_type)&&Ame.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await yme.readAuditLog(e)}a(Ime,"readAuditLog")});var aY=M((X0e,oY)=>{"use strict";var{OPERATIONS_ENUM:wme}=(H(),v(z)),GO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=wme.GET_BACKUP,this.schema=t,this.table=r}};oY.exports=GO});var uY=M((rBe,lY)=>{"use strict";var Nme=ds(),eBe=aY(),qO=oe(),Cme=(H(),v(z)),tBe=me(),{handleHDBError:Ome,hdbErrors:Pme}=_e(),{HDB_ERROR_MSGS:cY,HTTP_STATUS_CODES:Lme}=Pme;lY.exports=Dme;async function Dme(e){if(qO.isEmpty(e.schema))throw new Error(cY.SCHEMA_REQUIRED_ERR);if(qO.isEmpty(e.table))throw new Error(cY.TABLE_REQUIRED_ERR);let t=qO.checkSchemaTableExist(e.schema,e.table);if(t)throw Ome(new Error,t,Lme.NOT_FOUND,Cme.LOG_LEVELS.ERROR,t,!0);return await Nme.getBackup(readAuditLogObject)}a(Dme,"getBackup")});var pY=M((sBe,mY)=>{"use strict";var vme=me(),Sc=require("joi"),Mme=mt(),dY=require("moment"),Ume=require("fs-extra"),$O=require("path"),xme=require("lodash"),xh=(H(),v(z)),{LOG_LEVELS:Xl}=(H(),v(z)),Bme="YYYY-MM-DD hh:mm:ss",Fme=$O.resolve(__dirname,"../logs");mY.exports=function(e){return Mme.validateBySchema(e,kme)};var kme=Sc.object({from:Sc.custom(fY),until:Sc.custom(fY),level:Sc.valid(Xl.NOTIFY,Xl.FATAL,Xl.ERROR,Xl.WARN,Xl.INFO,Xl.DEBUG,Xl.TRACE),order:Sc.valid("asc","desc"),limit:Sc.number().min(1),start:Sc.number().min(0),log_name:Sc.custom(Hme)});function fY(e,t){if(dY(e,dY.ISO_8601).format(Bme)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(fY,"validateDatetime");function Hme(e,t){if(xme.invert(xh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=vme.get(xh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?xh.LOG_NAMES.HDB:e,i=s===xh.LOG_NAMES.INSTALL?$O.join(Fme,xh.LOG_NAMES.INSTALL):$O.join(n,s);return Ume.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Hme,"validateReadLogPath")});var KO=M((oBe,EY)=>{"use strict";var sy=(H(),v(z)),Gme=J(),qme=me(),$me=pY(),VO=require("path"),hY=require("fs-extra"),{once:Vme}=require("events"),{handleHDBError:Kme,hdbErrors:Yme}=_e(),{PACKAGE_ROOT:Wme}=yt(),{replicateOperation:zme}=(Ss(),v(ia)),jme=VO.join(Wme,"logs"),Qme=1e3,Jme=200;EY.exports=Xme;async function Xme(e){let t=$me(e);if(t)throw Kme(t,t.message,Yme.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=zme(e),n=qme.get(sy.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?sy.LOG_NAMES.HDB:e.log_name,i=s===sy.LOG_NAMES.INSTALL?VO.join(jme,sy.LOG_NAMES.INSTALL):VO.join(n,s),o=e.level!==void 0,c=o?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?Qme: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(hY.statSync(i).size-(E+5)*Jme,0));let R=hY.createReadStream(i,{start:g});R.on("error",G=>{Gme.error(G)});let S=0,y=[],N="",I;R.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))&&!R.destroyed;){I&&(I.message=G.slice(j,Y.index),$(I));let[ce,de,te]=Y,ge=te.split("] ["),be=ge[0],Ye=ge[1];ge.splice(0,2),I={timestamp:de,thread:be,level:Ye,tags:ge,message:""},j=Y.index+ce.length}N=G.slice(j)}),R.on("end",G=>{R.destroyed||I&&(I.message=N.trim(),$(I))}),R.resume();function $(G){let k,j,Y;switch(!0){case(o&&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&&(_o(G,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(G.timestamp),j=new Date(u),G.level===c&&k>=j&&S<h?S++:G.level===c&&k>=j&&(_o(G,p,y),S++,S===E&&R.destroy());break;case(o&&d):k=new Date(G.timestamp),Y=new Date(f),G.level===c&&k<=Y&&S<h?S++:G.level===c&&k<=Y&&(_o(G,p,y),S++,S===E&&R.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&&(_o(G,p,y),S++,S===E&&R.destroy());break;case o:G.level===c&&S<h?S++:G.level===c&&(_o(G,p,y),S++,S===E&&R.destroy());break;case l:k=new Date(G.timestamp),j=new Date(u),k>=j&&S<h?S++:k>=j&&S>=h&&(_o(G,p,y),S++,S===E&&R.destroy());break;case d:k=new Date(G.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(_o(G,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(_o(G,p,y),S++,S===E&&R.destroy())}}a($,"onLogMessage"),await Vme(R,"close");let ee=await r;if(ee.replicated){for(let G of y)G.node=server.hostname;for(let G of ee.replicated){let k=G.node;if(G.status==="failed")_o({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${G.reason}`},p,y);else for(let j of G.results)j.node=k,_o(j,p,y)}}return y}a(Xme,"readLog");function _o(e,t,r){t==="desc"?Zme(e,r):t==="asc"?epe(e,r):r.push(e)}a(_o,"pushLineToResult");function Zme(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)}a(Zme,"insertDescending");function epe(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)}a(epe,"insertAscending")});var iy=M((fBe,TY)=>{"use strict";var YO=require("joi"),{string:pf,boolean:_Y,date:tpe}=YO.types(),rpe=mt(),{validateSchemaExists:cBe,validateTableExists:lBe,validateSchemaName:uBe}=ji(),npe=(H(),v(z)),spe=Ct(),gY=me();gY.initSync();var dBe=pf.invalid(gY.get(npe.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(spe.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),SY={operation:pf.valid("add_node","update_node","set_node_replication"),node_name:pf.optional(),subscriptions:YO.array().items({table:pf.optional(),schema:pf.optional(),database:pf.optional(),subscribe:_Y.required(),publish:_Y.required().custom(ope),start_time:tpe.iso()})};function ipe(e){return rpe.validateBySchema(e,YO.object(SY))}a(ipe,"addUpdateNodeValidator");function ope(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(ope,"checkForFalsy");TY.exports={addUpdateNodeValidator:ipe,validationSchema:SY}});var hf=M((pBe,yY)=>{"use strict";var WO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},zO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};yY.exports={Node:WO,NodeSubscription:zO}});var bY=M((EBe,RY)=>{"use strict";var ape=(H(),v(z)).OPERATIONS_ENUM,jO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=ape.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};RY.exports=jO});var Bh=M((gBe,AY)=>{"use strict";var QO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},JO=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};AY.exports={RemotePayloadObject:QO,RemotePayloadSubscription:JO}});var wY=M((TBe,IY)=>{"use strict";var XO=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=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=o}};IY.exports=XO});var CY=M((wBe,NY)=>{"use strict";var cpe=wY(),RBe=Yt(),bBe=Et(),lpe=J(),{getSchemaPath:ABe,getTransactionAuditStorePath:IBe}=Rt(),{getDatabases:upe}=(we(),v(ft));NY.exports=dpe;async function dpe(e){let t=new cpe;try{let r=upe()[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){lpe.warn(`unable to stat table dbi due to ${r}`)}return t}a(dpe,"lmdbGetTableSize")});var PY=M((CBe,OY)=>{"use strict";var ZO=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};OY.exports=ZO});var kh=M((MBe,MY)=>{"use strict";var fpe=require("fs-extra"),mpe=require("path"),wn=require("systeminformation"),Tc=J(),LY=hr(),PBe=Ct(),Ef=(H(),v(z)),ppe=CY(),hpe=Hl(),{getThreadInfo:DY}=st(),Fh=me();Fh.initSync();var Epe=PY(),{openEnvironment:LBe}=Et(),{getSchemaPath:DBe}=Rt(),{database:vBe,databases:eP}=(we(),v(ft)),oy;MY.exports={getHDBProcessInfo:sP,getNetworkInfo:oP,getDiskInfo:iP,getMemoryInfo:nP,getCPUInfo:rP,getTimeInfo:tP,getSystemInformation:aP,systemInformation:_pe,getTableSize:cP,getMetrics:lP};function tP(){return wn.time()}a(tP,"getTimeInfo");async function rP(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await wn.cpu();d.cpu_speed=await wn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:R,...S}=await wn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:N,rawLoadIdle:I,rawLoadIrq:$,rawLoadNice:ee,rawLoadSystem:G,rawLoadUser:k,...j}=y;S.cpus.push(j)}),d.current_load=S,d}catch(e){return Tc.error(`error in getCPUInfo: ${e}`),{}}}a(rP,"getCPUInfo");async function nP(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await wn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Tc.error(`error in getMemoryInfo: ${e}`),{}}}a(nP,"getMemoryInfo");async function sP(){let e={core:[],clustering:[]};try{let t=await wn.processes(),r;try{r=Number.parseInt(await fpe.readFile(mpe.join(Fh.get(Ef.CONFIG_PARAMS.ROOTPATH),Ef.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ef.NODE_ERROR_CODES.ENOENT)Tc.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 Tc.error(`error in getHDBProcessInfo: ${t}`),e}}a(sP,"getHDBProcessInfo");async function iP(){let e={};try{if(!Fh.get(Ef.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await wn.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await wn.fsStats();return e.read_write=u,e.size=await wn.fsSize(),e}catch(t){return Tc.error(`error in getDiskInfo: ${t}`),e}}a(iP,"getDiskInfo");async function oP(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Fh.get(Ef.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await wn.networkInterfaceDefault(),e.latency=await wn.inetChecksite("google.com"),(await wn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await wn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Tc.error(`error in getNetworkInfo: ${t}`),e}}a(oP,"getNetworkInfo");async function aP(){if(oy!==void 0)return oy;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await wn.osInfo();e=c;let l=await wn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,oy=e,oy}catch(t){return Tc.error(`error in getSystemInformation: ${t}`),e}}a(aP,"getSystemInformation");async function cP(){let e=[],t=await hpe.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await ppe(n));return e}a(cP,"getTableSize");async function lP(){let e={};for(let t in eP){let r=e[t]={},n=r.tables={};for(let s in eP[t])try{let i=eP[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 o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Tc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(lP,"getMetrics");async function vY(){if(Fh.get(Ef.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await LY.getNATSReferences(),t=await LY.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 o={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(o)}return r}}a(vY,"getNatsStreamInfo");async function _pe(e){let t=new Epe;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await aP(),t.time=tP(),t.cpu=await rP(),t.memory=await nP(),t.disk=await iP(),t.network=await oP(),t.harperdb_processes=await sP(),t.table_size=await cP(),t.metrics=await lP(),t.threads=await DY(),t.replication=await vY(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await aP();break;case"time":t.time=tP();break;case"cpu":t.cpu=await rP();break;case"memory":t.memory=await nP();break;case"disk":t.disk=await iP();break;case"network":t.network=await oP();break;case"harperdb_processes":t.harperdb_processes=await sP();break;case"table_size":t.table_size=await cP();break;case"database_metrics":case"metrics":t.metrics=await lP();break;case"threads":t.threads=await DY();break;case"replication":t.replication=await vY();break;default:break}return t}a(_pe,"systemInformation")});var da=M((kBe,FY)=>{"use strict";var gpe=$n(),uP=oe(),Spe=require("util"),Zl=(H(),v(z)),UY=me();UY.initSync();var Tpe=mC(),xY=gn(),{Node:xBe,NodeSubscription:BBe}=hf(),ype=cd(),Rpe=bY(),{RemotePayloadObject:bpe,RemotePayloadSubscription:Ape}=Bh(),{handleHDBError:Ipe,hdbErrors:wpe}=_e(),{HTTP_STATUS_CODES:Npe,HDB_ERROR_MSGS:Cpe}=wpe,Ope=mi(),Ppe=kh(),{packageJson:Lpe}=yt(),{getDatabases:Dpe}=(we(),v(ft)),FBe=Spe.promisify(Tpe.authorize),vpe=xY.searchByHash,Mpe=xY.searchByValue;FY.exports={isEmpty:Upe,getNodeRecord:xpe,upsertNodeRecord:Bpe,buildNodePayloads:Fpe,checkClusteringEnabled:kpe,getAllNodeRecords:Hpe,getSystemInfo:Gpe,reverseSubscription:BY};function Upe(e){return e==null}a(Upe,"isEmpty");async function xpe(e){let t=new ype(Zl.SYSTEM_SCHEMA_NAME,Zl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return vpe(t)}a(xpe,"getNodeRecord");async function Bpe(e){let t=new Rpe(Zl.SYSTEM_SCHEMA_NAME,Zl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return gpe.upsert(t)}a(Bpe,"upsertNodeRecord");function BY(e){if(uP.isEmpty(e.subscribe)||uP.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}a(BY,"reverseSubscription");function Fpe(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:l,table:u}=c,d=uP.getTableHashAttribute(l,u),{subscribe:f,publish:m}=BY(c),p=Dpe()[l]?.[u],h=new Ape(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new bpe(r,t,s,n)}a(Fpe,"buildNodePayloads");function kpe(){if(!UY.get(Zl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ipe(new Error,Cpe.CLUSTERING_NOT_ENABLED,Npe.BAD_REQUEST,void 0,void 0,!0)}a(kpe,"checkClusteringEnabled");async function Hpe(){let e=new Ope(Zl.SYSTEM_SCHEMA_NAME,Zl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Mpe(e))}a(Hpe,"getAllNodeRecords");async function Gpe(){let e=await Ppe.getSystemInformation();return{hdb_version:Lpe.version,node_version:e.node_version,platform:e.platform}}a(Gpe,"getSystemInfo")});var dP=M((GBe,YY)=>{"use strict";var ay=hr(),kY=oe(),HY=Ct(),GY=(H(),v(z)),cy=J(),qY=ty(),qpe=hp(),{RemotePayloadObject:$pe}=Bh(),{handleHDBError:$Y,hdbErrors:Vpe}=_e(),{HTTP_STATUS_CODES:VY}=Vpe,{NodeSubscription:KY}=hf();YY.exports=Kpe;async function Kpe(e,t){let r;try{r=await ay.request(`${t}.${HY.REQUEST_SUFFIX}`,new $pe(GY.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),cy.trace("Response from remote describe all request:",r)}catch(o){cy.error(`addNode received error from describe all request to remote node: ${o}`);let c=ay.requestErrorHandler(o,"add_node",t);throw $Y(new Error,c,VY.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===HY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw $Y(new Error,o,VY.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,l=o.database??o.schema??"data";if(l===GY.SYSTEM_SCHEMA_NAME){await ay.createLocalTableStream(l,c);let h=new KY(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=kY.doesSchemaExist(l),d=n[l]!==void 0,f=c?kY.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(cy.trace(`addNode creating schema: ${l}`),await qY.createSchema({operation:"create_schema",schema:l})),!f&&m){cy.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new qpe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await qY.createTable(h)}await ay.createLocalTableStream(l,c);let p=new KY(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(Kpe,"reviewSubscriptions")});var _f={};ye(_f,{addNodeBack:()=>fP,removeNodeBack:()=>mP,setNode:()=>jpe});async function jpe(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=Ri(t)):t=QT(r);let n=(0,zY.validateBySchema)(e,zpe);if(n)throw(0,fa.handleHDBError)(n,n.message,Wpe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new fa.ClientError("url or hostname is required for remove_node operation");let p=r,h=Ht(),E=await h.get(p);if(!E)throw new fa.ClientError(p+" does not exist");try{await Mh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?nt():p},void 0)}catch(g){Rs.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 fa.ClientError("url required for this operation");let s=dc();if(s==null)throw new fa.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ws.getReplicationCert)();let p=await(0,Ws.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ws.createCsr)(),Rs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,Rs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,Rc.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Rc.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Rc.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(WY):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=WY(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 Mh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,Rs.warn("Error adding node:",t,"to cluster:",p),d=p}if(o&&(!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)}`);o&&(Rs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ws.setCertTable)({name:Ype.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ws.setCertTable)({name:nt(),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,Rc.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,Rc.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await na(nt(),p)}await na(u?u.nodeName:f.name??Ri(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 fP(e){Rs.trace("addNodeBack received request:",e);let t=await(0,Ws.signCertificate)(e),r;e.csr?(r=t.signingCA,Rs.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,Rs.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,Ws.getReplicationCertAuth)();if(n.replicates){let i={url:dc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Rc.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Rc.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await na(nt(),i)}return await na(e.hostname,n),t.nodeName=nt(),t.usingCA=s?.certificate,Rs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function mP(e){Rs.trace("removeNodeBack received request:",e),await Ht().delete(e.name)}function WY(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ws,zY,yc,Rc,Rs,fa,Ype,Wpe,zpe,gf=se(()=>{Ws=b(ys()),zY=b(mt()),yc=b(require("joi")),Rc=b(me());H();Ih();Xd();Ss();Rs=b(J()),fa=b(_e()),{pki:Ype}=require("node-forge"),{HTTP_STATUS_CODES:Wpe}=fa.hdbErrors,zpe=yc.default.object({hostname:yc.default.string(),verify_tls:yc.default.boolean(),replicates:yc.default.boolean(),subscriptions:yc.default.array(),revoked_certificates:yc.default.array(),shard:yc.default.number()});a(jpe,"setNode");a(fP,"addNodeBack");a(mP,"removeNodeBack");a(WY,"reverseSubscription")});var my=M((QBe,QY)=>{"use strict";var{handleHDBError:ly,hdbErrors:Qpe}=_e(),{HTTP_STATUS_CODES:uy}=Qpe,{addUpdateNodeValidator:Jpe}=iy(),dy=J(),fy=(H(),v(z)),jY=Ct(),Xpe=oe(),Hh=hr(),Gh=da(),pP=me(),Zpe=dP(),{Node:ehe,NodeSubscription:the}=hf(),{broadcast:rhe}=st(),{setNode:nhe}=(gf(),v(_f)),zBe=me(),jBe=(H(),v(z)),she="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",ihe="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ohe=pP.get(fy.CONFIG_PARAMS.CLUSTERING_NODENAME);QY.exports=ahe;async function ahe(e,t=!1){if(dy.trace("addNode called with:",e),pP.get(fy.CONFIG_PARAMS.REPLICATION_URL)||pP.get(fy.CONFIG_PARAMS.REPLICATION_HOSTNAME))return nhe(e);Gh.checkClusteringEnabled();let r=Jpe(e);if(r)throw ly(r,r.message,uy.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Gh.getNodeRecord(n);if(!Xpe.isEmptyOrZeroLength(f))throw ly(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,uy.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await Zpe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=she,o;let c=Gh.buildNodePayloads(s,ohe,fy.OPERATIONS_ENUM.ADD_NODE,await Gh.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 the(p.schema,p.table,p.publish,p.subscribe))}dy.trace("addNode sending remote payload:",c);let u;try{u=await Hh.request(`${n}.${jY.REQUEST_SUFFIX}`,c)}catch(f){dy.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 ly(new Error,m,uy.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===jY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw ly(new Error,f,uy.INTERNAL_SERVER_ERROR,"error",f)}dy.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 ehe(n,l,u.system_info);return await Gh.upsertNodeRecord(d),rhe({type:"nats_update"}),i.length>0?o.message=ihe:o.message=`Successfully added '${n}' to manifest`,o}a(ahe,"addNode")});var gP=M((ZBe,XY)=>{"use strict";var{handleHDBError:hP,hdbErrors:che}=_e(),{HTTP_STATUS_CODES:EP}=che,{addUpdateNodeValidator:lhe}=iy(),qh=J(),py=(H(),v(z)),JY=Ct(),XBe=oe(),$h=hr(),Vh=da(),_P=me(),{cloneDeep:uhe}=require("lodash"),dhe=dP(),{Node:fhe,NodeSubscription:mhe}=hf(),{broadcast:phe}=st(),{setNode:hhe}=(gf(),v(_f)),Ehe="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",_he="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ghe=_P.get(py.CONFIG_PARAMS.CLUSTERING_NODENAME);XY.exports=She;async function She(e){if(qh.trace("updateNode called with:",e),_P.get(py.CONFIG_PARAMS.REPLICATION_URL)??_P.get(py.CONFIG_PARAMS.REPLICATION_HOSTNAME))return hhe(e);Vh.checkClusteringEnabled();let t=lhe(e);if(t)throw hP(t,t.message,EP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Vh.getNodeRecord(r);s.length>0&&(n=uhe(s));let{added:i,skipped:o}=await dhe(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Ehe,c;let l=Vh.buildNodePayloads(i,ghe,py.OPERATIONS_ENUM.UPDATE_NODE,await Vh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];qh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}qh.trace("updateNode sending remote payload:",l);let u;try{u=await $h.request(`${r}.${JY.REQUEST_SUFFIX}`,l)}catch(d){qh.error(`updateNode received error from request: ${d}`);let f=$h.requestErrorHandler(d,"update_node",r);throw hP(new Error,f,EP.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===JY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw hP(new Error,d,EP.INTERNAL_SERVER_ERROR,"error",d)}qh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await $h.updateRemoteConsumer(m,r),m.subscribe===!0?await $h.updateConsumerIterator(m.schema,m.table,r,"start"):await $h.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new fhe(r,[],u.system_info)]),await The(n[0],i,u.system_info),o.length>0?c.message=_he:c.message=`Successfully updated '${r}'`,c}a(She,"updateNode");async function The(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===o.schema&&d.table===o.table){d.publish=o.publish,d.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new mhe(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Vh.upsertNodeRecord(n),phe({type:"nats_update"})}a(The,"updateNodeTable")});var nW=M((tFe,rW)=>{"use strict";var tW=require("joi"),{string:ZY}=tW.types(),yhe=mt(),eW=(H(),v(z)),Rhe=me(),bhe=Ct();rW.exports=Ahe;function Ahe(e){let t=ZY.invalid(Rhe.get(eW.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(bhe.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=tW.object({operation:ZY.valid(eW.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return yhe.validateBySchema(e,r)}a(Ahe,"removeNodeValidator")});var hy=M((nFe,cW)=>{"use strict";var{handleHDBError:sW,hdbErrors:Ihe}=_e(),{HTTP_STATUS_CODES:iW}=Ihe,whe=nW(),Kh=J(),oW=da(),Nhe=oe(),Sf=(H(),v(z)),aW=Ct(),SP=hr(),TP=me(),{RemotePayloadObject:Che}=Bh(),{NodeSubscription:Ohe}=hf(),Phe=pp(),Lhe=Nl(),{broadcast:Dhe}=st(),{setNode:vhe}=(gf(),v(_f)),Mhe=TP.get(Sf.CONFIG_PARAMS.CLUSTERING_NODENAME);cW.exports=Uhe;async function Uhe(e){if(Kh.trace("removeNode called with:",e),TP.get(Sf.CONFIG_PARAMS.REPLICATION_URL)??TP.get(Sf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return vhe(e);oW.checkClusteringEnabled();let t=whe(e);if(t)throw sW(t,t.message,iW.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await oW.getNodeRecord(r);if(Nhe.isEmptyOrZeroLength(n))throw sW(new Error,`Node '${r}' was not found.`,iW.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Che(Sf.OPERATIONS_ENUM.REMOVE_NODE,Mhe,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await SP.updateConsumerIterator(d.schema,d.table,r,"stop");try{await SP.updateRemoteConsumer(new Ohe(d.schema,d.table,!1,!1),r)}catch(f){Kh.error(f)}}try{i=await SP.request(`${r}.${aW.REQUEST_SUFFIX}`,s),Kh.trace("Remove node reply from remote node:",r,i)}catch(l){Kh.error("removeNode received error from request:",l),o=!0}let c=new Phe(Sf.SYSTEM_SCHEMA_NAME,Sf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Lhe.deleteRecord(c),Dhe({type:"nats_update"}),i?.status===aW.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Kh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(Uhe,"removeNode")});var dW=M((iFe,uW)=>{"use strict";var lW=require("joi"),{string:xhe,array:Bhe}=lW.types(),Fhe=mt(),khe=iy();uW.exports=Hhe;function Hhe(e){let t=lW.object({operation:xhe.valid("configure_cluster").required(),connections:Bhe.items(khe.validationSchema).required()});return Fhe.validateBySchema(e,t)}a(Hhe,"configureClusterValidator")});var yP=M((aFe,EW)=>{"use strict";var fW=(H(),v(z)),Ey=J(),Ghe=oe(),qhe=me(),$he=hy(),Vhe=my(),Khe=da(),Yhe=dW(),{handleHDBError:mW,hdbErrors:Whe}=_e(),{HTTP_STATUS_CODES:pW}=Whe,zhe="Configure cluster complete.",jhe="Failed to configure the cluster. Check the logs for more details.",Qhe="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";EW.exports=Jhe;async function Jhe(e){Ey.trace("configure cluster called with:",e);let t=Yhe(e);if(t)throw mW(t,t.message,pW.BAD_REQUEST,void 0,void 0,!0);let r=await Khe.getAllNodeRecords(),n=[];if(qhe.get(fW.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await hW($he,{operation:fW.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}Ey.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 hW(Vhe,f,f.node_name);s.push(m)}Ey.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(Ey.error(m.node_name,m?.error?.message,m?.error?.stack),o.includes(m.node_name)||o.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(Ghe.isEmptyOrZeroLength(o))return{message:zhe,connections:c};if(l)return{message:Qhe,failed_nodes:o,connections:c};throw mW(new Error,jhe,pW.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Jhe,"configureCluster");async function hW(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(hW,"functionWrapper")});var TW=M((lFe,SW)=>{"use strict";var Yh=require("joi"),Xhe=mt(),{validateSchemaExists:_W,validateTableExists:Zhe,validateSchemaName:gW}=ji(),eEe=Yh.object({operation:Yh.string().valid("purge_stream"),schema:Yh.string().custom(_W).custom(gW).optional(),database:Yh.string().custom(_W).custom(gW).optional(),table:Yh.string().custom(Zhe).required()});function tEe(e){return Xhe.validateBySchema(e,eEe)}a(tEe,"purgeStreamValidator");SW.exports=tEe});var RP=M((dFe,yW)=>{"use strict";var{handleHDBError:rEe,hdbErrors:nEe}=_e(),{HTTP_STATUS_CODES:sEe}=nEe,iEe=TW(),oEe=hr(),aEe=da();yW.exports=cEe;async function cEe(e){e.schema=e.schema??e.database;let t=iEe(e);if(t)throw rEe(t,t.message,sEe.BAD_REQUEST,void 0,void 0,!0);aEe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await oEe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(cEe,"purgeStream")});var IP=M((mFe,OW)=>{"use strict";var AP=da(),lEe=hr(),gy=me(),Tf=(H(),v(z)),eu=Ct(),uEe=oe(),bP=J(),{RemotePayloadObject:dEe}=Bh(),{ErrorCode:RW}=require("nats"),{parentPort:bW}=require("worker_threads"),{onMessageByType:fEe}=st(),{getThisNodeName:mEe}=(Ss(),v(ia)),{requestClusterStatus:pEe}=(Ih(),v(h1)),{getReplicationSharedStatus:hEe,getHDBNodeTable:EEe}=(Xd(),v(c1)),{CONFIRMATION_STATUS_POSITION:_Ee,RECEIVED_VERSION_POSITION:AW,RECEIVED_TIME_POSITION:gEe,SENDING_TIME_POSITION:SEe,RECEIVING_STATUS_POSITION:TEe,RECEIVING_STATUS_RECEIVING:yEe,BACK_PRESSURE_RATIO_POSITION:REe}=(_O(),v(oK)),IW=gy.get(Tf.CONFIG_PARAMS.CLUSTERING_ENABLED),wW=gy.get(Tf.CONFIG_PARAMS.CLUSTERING_NODENAME);OW.exports={clusterStatus:bEe,buildNodeStatus:CW};var NW;fEe("cluster-status",async e=>{NW(e)});async function bEe(){if(gy.get(Tf.CONFIG_PARAMS.REPLICATION_URL)||gy.get(Tf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;bW?(bW.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{NW=i})):n=pEe();for(let i of n.connections){let o=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=hEe(u,l,o);c.lastCommitConfirmed=_y(d[_Ee]),c.lastReceivedRemoteTime=_y(d[AW]),c.lastReceivedLocalTime=_y(d[gEe]),c.lastReceivedVersion=d[AW],c.sendingMessage=_y(d[SEe]),c.backPressurePercent=d[REe]*100,c.lastReceivedStatus=d[TEe]===yEe?"Receiving":"Waiting"}}n.node_name=mEe();let s=EEe().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:wW,is_enabled:IW,connections:[]};if(!IW)return e;let t=await AP.getAllNodeRecords();if(uEe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(CW(t[n],e.connections));return await Promise.allSettled(r),e}a(bEe,"clusterStatus");function _y(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(_y,"asDate");async function CW(e,t){let r=e.name,n=new dEe(Tf.OPERATIONS_ENUM.CLUSTER_STATUS,wW,void 0,await AP.getSystemInfo()),s,i,o=eu.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await lEe.request(eu.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===eu.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=eu.CLUSTER_STATUS_STATUSES.CLOSED,bP.error(`Error getting node status from ${r} `,s))}catch(l){bP.warn(`Error getting node status from ${r}`,l),l.code===RW.NoResponders?o=eu.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===RW.Timeout?o=eu.CLUSTER_STATUS_STATUSES.TIMEOUT:o=eu.CLUSTER_STATUS_STATUSES.CLOSED}let c=new AEe(r,o,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!==Tf.PRE_4_0_0_VERSION&&await AP.upsertNodeRecord(l)}catch(l){bP.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(CW,"buildNodeStatus");function AEe(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(AEe,"NodeStatusObject")});var NP=M((hFe,PW)=>{"use strict";var{handleHDBError:IEe,hdbErrors:wEe}=_e(),{HTTP_STATUS_CODES:NEe}=wEe,CEe=hr(),OEe=da(),wP=oe(),Sy=require("joi"),PEe=mt(),LEe=2e3,DEe=Sy.object({timeout:Sy.number().min(1),connected_nodes:Sy.boolean(),routes:Sy.boolean()});PW.exports=vEe;async function vEe(e){OEe.checkClusteringEnabled();let t=PEe.validateBySchema(e,DEe);if(t)throw IEe(t,t.message,NEe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||wP.autoCastBoolean(n),o=s===void 0||wP.autoCastBoolean(s),c={nodes:[]},l=await CEe.getServerList(r??LEe),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))})),o&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:wP.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(vEe,"clusterNetwork")});var MW=M((_Fe,vW)=>{"use strict";var CP=require("joi"),LW=mt(),{routeConstraints:DW}=Vw();vW.exports={setRoutesValidator:MEe,deleteRoutesValidator:UEe};function MEe(e){let t=CP.object({server:CP.valid("hub","leaf"),routes:DW.required()});return LW.validateBySchema(e,t)}a(MEe,"setRoutesValidator");function UEe(e){let t=CP.object({routes:DW.required()});return LW.validateBySchema(e,t)}a(UEe,"deleteRoutesValidator")});var Ty=M((SFe,GW)=>{"use strict";var ma=gt(),OP=oe(),zs=(H(),v(z)),yf=me(),UW=MW(),{handleHDBError:xW,hdbErrors:xEe}=_e(),{HTTP_STATUS_CODES:BW}=xEe,FW="cluster routes successfully set",kW="cluster routes successfully deleted";GW.exports={setRoutes:FEe,getRoutes:kEe,deleteRoutes:HEe};function BEe(e){let t=ma.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 o=0,c=e.routes.length;o<c;o++){let l=e.routes[o];l.port=OP.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"?ma.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ma.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:FW,set:i,skipped:s}}a(BEe,"setRoutesNats");function FEe(e){let t=UW.setRoutesValidator(e);if(t)throw xW(t,t.message,BW.BAD_REQUEST,void 0,void 0,!0);if(yf.get(zs.CONFIG_PARAMS.CLUSTERING_ENABLED))return BEe(e);let r=[],n=[],s=yf.get(zs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{HW(s,i)?n.push(i):(s.push(i),r.push(i))}),ma.updateConfigValue(zs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:FW,set:r,skipped:n}}a(FEe,"setRoutes");function HW(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}a(HW,"existsInArray");function kEe(){if(yf.get(zs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ma.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return yf.get(zs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(kEe,"getRoutes");function HEe(e){let t=UW.deleteRoutesValidator(e);if(t)throw xW(t,t.message,BW.BAD_REQUEST,void 0,void 0,!0);if(yf.get(zs.CONFIG_PARAMS.CLUSTERING_ENABLED))return GEe(e);let r=[],n=[],s=yf.get(zs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{HW(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),ma.updateConfigValue(zs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:kW,deleted:r,skipped:n}}a(HEe,"deleteRoutes");function GEe(e){let t=ma.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!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,o=!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 o&&(r=OP.isEmptyOrZeroLength(r)?null:r,ma.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=OP.isEmptyOrZeroLength(n)?null:n,ma.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:kW,deleted:s,skipped:i}}a(GEe,"deleteRoutesNats")});var $W=M((yFe,qW)=>{"use strict";var qEe=Ct(),PP=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f,m,p,h){this.port=t,o===null&&(o=void 0),this.server_name=r+qEe.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:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};qW.exports=PP});var YW=M((bFe,KW)=>{"use strict";var VW=Ct(),LP=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+VW.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+VW.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:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};KW.exports=LP});var zW=M((IFe,WW)=>{"use strict";var DP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};WW.exports=DP});var QW=M((NFe,jW)=>{"use strict";var $Ee=Ct(),vP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+$Ee.SERVER_SUFFIX.ADMIN,this.password=r}};jW.exports=vP});var Ay=M((OFe,ZW)=>{"use strict";var tu=require("path"),ru=require("fs-extra"),VEe=$W(),KEe=YW(),YEe=zW(),WEe=QW(),MP=hs(),bf=oe(),jn=gt(),Ry=(H(),v(z)),Wh=Ct(),{CONFIG_PARAMS:or}=Ry,Af=J(),zh=me(),JW=ro(),UP=hr(),zEe=ys(),Rf="clustering",jEe=1e4,XW=50;ZW.exports={generateNatsConfig:JEe,removeNatsConfig:XEe,getHubConfigPath:QEe};function QEe(){let e=zh.get(or.ROOTPATH);return tu.join(e,Rf,Wh.NATS_CONFIG_FILES.HUB_SERVER)}a(QEe,"getHubConfigPath");async function JEe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=zh.get(or.ROOTPATH);ru.ensureDirSync(tu.join(r,"clustering","leaf")),zh.initSync();let n=jn.getConfigFromFile(or.CLUSTERING_TLS_CERT_AUTH),s=jn.getConfigFromFile(or.CLUSTERING_TLS_PRIVATEKEY),i=jn.getConfigFromFile(or.CLUSTERING_TLS_CERTIFICATE);!await ru.exists(i)&&!await ru.exists(!n)&&await zEe.createNatsCerts();let o=tu.join(r,Rf,Wh.PID_FILES.HUB),c=tu.join(r,Rf,Wh.PID_FILES.LEAF),l=jn.getConfigFromFile(or.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=tu.join(r,Rf,Wh.NATS_CONFIG_FILES.HUB_SERVER),d=tu.join(r,Rf,Wh.NATS_CONFIG_FILES.LEAF_SERVER),f=jn.getConfigFromFile(or.CLUSTERING_TLS_INSECURE),m=jn.getConfigFromFile(or.CLUSTERING_TLS_VERIFY),p=jn.getConfigFromFile(or.CLUSTERING_NODENAME),h=jn.getConfigFromFile(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await UP.checkNATSServerInstalled()||by("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await MP.listUsers(),g=jn.getConfigFromFile(or.CLUSTERING_USER),R=await MP.getClusterUser();(bf.isEmpty(R)||R.active!==!0)&&by(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await yy(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await yy(or.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await yy(or.CLUSTERING_HUBSERVER_NETWORK_PORT),await yy(or.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[j,Y]of E.entries())Y.role?.role===Ry.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new WEe(Y.username,JW.decrypt(Y.hash))),y.push(new YEe(Y.username,JW.decrypt(Y.hash))));let N=[],{hub_routes:I}=jn.getClusteringRoutes();if(!bf.isEmptyOrZeroLength(I))for(let j of I)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${j.host}:${j.port}`);let $=new VEe(jn.getConfigFromFile(or.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,jn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NAME),jn.getConfigFromFile(or.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,S,y);n==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=bf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===Ry.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ru.writeJson(u,$),Af.trace(`Hub server config written to ${u}`));let ee=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,G=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new KEe(jn.getConfigFromFile(or.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[ee],[G],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===Ry.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ru.writeJson(d,k),Af.trace(`Leaf server config written to ${d}`))}a(JEe,"generateNatsConfig");async function yy(e){let t=zh.get(e);return bf.isEmpty(t)&&by(`port undefined for '${e}'`),await bf.isPortTaken(t)&&by(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(yy,"isPortAvailable");function by(e){let t=`Error generating clustering config: ${e}`;Af.error(t),console.error(t),process.exit(1)}a(by,"generateNatsConfigError");async function XEe(e){let{port:t,config_file:r}=UP.getServerConfig(e),{username:n,decrypt_hash:s}=await MP.getClusterUser(),i=0,o=2e3;for(;i<XW;){try{let d=await UP.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Af.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=XW)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=o*(i*2);u>3e4&&Af.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await bf.asyncSetTimeout(u)}let c="0".repeat(jEe),l=tu.join(zh.get(or.ROOTPATH),Rf,r);await ru.writeFile(l,c),await ru.remove(l),Af.notify(e,"started.")}a(XEe,"removeNatsConfig")});var iz=M((LFe,sz)=>{"use strict";var bs=me(),et=(H(),v(z)),jh=Ct(),pa=require("path"),{PACKAGE_ROOT:wy}=yt(),ez=me(),Iy=oe(),If="/dev/null",ZEe=pa.join(wy,"launchServiceScripts"),tz=pa.join(wy,"utility/scripts"),e_e=pa.join(tz,et.HDB_RESTART_SCRIPT),rz=pa.resolve(wy,"dependencies",`${process.platform}-${process.arch}`,jh.NATS_BINARY_NAME);function nz(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return Iy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Iy.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:wy}}a(nz,"generateMainServerConfig");var t_e=9930;function r_e(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=pa.join(e,"clustering",jh.NATS_CONFIG_FILES.HUB_SERVER),r=pa.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=ez.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=jh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==t_e?"-"+n:""),binFile:rz,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}a(r_e,"generateNatsHubServerConfig");var n_e=9940;function s_e(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=pa.join(e,"clustering",jh.NATS_CONFIG_FILES.LEAF_SERVER),r=pa.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=ez.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=jh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==n_e?"-"+n:""),binFile:rz,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}a(s_e,"generateNatsLeafServerConfig");function i_e(){bs.initSync();let e=pa.join(bs.get(et.CONFIG_PARAMS.LOGGING_ROOT),et.LOG_NAMES.HDB),t={name:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:ZEe,autorestart:!1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=If,t.error_file=If),t}a(i_e,"generateClusteringUpgradeV4ServiceConfig");function o_e(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return Iy.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Iy.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:tz},script:e_e}}a(o_e,"generateRestart");function a_e(){return{apps:[nz()]}}a(a_e,"generateAllServiceConfigs");sz.exports={generateAllServiceConfigs:a_e,generateMainServerConfig:nz,generateRestart:o_e,generateNatsHubServerConfig:r_e,generateNatsLeafServerConfig:s_e,generateClusteringUpgradeV4ServiceConfig:i_e}});var wf=M((MFe,fz)=>{"use strict";var Lr=(H(),v(z)),vFe=oe(),Ea=Ay(),Ny=hr(),ha=Ct(),bc=iz(),BP=me(),Ac=J(),c_e=da(),{startWorker:oz,onMessageFromWorkers:l_e}=st(),az=require("fs"),u_e=require("node:path"),d_e=(H(),v(z)),{setTimeout:f_e}=require("node:timers/promises"),{execFile:m_e,fork:p_e}=require("node:child_process");fz.exports={start:Ic,restart:E_e,kill:T_e,startAllServices:y_e,startService:lz,restartHdb:__e,startClusteringProcesses:uz,startClusteringThreads:dz,isHdbRestartRunning:g_e,getHdbPid:S_e,cleanupChildrenProcesses:Qh,reloadClustering:b_e,expectedRestartOfChildren:cz};l_e(e=>{e.type==="restart"&&BP.initSync(!0)});var go=[],h_e=10,xP;function Ic(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?p_e(e.script,r,e):m_e(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(o,c)=>{console.error(o,c)}),n.on("exit",async o=>{let c=go.indexOf(n);c>-1&&go.splice(c,1),!xP&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<h_e&&(az.existsSync(Ea.getHubConfigPath())?Ic(e):(await Ea.generateNatsConfig(!0),Ic(e),await new Promise(l=>setTimeout(l,3e3)),await Ea.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ea.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=BP.get(Lr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&ha.LOG_LEVEL_HIERARCHY[c]>=ha.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===ha.LOG_LEVELS.ERR||f===ha.LOG_LEVELS.WRN?Ac.OUTPUTS.STDERR:Ac.OUTPUTS.STDOUT;Ac.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=ha.LOG_LEVELS[p]}if(ha.LOG_LEVEL_HIERARCHY[c]>=ha.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===ha.LOG_LEVELS.ERR||f===ha.LOG_LEVELS.WRN?Ac.OUTPUTS.STDERR:Ac.OUTPUTS.STDOUT;Ac.logCustomLevel(f||"info",m,s,o.toString().slice(d).trim())}}a(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),go.length===0&&(t||(process.on("exit",Qh),process.on("SIGINT",Qh),process.on("SIGQUIT",Qh),process.on("SIGTERM",Qh))),go.push(n)}a(Ic,"start");function Qh(e=!0){if(!xP&&(xP=!0,go.length!==0))if(Ac.info("Killing child processes..."),go.map(t=>t.kill()),e)process.exit(0);else return f_e(2e3)}a(Qh,"cleanupChildrenProcesses");function E_e(e){cz();for(let t of go)t.name===e&&t.kill()}a(E_e,"restart");function cz(){for(let e of go)e.config&&(e.config.restarts=0)}a(cz,"expectedRestartOfChildren");async function __e(){await Ic(bc.generateRestart())}a(__e,"restartHdb");async function g_e(){let e=await list();for(let t in e)if(e[t].name===Lr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(g_e,"isHdbRestartRunning");function S_e(){let e=BP.getHdbBasePath();if(!e)return;let t=u_e.join(e,d_e.HDB_PID_FILE),r=A_e(t);if(!(!r||r===process.pid)&&I_e(r))return r}a(S_e,"getHdbPid");function T_e(){for(let e of go)e.kill();go=[]}a(T_e,"kill");async function y_e(){await uz(),await dz(),await Ic(bc.generateAllServiceConfigs())}a(y_e,"startAllServices");async function lz(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Lr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=bc.generateMainServerConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=bc.generateNatsIngestServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=bc.generateNatsReplyServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=bc.generateNatsHubServerConfig(),await Ic(r,t),await Ea.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=bc.generateNatsLeafServerConfig(),await Ic(r,t),await Ea.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=bc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Ic(r,t)}a(lz,"startService");var R_e;async function uz(e=!1){for(let t in Lr.CLUSTERING_PROCESSES){let r=Lr.CLUSTERING_PROCESSES[t];await lz(r,e)}}a(uz,"startClusteringProcesses");async function dz(){R_e=oz(Lr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Ny.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Ny.updateLocalStreams();let e=await c_e.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Lr.PRE_4_0_0_VERSION){Ac.info("Starting clustering upgrade 4.0.0 process"),oz(Lr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(dz,"startClusteringThreads");async function b_e(){await Ea.generateNatsConfig(!0),await Ny.reloadNATSHub(),await Ny.reloadNATSLeaf(),await Ea.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ea.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(b_e,"reloadClustering");function A_e(e){try{return Number.parseInt(az.readFileSync(e,"utf8"),10)}catch{return null}}a(A_e,"readPidFile");function I_e(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(I_e,"isProcessRunning")});var HP={};ye(HP,{compactOnStart:()=>w_e,copyDb:()=>gz});async function w_e(){wc.notify("Running compact on start"),console.log("Running compact on start");let e=(0,FP.get)(F.ROOTPATH),t=new Map,r=ct();(0,kP.updateConfigValue)(F.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,Cy.join)(e,"backup",n+".mdb"),o=(0,Cy.join)(e,jc,n+"-copy.mdb"),c=0;try{c=await mz(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){wc.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:o,backupDest:i,recordCount:c}),await gz(n,o),console.log("Backing up",n,"to",i);try{await(0,nu.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Od()}catch(n){wc.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,nu.move)(i,s,{overwrite:!0}),await(0,nu.remove)((0,Cy.join)(e,jc,`${n}-copy.mdb-lock`));try{Od()}catch(n){wc.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){wc.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,kP.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,nu.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Od(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=!0,c=await mz(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
25
25
|
Total record count before compaction: ${i}, total after: ${c}.
|