harperdb 4.4.21 → 4.4.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,32 +1,32 @@
1
- "use strict";var QW=Object.create;var Ud=Object.defineProperty;var JW=Object.getOwnPropertyDescriptor;var XW=Object.getOwnPropertyNames;var ZW=Object.getPrototypeOf,ej=Object.prototype.hasOwnProperty;var a=(e,t)=>Ud(e,"name",{value:t,configurable:!0});var Ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var N=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)Ud(e,r,{get:t[r],enumerable:!0})},vw=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of XW(t))!ej.call(e,s)&&s!==r&&Ud(e,s,{get:()=>t[s],enumerable:!(n=JW(t,s))||n.enumerable});return e};var L=(e,t,r)=>(r=e!=null?QW(ZW(e)):{},vw(t||!e||!e.__esModule?Ud(r,"default",{value:e,enumerable:!0}):r,e)),oe=e=>vw(Ud({},"__esModule",{value:!0}),e);var xw=N((age,Hw)=>{var tj=require("fast-glob"),{statSync:sg,existsSync:ig,readFileSync:rj,writeFileSync:nj}=require("fs"),{spawnSync:sj,spawn:ij,execFileSync:oge}=require("child_process"),{isMainThread:oj}=require("worker_threads"),{join:ko,relative:Bw}=require("path"),{PACKAGE_ROOT:Bs}=M(),{tmpdir:aj,platform:cj}=require("os");require("source-map-support").install();var lj=["resources","server","dataLayer","components"],vd="ts-build",og,uj=__filename.endsWith("tsBuild.js");if(uj){if(oj){let r;try{sg(ko(Bs,vd)),r=!0}catch{}if(r)for(let n of tj.sync(lj.map(s=>s+"/**/*.ts"),{cwd:Bs})){let s=0,i=0;try{s=sg(ko(Bs,n)).mtimeMs-5e3,i=sg(ko(Bs,vd,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),og=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),og=!0;if(og){let n=ko(Bs,"node_modules/.bin/tsc");cj()==="win32"&&(n+=".cmd");let s=sj(n,{cwd:Bs});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=ko(aj(),"harperdb-tsc.pid"),o;if(ig(i))try{process.kill(+rj(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=ij(n,["--watch"],{cwd:Bs,detached:!0,stdio:"ignore"});nj(i,c.pid.toString()),c.unref()}}}}let e=Hw.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Bs)&&!n[0].includes("node_modules")){let i=Bw(Bs,n[0]),o;i.startsWith(vd)?o=ko(Bs,Bw(vd,i)):o=ko(Bs,vd,i);let c=ko(o,r),l=c+".js";if(ig(l))return l;if(c.includes(".")&&ig(c))return c}return t(r,n,s)}}});var M=N((uge,Xw)=>{"use strict";var is=require("path"),dj=require("fs"),{relative:cge,join:lge}=is,{existsSync:_j}=dj;function fj(){let e=__dirname;for(;!_j(is.join(e,"package.json"));){let t=is.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(fj,"getHDBPackageRoot");var Fo=fj(),kw="js",JE=kw,Ej="harperdb-config.yaml",hj="defaultConfig.yaml",pj="hdb",Fw=`harperdb.${JE}`,Gw=`customFunctionsServer.${JE}`,mj=`restartHdb.${JE}`,cg="HarperDB",QE="Custom Functions",XE="Clustering Hub",ZE="Clustering Leaf",Sj="Clustering Ingest Service",Tj="Clustering Reply Service",gj="foreground.pid",Aj="hdb.pid",Rj="data",yj={HDB:cg,CLUSTERING_HUB:XE,CLUSTERING_LEAF:ZE,CLUSTERING_INGEST_SERVICE:Sj,CLUSTERING_REPLY_SERVICE:Tj,CUSTOM_FUNCTIONS:QE,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"},bj={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Oj={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Nj={harperdb:cg,"clustering hub":XE,"clustering leaf":ZE,"custom functions":QE,custom_functions:QE,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},Ij={CLUSTERING_HUB_PROC_DESCRIPTOR:XE,CLUSTERING_LEAF_PROC_DESCRIPTOR:ZE},ag={HDB:is.join(Fo,"server/harperdb"),CUSTOM_FUNCTIONS:is.join(Fo,"server/customFunctions"),CLUSTERING_HUB:is.join(Fo,"server/nats"),CLUSTERING_LEAF:is.join(Fo,"server/nats")},wj={HDB:is.join(ag.HDB,Fw),CUSTOM_FUNCTIONS:is.join(ag.CUSTOM_FUNCTIONS,Gw)},Cj={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:is.join(Fo,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:is.join(Fo,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:is.join(Fo,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Dj={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},qw="support@harperdb.io",Pj="customer-success@harperdb.io",$w=1,Lj=4141,Vw="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Mj="https://www.harperdb.io/product",Uj=`For support, please submit a request at ${Vw} or contact ${qw}`,Kw=`For license support, please contact ${Pj}`,vj="None of the specified records were found.",Bj="hash attribute not found",Hj=`Your current license only supports ${$w} role. ${Kw}`,xj="Your current license only supports 3 connections to a node.",kj="127.0.0.1",Fj=1,Gj=/^\.$/,qj=/^\.\.$/,$j="U+002E",Vj=/\//g,Kj="U+002F",Yj=/U\+002F/g,Wj=/^U\+002E$/,jj=/^U\+002EU\+002E$/,zj="d",Qj=999999,Jj="*",Xj="--max-old-space-size=",Zj="system",ez="__hdb_hash",tz=".harperdb",rz=".hdb",nz="keys",sz="hdb_boot_properties.file",iz=".updateConfig.json",oz="SIGTSTP",az=24,cz=6e4,lz=448,uz="blob",dz="database",_z="schema",fz="transactions",Ez=".count",hz="id",pz="PROCESS_NAME",Yw={SETTINGS_PATH_KEY:"settings_path"},Ww=require("lodash"),mz={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"},Sz={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},Tz={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gz={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"},Az={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Cn="hdb_internal:",Rz={CREATE_SCHEMA:Cn+"create_schema",CREATE_TABLE:Cn+"create_table",CREATE_ATTRIBUTE:Cn+"create_attribute",ADD_USER:Cn+"add_user",ALTER_USER:Cn+"alter_user",DROP_USER:Cn+"drop_user",HDB_NODES:Cn+"hdb_nodes",HDB_USERS:Cn+"hdb_users",HDB_WORKERS:Cn+"hdb_workers",CATCHUP:Cn+"catchup",SCHEMA_CATCHUP:Cn+"schema_catchup",WORKER_ROOM:Cn+"cluster_workers"},yz={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"},bz="060493.ks",Oz=".license",Nz={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},le={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",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"},Iz={CSV:".csv",JSON:".json"},wz={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Cz={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Bd={};Bd[le.INSERT]=le.INSERT;Bd[le.UPDATE]=le.UPDATE;Bd[le.UPSERT]=le.UPSERT;Bd[le.DELETE]=le.DELETE;var nt=Object.create(null);nt[le.DESCRIBE_ALL]=le.DESCRIBE_ALL;nt[le.DESCRIBE_TABLE]=le.DESCRIBE_TABLE;nt[le.DESCRIBE_SCHEMA]=le.DESCRIBE_SCHEMA;nt[le.READ_LOG]=le.READ_LOG;nt[le.ADD_NODE]=le.ADD_NODE;nt[le.LIST_USERS]=le.LIST_USERS;nt[le.LIST_ROLES]=le.LIST_ROLES;nt[le.USER_INFO]=le.USER_INFO;nt[le.SQL]=le.SQL;nt[le.GET_JOB]=le.GET_JOB;nt[le.SEARCH_JOBS_BY_START_DATE]=le.SEARCH_JOBS_BY_START_DATE;nt[le.DELETE_FILES_BEFORE]=le.DELETE_FILES_BEFORE;nt[le.EXPORT_LOCAL]=le.EXPORT_LOCAL;nt[le.EXPORT_TO_S3]=le.EXPORT_TO_S3;nt[le.CLUSTER_STATUS]=le.CLUSTER_STATUS;nt[le.REMOVE_NODE]=le.REMOVE_NODE;nt[le.RESTART]=le.RESTART;nt[le.CUSTOM_FUNCTIONS_STATUS]=le.CUSTOM_FUNCTIONS_STATUS;nt[le.GET_CUSTOM_FUNCTIONS]=le.GET_CUSTOM_FUNCTIONS;nt[le.GET_CUSTOM_FUNCTION]=le.GET_CUSTOM_FUNCTION;nt[le.SET_CUSTOM_FUNCTION]=le.SET_CUSTOM_FUNCTION;nt[le.DROP_CUSTOM_FUNCTION]=le.DROP_CUSTOM_FUNCTION;nt[le.ADD_CUSTOM_FUNCTION_PROJECT]=le.ADD_CUSTOM_FUNCTION_PROJECT;nt[le.DROP_CUSTOM_FUNCTION_PROJECT]=le.DROP_CUSTOM_FUNCTION_PROJECT;nt[le.PACKAGE_CUSTOM_FUNCTION_PROJECT]=le.PACKAGE_CUSTOM_FUNCTION_PROJECT;nt[le.DEPLOY_CUSTOM_FUNCTION_PROJECT]=le.DEPLOY_CUSTOM_FUNCTION_PROJECT;nt[le.ADD_SSH_KEY]=le.ADD_SSH_KEY;nt[le.UPDATE_SSH_KEY]=le.UPDATE_SSH_KEY;nt[le.DELETE_SSH_KEY]=le.DELETE_SSH_KEY;var Dz={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},Pz={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},jw={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"},Lz=Ww.invert(jw),Mz={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"},P={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_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_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_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_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_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_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",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_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",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"},zw={settings_path:Yw.SETTINGS_PATH_KEY,hdb_root_key:P.ROOTPATH,hdb_root:P.ROOTPATH,rootpath:P.ROOTPATH,server_port_key:P.OPERATIONSAPI_NETWORK_PORT,server_port:P.OPERATIONSAPI_NETWORK_PORT,cert_key:P.TLS_CERTIFICATE,certificate:P.TLS_CERTIFICATE,private_key_key:P.TLS_PRIVATEKEY,private_key:P.TLS_PRIVATEKEY,http_secure_enabled_key:P.OPERATIONSAPI_NETWORK_HTTPS,https_on:P.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:P.OPERATIONSAPI_NETWORK_CORS,cors_on:P.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:P.LOGGING_LEVEL,log_level:P.LOGGING_LEVEL,log_path_key:P.LOGGING_ROOT,log_path:P.LOGGING_ROOT,clustering_node_name_key:P.CLUSTERING_NODENAME,node_name:P.CLUSTERING_NODENAME,clustering_enabled_key:P.CLUSTERING_ENABLED,clustering:P.CLUSTERING_ENABLED,max_http_threads:P.THREADS_COUNT,max_hdb_processes:P.THREADS_COUNT,server_timeout_key:P.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:P.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:P.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:P.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:P.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:P.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:P.LOGGING_AUDITLOG,disable_transaction_log:P.LOGGING_AUDITLOG,operation_token_timeout_key:P.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:P.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:P.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:P.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:P.HTTP_PORT,custom_functions_port:P.HTTP_PORT,custom_functions_directory_key:P.COMPONENTSROOT,custom_functions_directory:P.COMPONENTSROOT,max_custom_function_processes:P.THREADS_COUNT,logging_console:P.LOGGING_CONSOLE,log_to_file:P.LOGGING_FILE,log_to_stdstreams:P.LOGGING_STDSTREAMS,local_studio_on:P.LOCALSTUDIO_ENABLED,clustering_port:P.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:P.CLUSTERING_USER,clustering_enabled:P.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:P.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:P.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:P.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:P.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:P.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:P.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:P.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:P.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:P.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:P.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:P.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:P.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:P.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:P.CLUSTERING_NODENAME,clustering_tls_certificate:P.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:P.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:P.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:P.CLUSTERING_TLS_INSECURE,clustering_tls_verify:P.CLUSTERING_TLS_VERIFY,clustering_loglevel:P.CLUSTERING_LOGLEVEL,clustering_republishmessages:P.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:P.CLUSTERING_DATABASELEVEL,customfunctions_network_port:P.HTTP_PORT,customfunctions_tls_certificate:P.TLS_CERTIFICATE,customfunctions_network_cors:P.HTTP_CORS,customfunctions_network_corsaccesslist:P.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:P.HTTP_HEADERSTIMEOUT,customfunctions_network_https:P.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:P.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:P.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:P.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:P.HTTP_TIMEOUT,customfunctions_tls:P.TLS,http_threads:P.THREADS_COUNT,threads:P.THREADS_COUNT,threads_count:P.THREADS_COUNT,threads_debug:P.THREADS_DEBUG,threads_debug_startingport:P.THREADS_DEBUG_STARTINGPORT,threads_debug_port:P.THREADS_DEBUG_PORT,threads_debug_host:P.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:P.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:P.THREADS_MAXHEAPMEMORY,http_session_affinity:P.HTTP_SESSIONAFFINITY,http_compressionthreshold:P.HTTP_COMPRESSIONTHRESHOLD,http_cors:P.HTTP_CORS,http_corsaccesslist:P.HTTP_CORSACCESSLIST,http_headerstimeout:P.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:P.HTTP_KEEPALIVETIMEOUT,http_maxparamlength:P.HTTP_MAXPARAMLENGTH,http_timeout:P.HTTP_TIMEOUT,http_port:P.HTTP_PORT,http_secureport:P.HTTP_SECUREPORT,http_mtls:P.HTTP_MTLS,http_mtls_user:P.HTTP_MTLS_USER,http_mtls_required:P.HTTP_MTLS_REQUIRED,http_maxheadersize:P.HTTP_MAXHEADERSIZE,http_threadrange:P.HTTP_THREADRANGE,customfunctions_processes:P.THREADS_COUNT,customfunctions_root:P.COMPONENTSROOT,localstudio_enabled:P.LOCALSTUDIO_ENABLED,logging_file:P.LOGGING_FILE,logging_level:P.LOGGING_LEVEL,logging_root:P.LOGGING_ROOT,logging_rotation_enabled:P.LOGGING_ROTATION_ENABLED,logging_rotation_compress:P.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:P.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:P.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:P.LOGGING_ROTATION_PATH,logging_stdstreams:P.LOGGING_STDSTREAMS,logging_auditlog:P.LOGGING_AUDITLOG,logging_auditretention:P.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:P.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:P.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:P.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:P.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:P.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:P.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:P.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:P.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:P.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:P.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:P.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:P.OPERATIONSAPI_TLS,operationsapi_tls_certificate:P.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:P.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:P.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:P.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:P.ROOTPATH,operationsapi_sysinfo_network:P.OPERATIONSAPI_SYSINFO_NETWORK,operationsapi_sysinfo_disk:P.OPERATIONSAPI_SYSINFO_DISK,databases:P.DATABASES,storage_path:P.STORAGE_PATH,storage_maxtransactionqueuetime:P.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:P.IGNORE_SCRIPTS,mqtt_network_port:P.MQTT_NETWORK_PORT,mqtt_websocket:P.MQTT_WEBSOCKET,mqtt_network_secureport:P.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:P.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:P.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:P.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:P.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:P.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:P.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:P.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:P.AUTHENTICATION_CACHETTL,authentication_enablesessions:P.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:P.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:P.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:P.COMPONENTSROOT,replication:P.REPLICATION,replication_port:P.REPLICATION_PORT,replication_secureport:P.REPLICATION_SECUREPORT,replication_hostname:P.REPLICATION_HOSTNAME,replication_url:P.REPLICATION_URL,replication_routes:P.REPLICATION_ROUTES,replication_enablerootcas:P.REPLICATION_ENABLEROOTCAS,replication_databases:P.REPLICATION_DATABASES,replication_copytablestocatchup:P.REPLICATION_COPYTABLESTOCATCHUP,tls:P.TLS,tls_certificate:P.TLS_CERTIFICATE,tls_privatekey:P.TLS_PRIVATEKEY,tls_certificateauthority:P.TLS_CERTIFICATEAUTHORITY,tls_ciphers:P.TLS_CIPHERS};for(let e in P){let t=P[e];zw[t.toLowerCase()]=t}var Uz={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},vz={csv_file_load:"csv_file_load",csv_data_load:le.CSV_DATA_LOAD,csv_url_load:le.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"},Bz={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"},Hz={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},xz={VERSION_DEFAULT:"2.2.0"},kz={DEVELOPMENT:8192,DEFAULT:512},Fz={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},Gz={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},qz={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Qw={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},$z=Symbol("metadata"),Vz="__clustering__",Kz=Object.values(Qw),Yz=15984864e5,Jw={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Wz=Ww.invert(Jw),jz={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},zz=111,Qz=`\r
2
- `,Jz={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Xz=["*","%"],Zz="unauthorized_access",eQ="func_val",tQ={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rQ={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},nQ={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"},sQ={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iQ={HTTP:"http"},oQ={STOPPED:"stopped",ONLINE:"online"},aQ="3.x.x",cQ={SUCCESS:"success",FAILURE:"failure"},lQ={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Xw.exports={LOCAL_HARPERDB_OPERATIONS:nt,HDB_SUPPORT_ADDRESS:qw,HDB_SUPPORT_URL:Vw,HDB_PRICING_URL:Mj,SUPPORT_HELP_MSG:Uj,LICENSE_HELP_MSG:Kw,HDB_PROC_NAME:Fw,HDB_PROC_DESCRIPTOR:cg,CLUSTERING_LEAF_PROC_DESCRIPTOR:ZE,CLUSTERING_HUB_PROC_DESCRIPTOR:XE,SYSTEM_SCHEMA_NAME:Zj,HASH_FOLDER_NAME:ez,HDB_HOME_DIR_NAME:tz,UPDATE_FILE_NAME:iz,LICENSE_KEY_DIR_NAME:nz,BOOT_PROPS_FILE_NAME:sz,JOB_TYPE_ENUM:vz,JOB_STATUS_ENUM:Nz,SYSTEM_TABLE_NAMES:gz,SYSTEM_TABLE_HASH_ATTRIBUTES:Az,OPERATIONS_ENUM:le,VALID_S3_FILE_TYPES:Iz,S3_BUCKET_AUTH_KEYS:wz,VALID_SQL_OPS_ENUM:Cz,GEO_CONVERSION_ENUM:Pz,HDB_SETTINGS_NAMES:jw,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Lz,SERVICE_ACTIONS_ENUM:Dz,CLUSTER_MESSAGE_TYPE_ENUM:Bz,CLUSTER_CONNECTION_DIRECTION_ENUM:Hz,CLUSTER_EVENTS_DEFS_ENUM:Fz,PERIOD_REGEX:Gj,DOUBLE_PERIOD_REGEX:qj,UNICODE_PERIOD:$j,FORWARD_SLASH_REGEX:Vj,UNICODE_FORWARD_SLASH:Kj,ESCAPED_FORWARD_SLASH_REGEX:Yj,ESCAPED_PERIOD_REGEX:Wj,ESCAPED_DOUBLE_PERIOD_REGEX:jj,REG_KEY_FILE_NAME:bz,RESTART_TIMEOUT_MS:cz,HDB_FILE_PERMISSIONS:lz,DATABASES_DIR_NAME:dz,LEGACY_DATABASES_DIR_NAME:_z,TRANSACTIONS_DIR_NAME:fz,LIMIT_COUNT_NAME:Ez,ID_ATTRIBUTE_STRING:hz,INSERT_MODULE_ENUM:Sz,UPGRADE_JSON_FIELD_NAMES_ENUM:Tz,RESTART_CODE:oz,RESTART_CODE_NUM:az,CLUSTER_OPERATIONS:Bd,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:yz,HDB_INTERNAL_SC_CHANNEL_PREFIX:Cn,INTERNAL_SC_CHANNELS:Rz,CLUSTERING_MESSAGE_TYPES:jz,HDB_FILE_SUFFIX:rz,BLOB_FOLDER_NAME:uz,ORIGINATOR_SET_VALUE:zz,LICENSE_VALUES:xz,RAM_ALLOCATION_ENUM:kz,TIME_STAMP_NAMES_ENUM:Qw,TIME_STAMP_NAMES:Kz,PERMS_UPDATE_RELEASE_TIMESTAMP:Yz,SEARCH_NOT_FOUND_MESSAGE:vj,SEARCH_ATTRIBUTE_NOT_FOUND:Bj,LICENSE_ROLE_DENIED_RESPONSE:Hj,LICENSE_MAX_CONNS_REACHED:xj,BASIC_LICENSE_MAX_NON_CU_ROLES:$w,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Lj,VALUE_SEARCH_COMPARATORS:Jw,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Wz,LICENSE_FILE_NAME:Oz,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Gz,NEW_LINE:Qz,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Fj,MOMENT_DAYS_TAG:zj,API_TURNOVER_SEC:Qj,LOOPBACK:kj,CODE_EXTENSION:JE,WILDCARD_SEARCH_VALUE:Jj,NODE_ERROR_CODES:qz,JAVASCRIPT_EXTENSION:kw,PERMS_CRUD_ENUM:Jz,UNAUTHORIZED_PERMISSION_NAME:Zz,SEARCH_WILDCARDS:Xz,FUNC_VAL:eQ,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:tQ,JWT_ENUM:rQ,CLUSTERING_FLAG:Vz,ITC_EVENT_TYPES:nQ,CUSTOM_FUNCTION_PROC_NAME:Gw,CUSTOM_FUNCTION_PROC_DESCRIPTOR:QE,SERVICES:sQ,THREAD_TYPES:iQ,MEM_SETTING_KEY:Xj,HDB_RESTART_SCRIPT:mj,PROCESS_DESCRIPTORS:yj,SERVICE_SERVERS:wj,SERVICE_SERVERS_CWD:ag,PROCESS_DESCRIPTORS_VALIDATE:Nj,LAUNCH_SERVICE_SCRIPTS:Cj,LOG_LEVELS:Oj,PROCESS_NAME_ENV_PROP:pz,LOG_NAMES:bj,PM2_PROCESS_STATUSES:oQ,CONFIG_PARAM_MAP:zw,CONFIG_PARAMS:P,HDB_CONFIG_FILE:Ej,HDB_DEFAULT_CONFIG_FILE:hj,ROLE_TYPES_ENUM:Dj,BOOT_PROP_PARAMS:Yw,INSTALL_PROMPTS:mz,HDB_ROOT_DIR_NAME:pj,CLUSTERING_PROCESSES:Ij,FOREGROUND_PID_FILE:gj,PACKAGE_ROOT:Fo,PRE_4_0_0_VERSION:aQ,DATABASES_PARAM_CONFIG:Uz,METADATA_PROPERTY:$z,AUTH_AUDIT_STATUS:cQ,AUTH_AUDIT_TYPES:lQ,HDB_PID_FILE:Aj,DEFAULT_DATABASE_NAME:Rj,LEGACY_CONFIG_PARAMS:Mz};xw()});var Wa=N((_ge,tC)=>{"use strict";var Zw=require("minimist");tC.exports=uQ;function uQ(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=eC(process.env),n=eC(Zw(process.argv))):(r=process.env,n=Zw(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(uQ,"assignCMDENVVariables");function eC(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(eC,"objKeysToLowerCase")});var _i=N(di=>{"use strict";global.Resource=di.Resource=void 0;global.tables=di.tables={};global.databases=di.databases={};global.getUser=di.getUser=void 0;global.server=di.server={};global.contentTypes=di.contentTypes=null;global.threads=di.threads=[];global.logger={};di._assignPackageExport=(e,t)=>{global[e]=di[e]=t}});var j=N((pC,mC)=>{"use strict";var Wi=require("fs-extra"),{workerData:dQ,threadId:_Q,isMainThread:fQ}=require("worker_threads"),Ei=require("path"),iC=require("yaml"),oC=require("properties-reader"),Wt=M(),rC=Wa(),EQ=require("os"),{PACKAGE_ROOT:_g}=M(),{_assignPackageExport:hQ}=_i(),nC=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},aC={STDOUT:"stdOut",STDERR:"stdErr"},pQ=Ei.join(_g,"logs"),mQ=Ei.join(_g,"config/yaml/",Wt.HDB_DEFAULT_CONFIG_FILE),SQ=1e4,lg,fi,os,wr,eh,Hd,th,Go,xd;xd===void 0&&cC();Object.assign(pC,{notify:fC,fatal:EC,error:rh,warn:hC,info:uC,debug:_C,trace:dC,setLogLevel:NQ,log_level:wr,loggerWithTag:AQ,suppressLogging:RQ,initLogSettings:cC,logCustomLevel:bQ,closeLogFile:fg,logsAtLevel:TQ,getLogFilePath:a(()=>th,"getLogFilePath"),OUTPUTS:aC,AuthAuditLog:CQ});hQ("logger",mC.exports);var ug;function TQ(e){return fr[wr]<=fr[e]}a(TQ,"logsAtLevel");function cC(e=!1){try{if(xd===void 0||e){fg();let t=OQ(),r=rC(["ROOTPATH"]);try{xd=oC(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Wi.pathExistsSync(Ei.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE)))throw n}if({level:wr,config_log_path:Hd,to_file:fi,to_stream:os}=IQ(r.ROOTPATH?Ei.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE):xd.get("settings_path")),eh=Wt.LOG_NAMES.HDB,th=Ei.join(Hd,eh),fQ)try{require("segfault-handler").registerHandler(Ei.join(Hd,"crash.log"))}catch{}}}catch(t){if(xd=void 0,t.code===Wt.NODE_ERROR_CODES.ENOENT||t.code===Wt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=rC(Object.keys(Wt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Wt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Wt.CONFIG_PARAMS.LOGGING_LEVEL){wr=l;continue}if(c===Wt.CONFIG_PARAMS.LOGGING_STDSTREAMS){os=l;continue}c===Wt.CONFIG_PARAMS.LOGGING_FILE&&(fi=c),c===Wt.CONFIG_PARAMS.LOGGING_CONSOLE&&(lg=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=wQ();fi=fi===void 0?s:fi,fi=sC(fi),os=os===void 0?i:os,os=sC(os),wr=wr===void 0?n:wr,Hd=pQ,eh=Wt.LOG_NAMES.INSTALL,th=Ei.join(Hd,eh);return}throw rh("Error initializing log settings"),rh(t),t}process.env.DEV_MODE&&(os=!0),gQ()}a(cC,"initLogSettings");var qo=!0;function gQ(){fi&&(process.stdout.write=function(e){return typeof e=="string"&&qo&&lg!==!1&&(dg(),e=e.toString(),e[e.length-1]===`
1
+ "use strict";var QW=Object.create;var Ld=Object.defineProperty;var JW=Object.getOwnPropertyDescriptor;var XW=Object.getOwnPropertyNames;var ZW=Object.getPrototypeOf,ej=Object.prototype.hasOwnProperty;var a=(e,t)=>Ld(e,"name",{value:t,configurable:!0});var Ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var N=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)Ld(e,r,{get:t[r],enumerable:!0})},vw=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of XW(t))!ej.call(e,s)&&s!==r&&Ld(e,s,{get:()=>t[s],enumerable:!(n=JW(t,s))||n.enumerable});return e};var L=(e,t,r)=>(r=e!=null?QW(ZW(e)):{},vw(t||!e||!e.__esModule?Ld(r,"default",{value:e,enumerable:!0}):r,e)),oe=e=>vw(Ld({},"__esModule",{value:!0}),e);var xw=N((age,Hw)=>{var tj=require("fast-glob"),{statSync:sg,existsSync:ig,readFileSync:rj,writeFileSync:nj}=require("fs"),{spawnSync:sj,spawn:ij,execFileSync:oge}=require("child_process"),{isMainThread:oj}=require("worker_threads"),{join:ko,relative:Bw}=require("path"),{PACKAGE_ROOT:Bs}=M(),{tmpdir:aj,platform:cj}=require("os");require("source-map-support").install();var lj=["resources","server","dataLayer","components"],Md="ts-build",og,uj=__filename.endsWith("tsBuild.js");if(uj){if(oj){let r;try{sg(ko(Bs,Md)),r=!0}catch{}if(r)for(let n of tj.sync(lj.map(s=>s+"/**/*.ts"),{cwd:Bs})){let s=0,i=0;try{s=sg(ko(Bs,n)).mtimeMs-5e3,i=sg(ko(Bs,Md,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),og=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),og=!0;if(og){let n=ko(Bs,"node_modules/.bin/tsc");cj()==="win32"&&(n+=".cmd");let s=sj(n,{cwd:Bs});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=ko(aj(),"harperdb-tsc.pid"),o;if(ig(i))try{process.kill(+rj(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=ij(n,["--watch"],{cwd:Bs,detached:!0,stdio:"ignore"});nj(i,c.pid.toString()),c.unref()}}}}let e=Hw.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Bs)&&!n[0].includes("node_modules")){let i=Bw(Bs,n[0]),o;i.startsWith(Md)?o=ko(Bs,Bw(Md,i)):o=ko(Bs,Md,i);let c=ko(o,r),l=c+".js";if(ig(l))return l;if(c.includes(".")&&ig(c))return c}return t(r,n,s)}}});var M=N((uge,Xw)=>{"use strict";var os=require("path"),dj=require("fs"),{relative:cge,join:lge}=os,{existsSync:_j}=dj;function fj(){let e=__dirname;for(;!_j(os.join(e,"package.json"));){let t=os.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(fj,"getHDBPackageRoot");var Fo=fj(),kw="js",JE=kw,Ej="harperdb-config.yaml",hj="defaultConfig.yaml",pj="hdb",Fw=`harperdb.${JE}`,Gw=`customFunctionsServer.${JE}`,mj=`restartHdb.${JE}`,cg="HarperDB",QE="Custom Functions",XE="Clustering Hub",ZE="Clustering Leaf",Sj="Clustering Ingest Service",Tj="Clustering Reply Service",gj="foreground.pid",Aj="hdb.pid",Rj="data",yj={HDB:cg,CLUSTERING_HUB:XE,CLUSTERING_LEAF:ZE,CLUSTERING_INGEST_SERVICE:Sj,CLUSTERING_REPLY_SERVICE:Tj,CUSTOM_FUNCTIONS:QE,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"},bj={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Oj={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Nj={harperdb:cg,"clustering hub":XE,"clustering leaf":ZE,"custom functions":QE,custom_functions:QE,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},Ij={CLUSTERING_HUB_PROC_DESCRIPTOR:XE,CLUSTERING_LEAF_PROC_DESCRIPTOR:ZE},ag={HDB:os.join(Fo,"server/harperdb"),CUSTOM_FUNCTIONS:os.join(Fo,"server/customFunctions"),CLUSTERING_HUB:os.join(Fo,"server/nats"),CLUSTERING_LEAF:os.join(Fo,"server/nats")},wj={HDB:os.join(ag.HDB,Fw),CUSTOM_FUNCTIONS:os.join(ag.CUSTOM_FUNCTIONS,Gw)},Cj={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:os.join(Fo,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:os.join(Fo,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:os.join(Fo,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Dj={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},qw="support@harperdb.io",Pj="customer-success@harperdb.io",$w=1,Lj=4141,Vw="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Mj="https://www.harperdb.io/product",Uj=`For support, please submit a request at ${Vw} or contact ${qw}`,Kw=`For license support, please contact ${Pj}`,vj="None of the specified records were found.",Bj="hash attribute not found",Hj=`Your current license only supports ${$w} role. ${Kw}`,xj="Your current license only supports 3 connections to a node.",kj="127.0.0.1",Fj=1,Gj=/^\.$/,qj=/^\.\.$/,$j="U+002E",Vj=/\//g,Kj="U+002F",Yj=/U\+002F/g,Wj=/^U\+002E$/,jj=/^U\+002EU\+002E$/,zj="d",Qj=999999,Jj="*",Xj="--max-old-space-size=",Zj="system",ez="__hdb_hash",tz=".harperdb",rz=".hdb",nz="keys",sz="hdb_boot_properties.file",iz=".updateConfig.json",oz="SIGTSTP",az=24,cz=6e4,lz=448,uz="blob",dz="database",_z="schema",fz="transactions",Ez=".count",hz="id",pz="PROCESS_NAME",Yw={SETTINGS_PATH_KEY:"settings_path"},Ww=require("lodash"),mz={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"},Sz={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},Tz={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gz={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"},Az={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Cn="hdb_internal:",Rz={CREATE_SCHEMA:Cn+"create_schema",CREATE_TABLE:Cn+"create_table",CREATE_ATTRIBUTE:Cn+"create_attribute",ADD_USER:Cn+"add_user",ALTER_USER:Cn+"alter_user",DROP_USER:Cn+"drop_user",HDB_NODES:Cn+"hdb_nodes",HDB_USERS:Cn+"hdb_users",HDB_WORKERS:Cn+"hdb_workers",CATCHUP:Cn+"catchup",SCHEMA_CATCHUP:Cn+"schema_catchup",WORKER_ROOM:Cn+"cluster_workers"},yz={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"},bz="060493.ks",Oz=".license",Nz={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},le={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",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_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",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"},Iz={CSV:".csv",JSON:".json"},wz={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Cz={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ud={};Ud[le.INSERT]=le.INSERT;Ud[le.UPDATE]=le.UPDATE;Ud[le.UPSERT]=le.UPSERT;Ud[le.DELETE]=le.DELETE;var nt=Object.create(null);nt[le.DESCRIBE_ALL]=le.DESCRIBE_ALL;nt[le.DESCRIBE_TABLE]=le.DESCRIBE_TABLE;nt[le.DESCRIBE_SCHEMA]=le.DESCRIBE_SCHEMA;nt[le.READ_LOG]=le.READ_LOG;nt[le.ADD_NODE]=le.ADD_NODE;nt[le.LIST_USERS]=le.LIST_USERS;nt[le.LIST_ROLES]=le.LIST_ROLES;nt[le.USER_INFO]=le.USER_INFO;nt[le.SQL]=le.SQL;nt[le.GET_JOB]=le.GET_JOB;nt[le.SEARCH_JOBS_BY_START_DATE]=le.SEARCH_JOBS_BY_START_DATE;nt[le.DELETE_FILES_BEFORE]=le.DELETE_FILES_BEFORE;nt[le.EXPORT_LOCAL]=le.EXPORT_LOCAL;nt[le.EXPORT_TO_S3]=le.EXPORT_TO_S3;nt[le.CLUSTER_STATUS]=le.CLUSTER_STATUS;nt[le.REMOVE_NODE]=le.REMOVE_NODE;nt[le.RESTART]=le.RESTART;nt[le.CUSTOM_FUNCTIONS_STATUS]=le.CUSTOM_FUNCTIONS_STATUS;nt[le.GET_CUSTOM_FUNCTIONS]=le.GET_CUSTOM_FUNCTIONS;nt[le.GET_CUSTOM_FUNCTION]=le.GET_CUSTOM_FUNCTION;nt[le.SET_CUSTOM_FUNCTION]=le.SET_CUSTOM_FUNCTION;nt[le.DROP_CUSTOM_FUNCTION]=le.DROP_CUSTOM_FUNCTION;nt[le.ADD_CUSTOM_FUNCTION_PROJECT]=le.ADD_CUSTOM_FUNCTION_PROJECT;nt[le.DROP_CUSTOM_FUNCTION_PROJECT]=le.DROP_CUSTOM_FUNCTION_PROJECT;nt[le.PACKAGE_CUSTOM_FUNCTION_PROJECT]=le.PACKAGE_CUSTOM_FUNCTION_PROJECT;nt[le.DEPLOY_CUSTOM_FUNCTION_PROJECT]=le.DEPLOY_CUSTOM_FUNCTION_PROJECT;nt[le.ADD_SSH_KEY]=le.ADD_SSH_KEY;nt[le.UPDATE_SSH_KEY]=le.UPDATE_SSH_KEY;nt[le.DELETE_SSH_KEY]=le.DELETE_SSH_KEY;var Dz={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},Pz={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},jw={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"},Lz=Ww.invert(jw),Mz={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"},P={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_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_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_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_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_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",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_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",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"},zw={settings_path:Yw.SETTINGS_PATH_KEY,hdb_root_key:P.ROOTPATH,hdb_root:P.ROOTPATH,rootpath:P.ROOTPATH,server_port_key:P.OPERATIONSAPI_NETWORK_PORT,server_port:P.OPERATIONSAPI_NETWORK_PORT,cert_key:P.TLS_CERTIFICATE,certificate:P.TLS_CERTIFICATE,private_key_key:P.TLS_PRIVATEKEY,private_key:P.TLS_PRIVATEKEY,http_secure_enabled_key:P.OPERATIONSAPI_NETWORK_HTTPS,https_on:P.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:P.OPERATIONSAPI_NETWORK_CORS,cors_on:P.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:P.LOGGING_LEVEL,log_level:P.LOGGING_LEVEL,log_path_key:P.LOGGING_ROOT,log_path:P.LOGGING_ROOT,clustering_node_name_key:P.CLUSTERING_NODENAME,node_name:P.CLUSTERING_NODENAME,clustering_enabled_key:P.CLUSTERING_ENABLED,clustering:P.CLUSTERING_ENABLED,max_http_threads:P.THREADS_COUNT,max_hdb_processes:P.THREADS_COUNT,server_timeout_key:P.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:P.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:P.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:P.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:P.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:P.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:P.LOGGING_AUDITLOG,disable_transaction_log:P.LOGGING_AUDITLOG,operation_token_timeout_key:P.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:P.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:P.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:P.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:P.HTTP_PORT,custom_functions_port:P.HTTP_PORT,custom_functions_directory_key:P.COMPONENTSROOT,custom_functions_directory:P.COMPONENTSROOT,max_custom_function_processes:P.THREADS_COUNT,logging_console:P.LOGGING_CONSOLE,log_to_file:P.LOGGING_FILE,log_to_stdstreams:P.LOGGING_STDSTREAMS,local_studio_on:P.LOCALSTUDIO_ENABLED,clustering_port:P.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:P.CLUSTERING_USER,clustering_enabled:P.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:P.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:P.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:P.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:P.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:P.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:P.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:P.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:P.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:P.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:P.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:P.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:P.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:P.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:P.CLUSTERING_NODENAME,clustering_tls_certificate:P.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:P.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:P.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:P.CLUSTERING_TLS_INSECURE,clustering_tls_verify:P.CLUSTERING_TLS_VERIFY,clustering_loglevel:P.CLUSTERING_LOGLEVEL,clustering_republishmessages:P.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:P.CLUSTERING_DATABASELEVEL,customfunctions_network_port:P.HTTP_PORT,customfunctions_tls_certificate:P.TLS_CERTIFICATE,customfunctions_network_cors:P.HTTP_CORS,customfunctions_network_corsaccesslist:P.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:P.HTTP_HEADERSTIMEOUT,customfunctions_network_https:P.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:P.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:P.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:P.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:P.HTTP_TIMEOUT,customfunctions_tls:P.TLS,http_threads:P.THREADS_COUNT,threads:P.THREADS_COUNT,threads_count:P.THREADS_COUNT,threads_debug:P.THREADS_DEBUG,threads_debug_startingport:P.THREADS_DEBUG_STARTINGPORT,threads_debug_port:P.THREADS_DEBUG_PORT,threads_debug_host:P.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:P.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:P.THREADS_MAXHEAPMEMORY,http_session_affinity:P.HTTP_SESSIONAFFINITY,http_compressionthreshold:P.HTTP_COMPRESSIONTHRESHOLD,http_cors:P.HTTP_CORS,http_corsaccesslist:P.HTTP_CORSACCESSLIST,http_headerstimeout:P.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:P.HTTP_KEEPALIVETIMEOUT,http_maxparamlength:P.HTTP_MAXPARAMLENGTH,http_timeout:P.HTTP_TIMEOUT,http_port:P.HTTP_PORT,http_secureport:P.HTTP_SECUREPORT,http_mtls:P.HTTP_MTLS,http_mtls_user:P.HTTP_MTLS_USER,http_mtls_required:P.HTTP_MTLS_REQUIRED,http_maxheadersize:P.HTTP_MAXHEADERSIZE,http_threadrange:P.HTTP_THREADRANGE,customfunctions_processes:P.THREADS_COUNT,customfunctions_root:P.COMPONENTSROOT,localstudio_enabled:P.LOCALSTUDIO_ENABLED,logging_file:P.LOGGING_FILE,logging_level:P.LOGGING_LEVEL,logging_root:P.LOGGING_ROOT,logging_rotation_enabled:P.LOGGING_ROTATION_ENABLED,logging_rotation_compress:P.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:P.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:P.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:P.LOGGING_ROTATION_PATH,logging_stdstreams:P.LOGGING_STDSTREAMS,logging_auditlog:P.LOGGING_AUDITLOG,logging_auditretention:P.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:P.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:P.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:P.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:P.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:P.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:P.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:P.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:P.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:P.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:P.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:P.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:P.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:P.OPERATIONSAPI_TLS,operationsapi_tls_certificate:P.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:P.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:P.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:P.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:P.ROOTPATH,operationsapi_sysinfo_network:P.OPERATIONSAPI_SYSINFO_NETWORK,operationsapi_sysinfo_disk:P.OPERATIONSAPI_SYSINFO_DISK,databases:P.DATABASES,storage_path:P.STORAGE_PATH,storage_maxtransactionqueuetime:P.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:P.IGNORE_SCRIPTS,mqtt_network_port:P.MQTT_NETWORK_PORT,mqtt_websocket:P.MQTT_WEBSOCKET,mqtt_network_secureport:P.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:P.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:P.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:P.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:P.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:P.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:P.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:P.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:P.AUTHENTICATION_CACHETTL,authentication_enablesessions:P.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:P.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:P.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:P.COMPONENTSROOT,replication:P.REPLICATION,replication_port:P.REPLICATION_PORT,replication_secureport:P.REPLICATION_SECUREPORT,replication_hostname:P.REPLICATION_HOSTNAME,replication_url:P.REPLICATION_URL,replication_routes:P.REPLICATION_ROUTES,replication_enablerootcas:P.REPLICATION_ENABLEROOTCAS,replication_databases:P.REPLICATION_DATABASES,replication_copytablestocatchup:P.REPLICATION_COPYTABLESTOCATCHUP,tls:P.TLS,tls_certificate:P.TLS_CERTIFICATE,tls_privatekey:P.TLS_PRIVATEKEY,tls_certificateauthority:P.TLS_CERTIFICATEAUTHORITY,tls_ciphers:P.TLS_CIPHERS};for(let e in P){let t=P[e];zw[t.toLowerCase()]=t}var Uz={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},vz={csv_file_load:"csv_file_load",csv_data_load:le.CSV_DATA_LOAD,csv_url_load:le.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"},Bz={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"},Hz={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},xz={VERSION_DEFAULT:"2.2.0"},kz={DEVELOPMENT:8192,DEFAULT:512},Fz={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},Gz={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},qz={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},Qw={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},$z=Symbol("metadata"),Vz="__clustering__",Kz=Object.values(Qw),Yz=15984864e5,Jw={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Wz=Ww.invert(Jw),jz={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},zz=111,Qz=`\r
2
+ `,Jz={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Xz=["*","%"],Zz="unauthorized_access",eQ="func_val",tQ={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rQ={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},nQ={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"},sQ={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iQ={HTTP:"http"},oQ={STOPPED:"stopped",ONLINE:"online"},aQ="3.x.x",cQ={SUCCESS:"success",FAILURE:"failure"},lQ={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Xw.exports={LOCAL_HARPERDB_OPERATIONS:nt,HDB_SUPPORT_ADDRESS:qw,HDB_SUPPORT_URL:Vw,HDB_PRICING_URL:Mj,SUPPORT_HELP_MSG:Uj,LICENSE_HELP_MSG:Kw,HDB_PROC_NAME:Fw,HDB_PROC_DESCRIPTOR:cg,CLUSTERING_LEAF_PROC_DESCRIPTOR:ZE,CLUSTERING_HUB_PROC_DESCRIPTOR:XE,SYSTEM_SCHEMA_NAME:Zj,HASH_FOLDER_NAME:ez,HDB_HOME_DIR_NAME:tz,UPDATE_FILE_NAME:iz,LICENSE_KEY_DIR_NAME:nz,BOOT_PROPS_FILE_NAME:sz,JOB_TYPE_ENUM:vz,JOB_STATUS_ENUM:Nz,SYSTEM_TABLE_NAMES:gz,SYSTEM_TABLE_HASH_ATTRIBUTES:Az,OPERATIONS_ENUM:le,VALID_S3_FILE_TYPES:Iz,S3_BUCKET_AUTH_KEYS:wz,VALID_SQL_OPS_ENUM:Cz,GEO_CONVERSION_ENUM:Pz,HDB_SETTINGS_NAMES:jw,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Lz,SERVICE_ACTIONS_ENUM:Dz,CLUSTER_MESSAGE_TYPE_ENUM:Bz,CLUSTER_CONNECTION_DIRECTION_ENUM:Hz,CLUSTER_EVENTS_DEFS_ENUM:Fz,PERIOD_REGEX:Gj,DOUBLE_PERIOD_REGEX:qj,UNICODE_PERIOD:$j,FORWARD_SLASH_REGEX:Vj,UNICODE_FORWARD_SLASH:Kj,ESCAPED_FORWARD_SLASH_REGEX:Yj,ESCAPED_PERIOD_REGEX:Wj,ESCAPED_DOUBLE_PERIOD_REGEX:jj,REG_KEY_FILE_NAME:bz,RESTART_TIMEOUT_MS:cz,HDB_FILE_PERMISSIONS:lz,DATABASES_DIR_NAME:dz,LEGACY_DATABASES_DIR_NAME:_z,TRANSACTIONS_DIR_NAME:fz,LIMIT_COUNT_NAME:Ez,ID_ATTRIBUTE_STRING:hz,INSERT_MODULE_ENUM:Sz,UPGRADE_JSON_FIELD_NAMES_ENUM:Tz,RESTART_CODE:oz,RESTART_CODE_NUM:az,CLUSTER_OPERATIONS:Ud,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:yz,HDB_INTERNAL_SC_CHANNEL_PREFIX:Cn,INTERNAL_SC_CHANNELS:Rz,CLUSTERING_MESSAGE_TYPES:jz,HDB_FILE_SUFFIX:rz,BLOB_FOLDER_NAME:uz,ORIGINATOR_SET_VALUE:zz,LICENSE_VALUES:xz,RAM_ALLOCATION_ENUM:kz,TIME_STAMP_NAMES_ENUM:Qw,TIME_STAMP_NAMES:Kz,PERMS_UPDATE_RELEASE_TIMESTAMP:Yz,SEARCH_NOT_FOUND_MESSAGE:vj,SEARCH_ATTRIBUTE_NOT_FOUND:Bj,LICENSE_ROLE_DENIED_RESPONSE:Hj,LICENSE_MAX_CONNS_REACHED:xj,BASIC_LICENSE_MAX_NON_CU_ROLES:$w,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Lj,VALUE_SEARCH_COMPARATORS:Jw,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Wz,LICENSE_FILE_NAME:Oz,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Gz,NEW_LINE:Qz,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Fj,MOMENT_DAYS_TAG:zj,API_TURNOVER_SEC:Qj,LOOPBACK:kj,CODE_EXTENSION:JE,WILDCARD_SEARCH_VALUE:Jj,NODE_ERROR_CODES:qz,JAVASCRIPT_EXTENSION:kw,PERMS_CRUD_ENUM:Jz,UNAUTHORIZED_PERMISSION_NAME:Zz,SEARCH_WILDCARDS:Xz,FUNC_VAL:eQ,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:tQ,JWT_ENUM:rQ,CLUSTERING_FLAG:Vz,ITC_EVENT_TYPES:nQ,CUSTOM_FUNCTION_PROC_NAME:Gw,CUSTOM_FUNCTION_PROC_DESCRIPTOR:QE,SERVICES:sQ,THREAD_TYPES:iQ,MEM_SETTING_KEY:Xj,HDB_RESTART_SCRIPT:mj,PROCESS_DESCRIPTORS:yj,SERVICE_SERVERS:wj,SERVICE_SERVERS_CWD:ag,PROCESS_DESCRIPTORS_VALIDATE:Nj,LAUNCH_SERVICE_SCRIPTS:Cj,LOG_LEVELS:Oj,PROCESS_NAME_ENV_PROP:pz,LOG_NAMES:bj,PM2_PROCESS_STATUSES:oQ,CONFIG_PARAM_MAP:zw,CONFIG_PARAMS:P,HDB_CONFIG_FILE:Ej,HDB_DEFAULT_CONFIG_FILE:hj,ROLE_TYPES_ENUM:Dj,BOOT_PROP_PARAMS:Yw,INSTALL_PROMPTS:mz,HDB_ROOT_DIR_NAME:pj,CLUSTERING_PROCESSES:Ij,FOREGROUND_PID_FILE:gj,PACKAGE_ROOT:Fo,PRE_4_0_0_VERSION:aQ,DATABASES_PARAM_CONFIG:Uz,METADATA_PROPERTY:$z,AUTH_AUDIT_STATUS:cQ,AUTH_AUDIT_TYPES:lQ,HDB_PID_FILE:Aj,DEFAULT_DATABASE_NAME:Rj,LEGACY_CONFIG_PARAMS:Mz};xw()});var Wa=N((_ge,tC)=>{"use strict";var Zw=require("minimist");tC.exports=uQ;function uQ(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=eC(process.env),n=eC(Zw(process.argv))):(r=process.env,n=Zw(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(uQ,"assignCMDENVVariables");function eC(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(eC,"objKeysToLowerCase")});var _i=N(di=>{"use strict";global.Resource=di.Resource=void 0;global.tables=di.tables={};global.databases=di.databases={};global.getUser=di.getUser=void 0;global.server=di.server={};global.contentTypes=di.contentTypes=null;global.threads=di.threads=[];global.logger={};di._assignPackageExport=(e,t)=>{global[e]=di[e]=t}});var j=N((pC,mC)=>{"use strict";var Wi=require("fs-extra"),{workerData:dQ,threadId:_Q,isMainThread:fQ}=require("worker_threads"),Ei=require("path"),iC=require("yaml"),oC=require("properties-reader"),Wt=M(),rC=Wa(),EQ=require("os"),{PACKAGE_ROOT:_g}=M(),{_assignPackageExport:hQ}=_i(),nC=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),fr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},aC={STDOUT:"stdOut",STDERR:"stdErr"},pQ=Ei.join(_g,"logs"),mQ=Ei.join(_g,"config/yaml/",Wt.HDB_DEFAULT_CONFIG_FILE),SQ=1e4,lg,fi,as,wr,eh,vd,th,Go,Bd;Bd===void 0&&cC();Object.assign(pC,{notify:fC,fatal:EC,error:rh,warn:hC,info:uC,debug:_C,trace:dC,setLogLevel:NQ,log_level:wr,loggerWithTag:AQ,suppressLogging:RQ,initLogSettings:cC,logCustomLevel:bQ,closeLogFile:fg,logsAtLevel:TQ,getLogFilePath:a(()=>th,"getLogFilePath"),OUTPUTS:aC,AuthAuditLog:CQ});hQ("logger",mC.exports);var ug;function TQ(e){return fr[wr]<=fr[e]}a(TQ,"logsAtLevel");function cC(e=!1){try{if(Bd===void 0||e){fg();let t=OQ(),r=rC(["ROOTPATH"]);try{Bd=oC(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Wi.pathExistsSync(Ei.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE)))throw n}if({level:wr,config_log_path:vd,to_file:fi,to_stream:as}=IQ(r.ROOTPATH?Ei.join(r.ROOTPATH,Wt.HDB_CONFIG_FILE):Bd.get("settings_path")),eh=Wt.LOG_NAMES.HDB,th=Ei.join(vd,eh),fQ)try{require("segfault-handler").registerHandler(Ei.join(vd,"crash.log"))}catch{}}}catch(t){if(Bd=void 0,t.code===Wt.NODE_ERROR_CODES.ENOENT||t.code===Wt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=rC(Object.keys(Wt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Wt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let l=r[o];if(c===Wt.CONFIG_PARAMS.LOGGING_LEVEL){wr=l;continue}if(c===Wt.CONFIG_PARAMS.LOGGING_STDSTREAMS){as=l;continue}c===Wt.CONFIG_PARAMS.LOGGING_FILE&&(fi=c),c===Wt.CONFIG_PARAMS.LOGGING_CONSOLE&&(lg=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=wQ();fi=fi===void 0?s:fi,fi=sC(fi),as=as===void 0?i:as,as=sC(as),wr=wr===void 0?n:wr,vd=pQ,eh=Wt.LOG_NAMES.INSTALL,th=Ei.join(vd,eh);return}throw rh("Error initializing log settings"),rh(t),t}process.env.DEV_MODE&&(as=!0),gQ()}a(cC,"initLogSettings");var qo=!0;function gQ(){fi&&(process.stdout.write=function(e){return typeof e=="string"&&qo&&lg!==!1&&(dg(),e=e.toString(),e[e.length-1]===`
3
3
  `&&(e=e.slice(0,-1)),Wi.appendFileSync(Go,Hs("stdout",[e]))),nC.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&qo&&lg!==!1&&(dg(),e[e.length-1]===`
4
4
  `&&(e=e.slice(0,-1)),Wi.appendFileSync(Go,Hs("stderr",[e]))),nC.apply(process.stderr,arguments)})}a(gQ,"stdioLogging");function AQ(e,t){let r={tagName:e.replace(/ /g,"-")};return{notify:n(fC,"notify"),fatal:n(EC,"fatal"),error:n(rh,"error"),warn:n(hC,"warn"),info:n(uC,"info"),debug:n(_C,"debug"),trace:n(dC,"trace")};function n(s,i){return!t||fr[wr]<=fr[i]?function(...o){return s(r,...o)}:null}}a(AQ,"loggerWithTag");function RQ(e){try{qo=!1,e()}finally{qo=!0}}a(RQ,"suppressLogging");var yQ=dQ?.name?.replace(/ /g,"-")||"main";function Hs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,l;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(l=t[0]?.serviceName,c++)),o.unshift(l||yQ+"/"+_Q);c<s;c++){let u=t[c];if(u instanceof Error&&u.stack)n+=u.stack,Object.keys(u).length>0&&(n+=`
5
5
  `+JSON.stringify(u)),u.cause&&(t[c--]=u.cause,u&&(n+=`
6
6
  Caused by:`));else if(typeof u=="object")try{n+=JSON.stringify(u)}catch{n+="Object ["+Object.keys(u)+"]"}else n+=u;c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
7
- `}a(Hs,"createLogRecord");function kd(e){if(fi){if(lC(e),os){qo=!1;try{process.stdout.write(e)}finally{qo=!0}}}else os&&process.stdout.write(e)}a(kd,"logStdOut");function nh(e){if(fi){if(lC(e),os){qo=!1;try{process.stderr.write(e)}finally{qo=!0}}}else os&&process.stderr.write(e)}a(nh,"logStdErr");function lC(e){dg(),Go?Wi.appendFileSync(Go,e):ug||console.log(e)}a(lC,"logToFile");function fg(){try{Wi.closeSync(Go)}catch{}Go=null}a(fg,"closeLogFile");function dg(){if(!Go){try{Go=Wi.openSync(th,"a")}catch(e){ug||(ug=!0,console.error(e))}setTimeout(()=>{fg()},SQ).unref()}}a(dg,"openLogFile");function uC(...e){fr[wr]<=fr.info&&kd(Hs("info",e))}a(uC,"info");function dC(...e){fr[wr]<=fr.trace&&kd(Hs("trace",e))}a(dC,"trace");function rh(...e){fr[wr]<=fr.error&&nh(Hs("error",e))}a(rh,"error");function _C(...e){fr[wr]<=fr.debug&&kd(Hs("debug",e))}a(_C,"debug");function fC(...e){fr[wr]<=fr.notify&&kd(Hs("notify",e))}a(fC,"notify");function EC(...e){fr[wr]<=fr.fatal&&nh(Hs("fatal",e))}a(EC,"fatal");function hC(...e){fr[wr]<=fr.warn&&nh(Hs("warn",e))}a(hC,"warn");function bQ(e,t,...r){t===aC.STDERR?nh(Hs(e,r)):kd(Hs(e,r))}a(bQ,"logCustomLevel");function OQ(){let e;try{e=EQ.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ei.join(e,Wt.HDB_HOME_DIR_NAME,Wt.BOOT_PROPS_FILE_NAME);return Wi.existsSync(t)||(t=Ei.join(_g,"utility/hdb_boot_properties.file")),t}a(OQ,"getPropsFilePath");function NQ(e){wr=e}a(NQ,"setLogLevel");function sC(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(sC,"autoCastBoolean");function IQ(e){try{if(e.includes("config/settings.js")){let o=oC(e);return{level:o.get(Wt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ei.dirname(o.get(Wt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=iC.parseDocument(Wi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Wt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(IQ,"getLogConfig");function wQ(){try{let e=iC.parseDocument(Wi.readFileSync(mQ,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(wQ,"getDefaultConfig");function CQ(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(CQ,"AuthAuditLog")});var Eg=N((pge,SC)=>{"use strict";var DQ=require("util"),PQ=require("path"),LQ=require("child_process"),MQ=DQ.promisify(LQ.execFile),UQ=1e3*1e3*10;SC.exports={findPs:vQ};async function vQ(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await MQ("ps",["wwxo",`pid,${r}`],{maxBuffer:UQ});for(let s of n.trim().split(`
8
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:PQ.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(vQ,"findPs")});var Ht=N((Sge,gC)=>{"use strict";var BQ="__dbis__",HQ="__txns__",xQ="__environment_name__",kQ="__dbi_defintion__",FQ={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"},GQ=["__createdtime__","__updatedtime__"],qQ="\uFFFF",TC={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},$Q=Object.values(TC);gC.exports={AUDIT_STORE_NAME:HQ,INTERNAL_DBIS_NAME:BQ,DBI_DEFINITION_NAME:kQ,SEARCH_TYPES:FQ,TIMESTAMP_NAMES:GQ,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:xQ,TRANSACTIONS_DBI_NAMES_ENUM:TC,TRANSACTIONS_DBIS:$Q,OVERFLOW_MARKER:qQ}});var Dn=N((Tge,CC)=>{"use strict";var AC=M(),RC=Ht(),yC={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},bC=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),OC={500:bC("There was an error processing your request."),400:"Invalid request"},VQ=OC[yC.INTERNAL_SERVER_ERROR],KQ={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")},YQ={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},WQ={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"},jQ={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${RC.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${RC.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"},zQ={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${AC.INSERT_MODULE_ENUM.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 ${AC.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},NC={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"},QQ={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."},JQ={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")},XQ={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"},ZQ={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},e2={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")},IC={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")},wC={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")},t2={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"},r2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},n2={...NC,...WQ,...KQ,...QQ,...JQ,...XQ,...ZQ,...e2,...zQ,...IC,...wC,...t2,...r2,...YQ};CC.exports={CHECK_LOGS_WRAPPER:bC,HDB_ERROR_MSGS:n2,DEFAULT_ERROR_MSGS:OC,DEFAULT_ERROR_RESP:VQ,HTTP_STATUS_CODES:yC,LMDB_ERRORS_ENUM:jQ,AUTHENTICATION_ERROR_MSGS:NC,VALIDATION_ERROR_MSGS:IC,ITC_ERRORS:wC}});var _e=N((Age,LC)=>{"use strict";var wl=Dn(),s2=j(),i2=M(),sh=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,DC),this.statusCode=n||wl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(wl.DEFAULT_ERROR_MSGS[n]?wl.DEFAULT_ERROR_MSGS[n]:wl.DEFAULT_ERROR_MSGS[wl.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&&s2[s](i)}},hg=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}},pg=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function DC(e,t,r,n=i2.LOG_LEVELS.ERROR,s=null,i=!1){if(PC(e))return e;let o=new sh(e,t,r,n,s);return i&&delete o.stack,o}a(DC,"handleHDBError");function PC(e){return e.__proto__.constructor.name===sh.name}a(PC,"isHDBError");LC.exports={isHDBError:PC,handleHDBError:DC,ClientError:hg,ServerError:pg,hdb_errors:wl}});var Tt=N((yge,kC)=>{"use strict";var Vd=M(),o2=re(),nn=se(),Kd=require("path"),a2=require("minimist"),MC=require("fs-extra"),UC=require("lodash");nn.initSync();var{CONFIG_PARAMS:$o,DATABASES_PARAM_CONFIG:Fd,SYSTEM_SCHEMA_NAME:ih}=Vd,Gd,qd,$d;function vC(){if(Gd!==void 0)return Gd;if(nn.getHdbBasePath()!==void 0)return Gd=nn.get($o.STORAGE_PATH)||Kd.join(nn.getHdbBasePath(),Vd.DATABASES_DIR_NAME),Gd}a(vC,"getBaseSchemaPath");function BC(){if(qd!==void 0)return qd;if(nn.getHdbBasePath()!==void 0)return qd=xC(ih),qd}a(BC,"getSystemSchemaPath");function HC(){if($d!==void 0)return $d;if(nn.getHdbBasePath()!==void 0)return $d=nn.get(Vd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Kd.join(nn.getHdbBasePath(),Vd.TRANSACTIONS_DIR_NAME),$d}a(HC,"getTransactionAuditStoreBasePath");function c2(e,t){let r=nn.get($o.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Kd.join(HC(),e.toString())}a(c2,"getTransactionAuditStorePath");function xC(e,t){e=e.toString(),t=t&&t.toString();let r=nn.get(Vd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Kd.join(vC(),e)}a(xC,"getSchemaPath");function l2(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,a2(process.argv));let n=r[$o.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!o2.isObject(n))throw o;i=n}for(let o of i){let c=o[ih];if(!c)continue;let l=nn.get($o.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Fd.PATH];if(u)return UC.set(l,[ih,Fd.TABLES,t,Fd.PATH],u),nn.setProperty($o.DATABASES,l),u;let d=c?.[Fd.PATH];if(d)return UC.set(l,[ih,Fd.PATH],d),nn.setProperty($o.DATABASES,l),d}}let s=r[$o.STORAGE_PATH.toUpperCase()];if(s){if(!MC.pathExistsSync(s))throw new Error(s+" does not exist");let i=Kd.join(s,e);return MC.mkdirsSync(i),nn.setProperty($o.STORAGE_PATH,s),i}return BC()}a(l2,"initSystemSchemaPaths");function u2(){Gd=void 0,qd=void 0,$d=void 0}a(u2,"resetPaths");kC.exports={getBaseSchemaPath:vC,getSystemSchemaPath:BC,getTransactionAuditStorePath:c2,getTransactionAuditStoreBasePath:HC,getSchemaPath:xC,initSystemSchemaPaths:l2,resetPaths:u2}});var sn=N((Ige,VC)=>{"use strict";var d2=Dn().LMDB_ERRORS_ENUM,Oge=require("lmdb"),_2=Ht(),Nge=require("buffer").Buffer,{OVERFLOW_MARKER:FC,MAX_SEARCH_KEY_LENGTH:oh}=_2,GC=["number","string","symbol","boolean","bigint"];function f2(e){if(e=e?.primaryStore||e,!e)throw new Error(d2.ENV_REQUIRED)}a(f2,"validateEnv");function E2(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(E2,"stringifyData");function h2(e){return e instanceof Date?e.valueOf():e}a(h2,"convertKeyValueToWrite");function p2(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(GC.includes(typeof e))return e.length>oh?[e.slice(0,oh)+FC]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(GC.includes(typeof i))i.length>oh?r.push(i.slice(0,oh)+FC):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(p2,"getIndexedValues");var ah=0,qC=0;function $C(){qC=Date.now()-performance.now()}a($C,"adjustStartTime");$C();var m2=6e4;setInterval($C,m2).unref();function S2(){let e=performance.now()+qC;return e>ah?(ah=e,e):(ah+=488e-6,ah)}a(S2,"getNextMonotonicTime");VC.exports={validateEnv:f2,stringifyData:E2,convertKeyValueToWrite:h2,getNextMonotonicTime:S2,getIndexedValues:p2}});var Yd=N((Cge,KC)=>{"use strict";var T2=M().OPERATIONS_ENUM,mg=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=T2.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};KC.exports=mg});var Wd=N((Lge,zC)=>{"use strict";var Pge=Yd(),ch=M(),Sg=re(),YC=j(),g2=require("uuid"),{handleHDBError:lh,hdb_errors:A2}=_e(),{HDB_ERROR_MSGS:uh,HTTP_STATUS_CODES:dh}=A2;zC.exports=WC;function WC(e,t,r){for(let s=0;s<t.length;s++)jC(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];R2(i,r,e.operation)}}a(WC,"processRows");WC.validateAttribute=jC;function jC(e){if(Buffer.byteLength(String(e))>ch.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw lh(new Error,uh.ATTR_NAME_LENGTH_ERR(e),dh.BAD_REQUEST,void 0,void 0,!0);if(Sg.isEmptyOrZeroLength(e)||Sg.isEmpty(e.trim()))throw lh(new Error,uh.ATTR_NAME_NULLISH_ERR,dh.BAD_REQUEST,void 0,void 0,!0)}a(jC,"validateAttribute");function R2(e,t,r){if(!e.hasOwnProperty(t)||Sg.isEmptyOrZeroLength(e[t])){if(r===ch.OPERATIONS_ENUM.INSERT||r===ch.OPERATIONS_ENUM.UPSERT){e[t]=g2.v4();return}throw YC.error("Update transaction aborted due to record with no hash value:",e),lh(new Error,uh.RECORD_MISSING_HASH_ERR,dh.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ch.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw YC.error(e),lh(new Error,uh.HASH_VAL_LENGTH_ERR,dh.BAD_REQUEST,void 0,void 0,!0)}a(R2,"validateHash")});var QC,Pn,Tg,Cl=Ie(()=>{QC=require("events"),Pn=class extends QC.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Tg;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)}},Tg=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}}}});var ja={};je(ja,{server:()=>it});var JC,it,qr=Ie(()=>{JC=L(_i()),it={};(0,JC._assignPackageExport)("server",it)});var Rg={};je(Rg,{loadGQLSchema:()=>O2,start:()=>Ag,startOnMainThread:()=>b2});function Ag({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"),_=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let g of _.definitions)switch(g.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(Y){if(Y.kind==="NonNullType"){let Q=H(Y.type);return Q.nullable=!1,Q}if(Y.kind==="ListType")return{type:"array",elements:H(Y.type)};let ne={type:Y.name?.value};return Object.defineProperty(ne,"location",{value:Y.loc.startToken}),ne};a(H,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let Y of g.directives){if(Y.name.value==="table"){for(let ne of Y.arguments)I[ne.name.value]=ne.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=S),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,f.push(I)}if(Y.name.value==="sealed"&&(I.sealed=!0),Y.name.value==="splitSegments"&&(I.splitSegments=!0),Y.name.value==="replicate"&&(I.replicate=!0),Y.name.value==="export"){I.export=!0;for(let ne of Y.arguments)typeof I.export!="object"&&(I.export={}),I.export[ne.name.value]=ne.value.value}}let U=!1,X={};for(let Y of g.fields){let V=H(Y.type);V.name=Y.name.value,y.push(V),X[V.name]=void 0;for(let ne of Y.directives){let Q=ne.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",ne.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of ne.arguments||[])if(de.name.value==="from"){let W=de.value.value;V.computed={from:m(W,de,X)},V.version==null&&(V.version=W)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let W of ne.arguments)de[W.name.value]=W.value.value;V.relationship=de}else if(Q==="createdTime")V.assignCreatedTime=!0;else if(Q==="updatedTime")V.assignUpdatedTime=!0;else if(Q==="expiresAt")V.expiresAt=!0;else if(Q==="allow"){let de=V.authorizedRoles=[];for(let W of ne.arguments)W.name.value==="role"&&de.push(W.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,ne.loc)}}I.type=S,S==="Query"&&(h=I)}function T(g){let S=E.get(g.type);S?(Object.defineProperty(g,"properties",{value:S.properties}),Object.defineProperty(g,"definition",{value:S})):g.type==="array"?T(g.elements):y2.includes(g.type)||(0,ZC.getWorkerIndex)()===0&&console.error(`The type ${g.type} is unknown at line ${g.location.line}, column ${g.location.column}, in ${s}`)}a(T,"connectPropertyType");for(let g of E.values())for(let S of g.properties)T(S);for(let g of f)g.tableClass=e(g),g.export&&(g.export.name===""?i.set((0,gg.dirname)(n),g.tableClass):i.set((0,gg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new XC.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${g}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(m,"createComputedFrom")}}var gg,XC,ZC,y2,b2,O2,eD=Ie(()=>{gg=require("path"),XC=require("node:vm");De();ZC=L(dt()),y2=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(Ag,"start");b2=Ag,O2=Ag({ensureTable:Et}).handleFile});var aD={};je(aD,{parse:()=>bg,streamAsJSON:()=>jd,stringify:()=>za});function jd(e){return new yg({value:e})}function tD(e){return console.error(e),JSON.stringify(e.toString())}function rD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function za(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===iD)return oD(e);if(t.resolution)return t.resolution.then(()=>za(e));throw t}}function oD(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+=oD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+za(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function bg(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),w2.test(e)?N2.parse(e):JSON.parse(e)):null}var nD,sD,N2,I2,iD,yg,w2,Og=Ie(()=>{nD=require("stream"),sD=L(require("json-bigint-fixes")),N2=(0,sD.default)({useNativeBigInt:!0}),I2=1e4,iD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw iD};a(jd,"streamAsJSON");yg=class extends nD.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=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},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),tD)}catch(s){yield tD(s)}else yield za(t)}else yield za(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);rD(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>I2?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 rD(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(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(tD,"handleError");a(rD,"when");a(za,"stringify");a(oD,"jsStringify");w2=/[[,:]\s*-?\d{16,}/;a(bg,"parse")});var gD=N((Fge,TD)=>{"use strict";var Ng=require("recursive-iterator"),C2=require("alasql"),Ig=require("clone"),cD=re(),{handleHDBError:lD,hdb_errors:D2}=_e(),{HDB_ERROR_MSGS:uD,HTTP_STATUS_CODES:dD}=D2,{getDatabases:P2}=(De(),oe(lt)),L2=["DISTINCT_ARRAY"],_D=Symbol("validateTables"),wg=Symbol("validateTable"),kge=Symbol("getAllColumns"),fD=Symbol("validateAllColumns"),_h=Symbol("findColumn"),ED=Symbol("validateOrderBy"),zd=Symbol("validateSegment"),Cg=Symbol("validateColumn"),hD=Symbol("setColumnsForTable"),pD=Symbol("checkColumnsForAsterisk"),mD=Symbol("validateGroupBy"),SD=Symbol("hasColumns"),Dg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_D](),this[pD](),this[fD]()}[_D](){if(this[SD]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[wg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[wg](t.table)})}}[SD](){let t=!1,r=new Ng(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[wg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=P2();if(!r[t.databaseid])throw lD(new Error,uD.SCHEMA_NOT_FOUND(t.databaseid),dD.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw lD(new Error,uD.TABLE_NOT_FOUND(t.databaseid,t.tableid),dD.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ig(s);i.table=Ig(t),this.attributes.push(i)})}[_h](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[pD](){let t=new Ng(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[hD](r.tableid)}[hD](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new C2.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[fD](){this[zd](this.statement.columns,!1),this[zd](this.statement.joins,!1),this[zd](this.statement.where,!1),this[mD](this.statement.group,!1),this[zd](this.statement.order,!0)}[zd](t,r){if(!t)return;let n=new Ng(t),s=[];for(let{node:i,path:o}of n)!cD.isEmpty(i)&&!cD.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ED](i):s.push(this[Cg](i)));return s}[mD](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&L2.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ig(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[_h](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[_h](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ED](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Cg](t)}[Cg](t){let r=this[_h](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};TD.exports=Dg});var RD=N((qge,AD)=>{"use strict";var Pg=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};AD.exports=Pg});var bD=N((Vge,yD)=>{"use strict";var Lg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};yD.exports=Lg});var wD={};je(wD,{HAS_EXPIRATION:()=>hh,HAS_RESIDENCY_ID:()=>Fg,HAS_STRUCTURE_UPDATE:()=>ph,LAST_TIMESTAMP_PLACEHOLDER:()=>Zd,LOCAL_TIMESTAMP:()=>M2,METADATA:()=>Qd,NO_TIMESTAMP:()=>Ug,PENDING_LOCAL_TIME:()=>Gg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>kg,RecordEncoder:()=>xg,TIMESTAMP_ASSIGN_LAST:()=>v2,TIMESTAMP_ASSIGN_NEW:()=>ND,TIMESTAMP_ASSIGN_PREVIOUS:()=>ID,TIMESTAMP_PLACEHOLDER:()=>fh,TIMESTAMP_RECORD_PREVIOUS:()=>vg,getUpdateRecord:()=>qg,handleLocalTimeForGets:()=>mh});function H2(){return Xd[0]=Xd[0]^64,U2.getFloat64(0)}function mh(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,u=l?.[Qd];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Qd]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,u=l[Qd];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Qa.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Qa.length;l++){let u=Qa[l].deref();(!u||u.isDone||u.isCommitted)&&Qa.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function qg(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Dl=i?.localTime?vg|ID:Ug:Dl=l?i?.localTime?vg|16384:ND|16384:Ug;let f=u?.expiresAt;if(f>=0&&(c|=hh),Jd=c,Bg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Dl>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(Hg=S,Jd|=Fg,m|=Ja),g!==S&&(m|=Xa,g||(g=0)),c&hh&&(m|=t_),u?.originatingOperation&&(m|=e_),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(Eh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=ph,e.encoder.hasStructureUpdate=!1),_&&i?.localTime){let U=i?.localTime,H=r.get(U);if(H){let X=xt(H).previousLocalTime;return r.put(U,Pl(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,Eh,m,S,g,f),{ifVersion:T}),y}}r.put(Zd,Pl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,Eh,m,S,g,f,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:T})}return y}catch(g){throw g.message+=" id: "+n+" options: "+h,g}}}var OD,Mg,fh,Zd,kg,M2,Qd,Xd,U2,Ug,ND,v2,ID,vg,hh,Fg,Gg,ph,B2,Eh,Dl,Jd,Bg,Hg,xg,Qa,Ll=Ie(()=>{OD=require("msgpackr");ji();Mg=L(j()),fh=new Uint8Array([1,1,1,1,4,64,0,0]),Zd=new Uint8Array([1,1,1,1,1,0,0,0]),kg=new Uint8Array([1,1,1,1,3,64,0,0]),M2=Symbol("local-timestamp"),Qd=Symbol("metadata"),Xd=new Uint8Array(8),U2=new DataView(Xd.buffer,0,8),Ug=0,ND=0,v2=1,ID=3,vg=4,hh=16,Fg=32,Gg=1,ph=256,Dl=0,Jd=-1,Bg=-1,Hg=0,xg=class extends OD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Dl||Jd>=0){let o=0,c=Dl;c&&(o+=8,Dl=0);let l=Jd,u=Bg,d=Hg;l>=0&&(o+=2,Jd=-1,u>=0&&(o+=8,Bg=-1),d&&(o+=4,Hg=0));let _=B2=r.call(this,s,i|2048|o);Eh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(fh[4]=c,fh[5]=c>>8,_.set(fh,E),E+=8),l>=0&&(_[E++]=l&31,_[E++]=l>>5,u>=0&&((_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(E,u),E+=8),d&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setUint32(E,d)),_}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Xd,0,c),c+=8;else for(let E=0;E<8;E++)Xd[E]=t[c++];l=H2(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&hh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&Fg&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let _=r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c);return{localTime:l,value:_,[Qd]:o,expiresAt:u,residencyId:d}}return r?.valueAsBuffer?t:super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(H2,"getTimestamp");a(mh,"handleLocalTimeForGets");Qa=[];setInterval(()=>{for(let e=0;e<Qa.length;e++){let t=Qa[e].deref();!t||t.isDone||t.isCommitted?Qa.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Mg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Mg.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(qg,"getUpdateRecord")});var r_=N((zge,DD)=>{"use strict";var CD=se(),x2=M(),{RecordEncoder:k2}=(Ll(),oe(wD)),jge=require("fs");CD.initSync();var F2=CD.get(x2.CONFIG_PARAMS.STORAGE_CACHING)!==!1,$g=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=F2&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:k2})}};DD.exports=$g});var n_=N((Jge,PD)=>{"use strict";var Ln=se(),as=M();Ln.initSync();var Sh=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Ln.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ln.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ln.get(as.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ln.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Ln.get(as.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Ln.get(as.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Ln.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Ln.get(as.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Ln.get(as.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};PD.exports=Sh;Sh.MAX_DBS=1e4});var ht=N((Zge,GD)=>{"use strict";var Kg=require("lmdb"),xs=require("fs-extra"),Mn=require("path"),Th=sn(),UD=j(),on=Dn().LMDB_ERRORS_ENUM,gh=bD(),Yg=r_(),vD=n_(),Vo=Ht(),LD=M(),{table:G2,resetDatabases:q2}=(De(),oe(lt)),MD=se(),ks=Vo.INTERNAL_DBIS_NAME,BD=Vo.DBI_DEFINITION_NAME,$2="data.mdb",V2="lock.mdb",s_=".mdb",K2="-lock",Vg=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=cs(t,r),this.key_type=this.dbi[Vo.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Vo.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Kg.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ah(e,t){if(e===void 0)throw new Error(on.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(on.ENV_NAME_REQUIRED)}a(Ah,"pathEnvNameValidation");async function Wg(e,t,r=!0){try{await xs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(on.INVALID_BASE_PATH):n}try{let n=Mn.join(e,t+s_);return await xs.access(n,xs.constants.R_OK|xs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await xs.access(Mn.join(e,t,$2),xs.constants.R_OK|xs.constants.F_OK),Mn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(on.INVALID_ENVIRONMENT)}else throw new Error(on.INVALID_ENVIRONMENT);throw n}}a(Wg,"validateEnvironmentPath");function Rh(e,t){if(Th.validateEnv(e),t===void 0)throw new Error(on.DBI_NAME_REQUIRED)}a(Rh,"validateEnvDBIName");async function Y2(e,t,r=!1,n=!1){Ah(e,t);let s=Mn.basename(e);t=t.toString();let i=MD.get(LD.CONFIG_PARAMS.DATABASES);i||MD.setProperty(LD.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Wg(e,t,n),HD(e,t,r)}catch(o){if(o.message===on.INVALID_ENVIRONMENT){let c=Mn.join(e,t);await xs.mkdirp(n?c:e);let l=new vD(n?c:c+s_,!1),u=Kg.open(l);u.dbis=Object.create(null);let d=new Yg(!1);u.openDB(ks,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=jg(e,t,r);return u[Vo.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(Y2,"createEnvironment");async function W2(e,t,r,n=!0){Ah(e,t),t=t.toString();let s=Mn.join(e,t);return G2({table:t,database:Mn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(W2,"copyEnvironment");async function HD(e,t,r=!1){Ah(e,t),t=t.toString();let n=jg(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Wg(e,t),i=Mn.join(e,t+s_),o=s!=i,c=new vD(s,o),l=Kg.open(c);l.dbis=Object.create(null);let u=kD(l);for(let d=0;d<u.length;d++)cs(l,u[d]);return l[Vo.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(HD,"openEnvironment");async function j2(e,t,r=!1){Ah(e,t),t=t.toString();let n=Mn.join(e,t+s_),s=await Wg(e,t);if(global.lmdb_map!==void 0){let i=jg(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await xD(o),delete global.lmdb_map[i]}}await xs.remove(s),await xs.remove(s===n?s+K2:Mn.join(Mn.dirname(s),V2))}a(j2,"deleteEnvironment");async function xD(e){Th.validateEnv(e);let t=e[Vo.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(xD,"closeEnvironment");function jg(e,t,r=!1){let s=`${Mn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(jg,"getCachedEnvironmentName");function z2(e){Th.validateEnv(e);let t=Object.create(null),r=cs(e,ks);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ks)try{t[n]=Object.assign(new gh,s)}catch{UD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(z2,"listDBIDefinitions");function kD(e){Th.validateEnv(e);let t=[],r=cs(e,ks);for(let{key:n}of r.getRange({start:!1}))n!==ks&&t.push(n);return t}a(kD,"listDBIs");function Q2(e,t){let n=cs(e,ks).getEntry(t),s=new gh;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{UD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(Q2,"getDBIDefinition");function FD(e,t,r,n=!r){if(Rh(e,t),t=t.toString(),t===ks)throw new Error(on.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return cs(e,t)}catch(s){if(s.message===on.DBI_DOES_NOT_EXIST){let i=new Yg(r,n===!0),o=e.openDB(t,i),c=new gh(r===!0,n);return o[BD]=c,cs(e,ks).putSync(t,c),e.dbis[t]=o,o}throw s}}a(FD,"createDBI");function cs(e,t){if(Rh(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ks?r=Q2(e,t):r=new gh,r===void 0)throw new Error(on.DBI_DOES_NOT_EXIST);let n;try{let s=new Yg(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(on.DBI_DOES_NOT_EXIST):s}return n[BD]=r,e.dbis[t]=n,n}a(cs,"openDBI");function J2(e,t){Rh(e,t),t=t.toString();let r=cs(e,t),n=r.getStats();return r[Vo.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(J2,"statDBI");async function X2(e,t){try{let r=Mn.join(e,t+s_);return(await xs.stat(r)).size}catch{throw new Error(on.INVALID_ENVIRONMENT)}}a(X2,"environmentDataSize");function Z2(e,t){if(Rh(e,t),t=t.toString(),t===ks)throw new Error(on.CANNOT_DROP_INTERNAL_DBIS_NAME);cs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],cs(e,ks).removeSync(t)}a(Z2,"dropDBI");function e4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{cs(e,i)}catch(o){if(o.message===on.DBI_DOES_NOT_EXIST)FD(e,i,i!==t,i===t),n=!0;else throw o}}n&&q2()}a(e4,"initializeDBIs");GD.exports={openDBI:cs,openEnvironment:HD,createEnvironment:Y2,listDBIs:kD,listDBIDefinitions:z2,createDBI:FD,dropDBI:Z2,statDBI:J2,deleteEnvironment:j2,initializeDBIs:e4,TransactionCursor:Vg,environmentDataSize:X2,copyEnvironment:W2,closeEnvironment:xD}});var $D=N((tAe,qD)=>{"use strict";var zg=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};qD.exports=zg});var KD=N((nAe,VD)=>{"use strict";var Qg=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};VD.exports=Qg});var WD=N((iAe,YD)=>{"use strict";var Jg=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};YD.exports=Jg});var ec=N((uAe,QD)=>{"use strict";var t4=ht(),r4=$D(),n4=KD(),s4=WD(),hi=sn(),i_=Dn().LMDB_ERRORS_ENUM,i4=Ht(),zi=M(),o4=re(),a4=require("uuid"),aAe=require("lmdb"),{handleHDBError:c4,hdb_errors:l4}=_e(),{OVERFLOW_MARKER:cAe,MAX_SEARCH_KEY_LENGTH:lAe}=i4,jD=se();jD.initSync();var yh=jD.get(zi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Xg=zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Za=zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function u4(e,t,r,n,s=hi.getNextMonotonicTime()){rA(e,t,r,n),Zg(e,t,r);let i=new r4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];zD(u,!0,s);let d=d4(e,t,r,u),_=u[t];o.push(d),c.push(_)}return eA(o,c,n,i,s)}a(u4,"insertRecords");function d4(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][zi.FUNC_VAL],n[o]=c)}let l=hi.getIndexedValues(c),u=e.dbis[o];if(l){yh&&u.prefetch(l.map(d=>({key:d,value:s})),bh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}yh&&e.dbis[t].prefetch([s],bh),e.dbis[t].put(s,n,n[Za])})}a(d4,"insertRecord");function _4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(_4,"removeSkippedRecords");function zD(e,t,r){let n=r>0;(n||!Number.isInteger(e[Za]))&&(e[Za]=r||(r=hi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Xg]))&&(e[Xg]=r||hi.getNextMonotonicTime()):delete e[Xg]}a(zD,"setTimestamps");function Zg(e,t,r){r.indexOf(zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),t4.initializeDBIs(e,t,r)}a(Zg,"initializeTransaction");async function f4(e,t,r,n,s=hi.getNextMonotonicTime()){rA(e,t,r,n),Zg(e,t,r);let i=new n4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=tA(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return eA(c,l,n,i,s,o)}a(f4,"updateRecords");async function E4(e,t,r,n,s=hi.getNextMonotonicTime()){try{rA(e,t,r,n)}catch(l){throw c4(l,l.message,l4.HTTP_STATUS_CODES.BAD_REQUEST)}Zg(e,t,r);let i=new s4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;o4.isEmpty(u[t])?(d=a4.v4(),u[t]=d):d=u[t];let _=tA(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return eA(o,c,n,i,s)}a(E4,"upsertRecords");async function eA(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||hi.getNextMonotonicTime(),_4(r,i),n}a(eA,"finalizeWrite");function tA(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(zD(r,!d,o),Number.isInteger(r[Za])&&u[Za]>r[Za])return!1;d&&s.original_records.push(u);let _,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],m=e.dbis[h];if(m===void 0)continue;let g=u[h];if(typeof T=="function"){let y=T([[u]]);Array.isArray(y)&&(T=y[0][zi.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=hi.getIndexedValues(g);if(S){yh&&m.prefetch(S.map(y=>({key:y,value:n})),bh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=hi.getIndexedValues(T),S){yh&&m.prefetch(S.map(y=>({key:y,value:n})),bh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[Za])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:tA(e,t,r,n,s,i,o))}a(tA,"updateUpsertRecord");function h4(e,t,r){if(hi.validateEnv(e),t===void 0)throw new Error(i_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(i_.WRITE_ATTRIBUTES_REQUIRED):new Error(i_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(h4,"validateBasic");function rA(e,t,r,n){if(h4(e,t,r),!Array.isArray(n))throw n===void 0?new Error(i_.RECORDS_REQUIRED):new Error(i_.RECORDS_MUST_BE_ARRAY)}a(rA,"validateWrite");function bh(){}a(bh,"noop");QD.exports={insertRecords:u4,updateRecords:f4,upsertRecords:E4}});var Qi=N((_Ae,p4)=>{p4.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var mi=N((fAe,ZD)=>{"use strict";var XD=re(),JD=M(),Ml=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,pi=require("joi"),Ko={schema_format:{pattern:Ml,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},m4=pi.alternatives(pi.string().min(1).max(Ko.schema_length.maximum).pattern(Ml).messages({"string.pattern.base":"{:#label} "+Ko.schema_format.message}),pi.number(),pi.array()).required(),S4=pi.alternatives(pi.string().min(1).max(Ko.schema_length.maximum).pattern(Ml).messages({"string.pattern.base":"{:#label} "+Ko.schema_format.message}),pi.number()),T4=pi.alternatives(pi.string().min(1).max(Ko.schema_length.maximum).pattern(Ml).messages({"string.pattern.base":"{:#label} "+Ko.schema_format.message}),pi.number()).required();function g4(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ko.schema_length.maximum?`'${e}' maximum of 250 characters`:Ml.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(g4,"checkValidTable");function A4(e,t){return XD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(A4,"validateSchemaExists");function R4(e,t){let r=t.state.ancestors[0].schema;return XD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(R4,"validateTableExists");function y4(e,t){return e.toLowerCase()===JD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${JD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(y4,"validateSchemaName");ZD.exports={common_validators:Ko,schema_regex:Ml,hdb_schema_table:m4,validateSchemaExists:A4,validateTableExists:R4,validateSchemaName:y4,checkValidTable:g4,hdb_database:S4,hdb_table:T4}});var gt=N((hAe,eP)=>{"use strict";var an=require("validate.js");an.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||an.validators.type.checks[t](e)?null:` must be a '${t}' value`};an.validators.type.checks={Object:a(function(e){return an.isObject(e)&&!an.isArray(e)},"Object"),Array:an.isArray,Integer:an.isInteger,Number:an.isNumber,String:an.isString,Date:an.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};an.validators.hasValidFileExt=function(e,t){return an.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};eP.exports={validateObject:b4,validateObjectAsync:O4,validateBySchema:N4};function b4(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=an(e,t,{format:"flat"});return r?new Error(r):null}a(b4,"validateObject");async function O4(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await an.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(O4,"validateObjectAsync");function N4(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(N4,"validateBySchema")});var Oh=N((mAe,tP)=>{var{common_validators:Si}=mi(),a_=gt(),o_="is required",tr={database:{presence:!1,format:Si.schema_format,length:Si.schema_length},schema:{presence:!1,format:Si.schema_format,length:Si.schema_length},table:{presence:!0,format:Si.schema_format,length:Si.schema_length},attribute:{presence:!0,format:Si.schema_format,length:Si.schema_length},hash_attribute:{presence:!0,format:Si.schema_format,length:Si.schema_length}};function c_(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(c_,"makeAttributesStrings");function I4(e){return e=c_(e),tr.table.presence=!1,tr.attribute.presence=!1,tr.hash_attribute.presence=!1,a_.validateObject(e,tr)}a(I4,"schema_object");function w4(e){return e=c_(e),tr.table.presence={message:o_},tr.attribute.presence=!1,tr.hash_attribute.presence=!1,a_.validateObject(e,tr)}a(w4,"table_object");function C4(e){return e=c_(e),tr.table.presence={message:o_},tr.attribute.presence=!1,a_.validateObject(e,tr)}a(C4,"create_table_object");function D4(e){return e=c_(e),tr.table.presence={message:o_},tr.attribute.presence={message:o_},tr.hash_attribute.presence=!1,a_.validateObject(e,tr)}a(D4,"attribute_object");function P4(e){return e=c_(e),tr.table.presence={message:o_},tr.attribute.presence=!1,tr.hash_attribute.presence=!1,a_.validateObject(e,tr)}a(P4,"describe_table");function L4(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(L4,"validateTableResidence");tP.exports={schema_object:I4,create_table_object:C4,table_object:w4,attribute_object:D4,describe_table:P4,validateTableResidence:L4}});var nP=N((TAe,rP)=>{"use strict";var M4=require("uuid"),nA=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||M4.v4(),this.schema_table=`${this.schema}.${this.table}`}};rP.exports=nA});var Nh=N((AAe,sP)=>{"use strict";var U4=nP(),sA=class extends U4{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};sP.exports=sA});var oP=N((yAe,iP)=>{"use strict";iP.exports=B4;var v4="inserted";function B4(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===v4?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(B4,"returnObject")});var Ih=N((NAe,uP)=>{"use strict";var H4=M(),iA=ht(),x4=ec(),{getSystemSchemaPath:k4,getSchemaPath:F4}=Tt(),OAe=Qi(),G4=Oh(),q4=Nh(),$4=oP(),{handleHDBError:aP,hdb_errors:lP}=_e(),cP=re(),{HTTP_STATUS_CODES:V4}=lP,K4="inserted";uP.exports=Y4;async function Y4(e){let t=G4.attribute_object(e);if(t)throw aP(new Error,t.message,lP.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&cP.checkGlobalSchemaTable(e.schema,e.table);if(r)throw aP(new Error,r,V4.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=cP.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new q4(e.schema,e.table,e.attribute,e.id);try{let i=await iA.openEnvironment(F4(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);iA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await iA.openEnvironment(k4(),H4.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await x4.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return $4(K4,c,{records:[s]},l)}catch(i){throw i}}a(Y4,"lmdbCreateAttribute")});var aA=N((wAe,_P)=>{var{hdb_table:W4,hdb_database:dP}=mi(),j4=gt(),oA=require("joi"),z4={undefined:"undefined",null:"null"},Q4=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||z4[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),J4=oA.object({database:dP,schema:dP,table:W4,records:oA.array().items(oA.object().custom(Q4)).required()});_P.exports=function(e){return j4.validateBySchema(e,J4)}});var l_=N((PAe,EP)=>{"use strict";var Ji=re(),fP=j(),DAe=aA(),{getDatabases:X4}=(De(),oe(lt)),{ClientError:tc}=_e();EP.exports=Z4;function Z4(e){if(Ji.isEmpty(e))throw new tc("invalid update parameters defined.");if(Ji.isEmptyOrZeroLength(e.schema))throw new tc("invalid schema specified.");if(Ji.isEmptyOrZeroLength(e.table))throw new tc("invalid table specified.");if(!Array.isArray(e.records))throw new tc("records must be an array");let t=X4()[e.schema]?.[e.table];if(Ji.isEmpty(t))throw new tc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Ji.isEmptyOrZeroLength(o[r]))throw fP.error("a valid hash attribute must be provided with update record:",o),new tc("a valid hash attribute must be provided with update record, check log for more info");if(!Ji.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw fP.error(`a valid hash value must be provided with ${e.operation} record:`,o),new tc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ji.isEmpty(o[r])&&o[r]!==""&&n.has(Ji.autoCast(o[r]))&&(o.skip=!0),n.add(Ji.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(Z4,"insertUpdateValidate")});var pP=N((MAe,hP)=>{"use strict";var cA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};hP.exports=cA});var TP=N((vAe,SP)=>{"use strict";var lA=ht(),eJ=j(),mP=Dn().LMDB_ERRORS_ENUM;SP.exports=tJ;async function tJ(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await lA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==mP.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await lA.closeEnvironment(global.lmdb_map[n]),await lA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==mP.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){eJ.error(t)}}a(tJ,"cleanLMDBMap")});var Xi=N((HAe,yP)=>{"use strict";var u_=require("crypto"),rJ=se(),{CONFIG_PARAMS:nJ}=M(),AP="aes-256-cbc",sJ=32,iJ=16,uA=64,RP=32,oJ=uA+RP,gP=new Map;yP.exports={encrypt:aJ,decrypt:cJ,createNatsTableStreamName:lJ};function aJ(e){let t=u_.randomBytes(sJ),r=u_.randomBytes(iJ),n=u_.createCipheriv(AP,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(aJ,"encrypt");function cJ(e){let t=e.substr(0,uA),r=e.substr(uA,RP),n=e.substr(oJ,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=u_.createDecipheriv(AP,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(cJ,"decrypt");function lJ(e,t){let r=rJ.get(nJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=gP.get(r);return n||(n=u_.createHash("md5").update(r).digest("hex"),gP.set(r,n)),n}a(lJ,"createNatsTableStreamName")});var Zi=N((FAe,NP)=>{"use strict";var kAe=$r(),d_=j(),bP=Oh(),uJ=Xi(),wh=re(),{handleHDBError:Ch,hdb_errors:dJ}=_e(),{HDB_ERROR_MSGS:Dh,HTTP_STATUS_CODES:dA}=dJ,OP=se();OP.initSync();var{getDatabases:_A}=(De(),oe(lt)),_J=require("fs-extra"),fJ=M();NP.exports={describeAll:EJ,describeTable:Ph,describeSchema:hJ};async function EJ(e={}){try{let t=wh.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=_A(),o={},c={},l=[],u=e?.exact_count;for(let _ in i){o[_]=!0,!t&&!s&&!r&&(c[_]=e.hdb_user?.role?.permission[_]?.describe);let E=i[_];for(let f in E)try{let h;if(t||s||r)h=await Ph({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await Ph({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){d_.error(h)}}let d={};for(let _ in l)t||s||r?(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]):c[l[_].schema]&&(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]);for(let _ in o)t||s||r?d[_]={}:c[_]&&(d[_]={});return d}catch(t){return d_.error("Got an error in describeAll"),d_.error(t),Ch(new Error,Dh.DESCRIBE_ALL_ERR)}}a(EJ,"describeAll");async function Ph(e,t){wh.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=bP.describe_table(e);if(i)throw i;let c=_A()[r];if(!c)throw Ch(new Error,Dh.SCHEMA_NOT_FOUND(e.schema),dA.NOT_FOUND);let l=c[n];if(!l)throw Ch(new Error,Dh.TABLE_NOT_FOUND(e.schema,e.table),dA.NOT_FOUND);function u(f){d.push({attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&u(h)})}else l.attributes?.forEach(f=>u(f));let _;try{_=(await _J.stat(l.primaryStore.env.path)).size}catch(f){d_.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:_};l.replicate!==void 0&&(E.replicate=l.replicate),l.expirationMS!==void 0&&(E.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(E.sealed=l.sealed),l.sources?.length>0&&(E.sources=l.sources.map(f=>f.name).filter(f=>f&&f!=="NATSReplicator"&&f!=="Replicator")),OP.get(fJ.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=uJ.createNatsTableStreamName(E.schema,E.name));try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.table_size=l.getSize(),E.db_audit_size=l.getAuditSize(),E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let T of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=T[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let T of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=T}catch(f){d_.warn(`unable to stat table dbi due to ${f}`)}return E}a(Ph,"descTable");async function hJ(e){wh.transformReq(e);let t=bP.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=_A()[n];if(!i)throw Ch(new Error,Dh.SCHEMA_NOT_FOUND(e.schema),dA.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),wh.isEmpty(l)||l.describe){let u=await Ph({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(hJ,"describeSchema")});var Fs=N((VAe,PP)=>{var pJ=Qi(),{callbackify:wP,promisify:mJ}=require("util"),{getDatabases:CP}=(De(),oe(lt));PP.exports={setSchemaDataToGlobal:IP,getTableSchema:SJ,getSystemSchema:TJ,setSchemaDataToGlobalAsync:mJ(IP)};var DP=Zi(),qAe=wP(DP.describeAll),$Ae=wP(DP.describeTable);function IP(e){global.hdb_schema=CP(),e&&e()}a(IP,"setSchemaDataToGlobal");function SJ(e,t,r){let n=CP()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(SJ,"getTableSchema");function TJ(){return pJ}a(TJ,"getSystemSchema")});var cn=N((YAe,vP)=>{"use strict";var Mh=aA(),Cr=re(),gJ=require("util"),Uh=Un(),AJ=Fs(),LP=j(),{handleHDBError:rc,hdb_errors:RJ}=_e(),{HTTP_STATUS_CODES:nc}=RJ,yJ=gJ.promisify(AJ.getTableSchema),bJ="updated",MP="inserted",UP="upserted";vP.exports={insert:NJ,update:IJ,upsert:wJ,validation:OJ,flush:CJ};async function OJ(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await yJ(e.schema,e.table),r=Mh(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Cr.isEmptyOrZeroLength(c[n]))throw LP.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw LP.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(OJ,"validation");async function NJ(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Mh(e);if(t)throw rc(new Error,t.message,nc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw rc(new Error,r,nc.BAD_REQUEST);let n=await Uh.createRecords(e);return Lh(MP,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(NJ,"insertData");async function IJ(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Mh(e);if(t)throw rc(new Error,t.message,nc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw rc(new Error,r,nc.BAD_REQUEST);let n=await Uh.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Lh(bJ,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Lh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(IJ,"updateData");async function wJ(e){if(e.operation!=="upsert")throw rc(new Error,"invalid operation, must be upsert",nc.INTERNAL_SERVER_ERROR);let t=Mh(e);if(t)throw rc(new Error,t.message,nc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw rc(new Error,r,nc.BAD_REQUEST);let n=await Uh.upsertRecords(e);return Lh(UP,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(wJ,"upsertData");function Lh(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===MP?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===UP?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Lh,"returnObject");function CJ(e){return Cr.transformReq(e),Uh.flush(e.schema,e.table)}a(CJ,"flush")});var EA=N((jAe,xP)=>{var DJ=gt(),fA=require("joi"),{hdb_table:PJ,hdb_database:BP}=mi(),HP={schema:BP,database:BP,table:PJ},LJ={date:fA.date().iso().required()},MJ={timestamp:fA.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};xP.exports=function(e,t){let r=t==="timestamp"?{...HP,...MJ}:{...HP,...LJ},n=fA.object(r);return DJ.validateBySchema(e,n)}});var GP=N((zAe,FP)=>{var UJ=gt(),hA=require("joi"),{hdb_table:vJ,hdb_database:kP}=mi(),BJ=hA.object({schema:kP,database:kP,table:vJ,hash_values:hA.array().required(),ids:hA.array()});FP.exports=function(e){return UJ.validateBySchema(e,BJ)}});var TA=N((QAe,qP)=>{"use strict";var pA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},mA=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},SA=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};qP.exports={InsertObject:pA,NoSQLSeachObject:mA,DeleteResponseObject:SA}});var oc=N((XAe,WP)=>{"use strict";var VP=EA(),HJ=GP(),sc=re(),$P=require("moment"),KP=j(),{promisify:xJ,callbackify:kJ}=require("util"),ic=M(),FJ=Fs(),gA=xJ(FJ.getTableSchema),AA=Un(),{DeleteResponseObject:GJ}=TA(),{handleHDBError:Yo,hdb_errors:qJ}=_e(),{HDB_ERROR_MSGS:vh,HTTP_STATUS_CODES:Wo}=qJ,$J="records successfully deleted",VJ=kJ(YP);WP.exports={delete:VJ,deleteRecord:YP,deleteFilesBefore:KJ,deleteAuditLogsBefore:YJ};async function KJ(e){let t=VP(e,"date");if(t)throw Yo(t,t.message,Wo.BAD_REQUEST,void 0,void 0,!0);if(sc.transformReq(e),!$P(e.date,$P.ISO_8601).isValid())throw Yo(new Error,vh.INVALID_DATE,Wo.BAD_REQUEST,ic.LOG_LEVELS.ERROR,vh.INVALID_DATE,!0);let n=sc.checkSchemaTableExist(e.schema,e.table);if(n)throw Yo(new Error,n,Wo.NOT_FOUND,ic.LOG_LEVELS.ERROR,n,!0);let s=await AA.deleteRecordsBefore(e);if(await gA(e.schema,e.table),KP.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(KJ,"deleteFilesBefore");async function YJ(e){let t=VP(e,"timestamp");if(t)throw Yo(t,t.message,Wo.BAD_REQUEST,void 0,void 0,!0);if(sc.transformReq(e),isNaN(e.timestamp))throw Yo(new Error,vh.INVALID_VALUE("Timestamp"),Wo.BAD_REQUEST,ic.LOG_LEVELS.ERROR,vh.INVALID_VALUE("Timestamp"),!0);let r=sc.checkSchemaTableExist(e.schema,e.table);if(r)throw Yo(new Error,r,Wo.NOT_FOUND,ic.LOG_LEVELS.ERROR,r,!0);let n=await AA.deleteAuditLogsBefore(e);return await gA(e.schema,e.table),KP.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(YJ,"deleteAuditLogsBefore");async function YP(e){e.ids&&(e.hash_values=e.ids);let t=HJ(e);if(t)throw Yo(t,t.message,Wo.BAD_REQUEST,void 0,void 0,!0);sc.transformReq(e);let r=sc.checkSchemaTableExist(e.schema,e.table);if(r)throw Yo(new Error,r,Wo.NOT_FOUND,ic.LOG_LEVELS.ERROR,r,!0);try{await gA(e.schema,e.table);let n=await AA.deleteRecords(e);return sc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${$J}`),n}catch(n){if(n.message===ic.SEARCH_NOT_FOUND_MESSAGE){let s=new GJ;return s.message=ic.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(YP,"deleteRecord")});var Bh=N((eRe,QP)=>{var WJ=require("crypto"),jP=9;function jJ(e){let t=QJ(jP),r=zP(e+t);return t+r}a(jJ,"createHash");function zJ(e,t){let r=e?.substr(0,jP),n=r+zP(t+r);return e===n}a(zJ,"validateHash");function QJ(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(QJ,"generateSalt");function zP(e){return WJ.createHash("md5").update(e).digest("hex")}a(zP,"md5");QP.exports={hash:jJ,validate:zJ}});var XP=N((rRe,JP)=>{var RA=gt(),Vr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function JJ(e){return Vr.password.presence=!0,Vr.username.presence=!0,Vr.role.presence=!0,Vr.active.presence=!0,RA.validateObject(e,Vr)}a(JJ,"addUserValidation");function XJ(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,RA.validateObject(e,Vr)}a(XJ,"alterUserValidation");function ZJ(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,RA.validateObject(e,Vr)}a(ZJ,"dropUserValidation");JP.exports={addUserValidation:JJ,alterUserValidation:XJ,dropUserValidation:ZJ}});var It=N((iRe,eL)=>{"use strict";var{platform:sRe}=require("os"),e3="nats-server.zip",yA="nats-server",t3=process.platform==="win32"?`${yA}.exe`:yA,r3=/^[^\s.,*>]+$/,ZP="__request__",n3=a(e=>`${e}.${ZP}`,"REQUEST_SUBJECT"),s3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},i3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},o3={HUB:"hub.pid",LEAF:"leaf.pid"},a3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},c3={SUCCESS:"success",ERROR:"error"},l3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},u3={TXN:"txn",MSGID:"msgid"},Ul={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},d3={[Ul.ERR]:1,[Ul.WRN]:2,[Ul.INF]:3,[Ul.DBG]:4,[Ul.TRC]:5},_3={debug:"-D",trace:"-DVV"};eL.exports={NATS_SERVER_ZIP:e3,NATS_SERVER_NAME:yA,NATS_BINARY_NAME:t3,PID_FILES:o3,NATS_CONFIG_FILES:i3,SERVER_SUFFIX:a3,NATS_TERM_CONSTRAINTS_RX:r3,REQUEST_SUFFIX:ZP,UPDATE_REMOTE_RESPONSE_STATUSES:c3,CLUSTER_STATUS_STATUSES:l3,REQUEST_SUBJECT:n3,SUBJECT_PREFIXES:u3,MSG_HEADERS:s3,LOG_LEVELS:Ul,LOG_LEVEL_FLAGS:_3,LOG_LEVEL_HIERARCHY:d3}});var bA=N(tL=>{"use strict";var f3={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
7
+ `}a(Hs,"createLogRecord");function Hd(e){if(fi){if(lC(e),as){qo=!1;try{process.stdout.write(e)}finally{qo=!0}}}else as&&process.stdout.write(e)}a(Hd,"logStdOut");function nh(e){if(fi){if(lC(e),as){qo=!1;try{process.stderr.write(e)}finally{qo=!0}}}else as&&process.stderr.write(e)}a(nh,"logStdErr");function lC(e){dg(),Go?Wi.appendFileSync(Go,e):ug||console.log(e)}a(lC,"logToFile");function fg(){try{Wi.closeSync(Go)}catch{}Go=null}a(fg,"closeLogFile");function dg(){if(!Go){try{Go=Wi.openSync(th,"a")}catch(e){ug||(ug=!0,console.error(e))}setTimeout(()=>{fg()},SQ).unref()}}a(dg,"openLogFile");function uC(...e){fr[wr]<=fr.info&&Hd(Hs("info",e))}a(uC,"info");function dC(...e){fr[wr]<=fr.trace&&Hd(Hs("trace",e))}a(dC,"trace");function rh(...e){fr[wr]<=fr.error&&nh(Hs("error",e))}a(rh,"error");function _C(...e){fr[wr]<=fr.debug&&Hd(Hs("debug",e))}a(_C,"debug");function fC(...e){fr[wr]<=fr.notify&&Hd(Hs("notify",e))}a(fC,"notify");function EC(...e){fr[wr]<=fr.fatal&&nh(Hs("fatal",e))}a(EC,"fatal");function hC(...e){fr[wr]<=fr.warn&&nh(Hs("warn",e))}a(hC,"warn");function bQ(e,t,...r){t===aC.STDERR?nh(Hs(e,r)):Hd(Hs(e,r))}a(bQ,"logCustomLevel");function OQ(){let e;try{e=EQ.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ei.join(e,Wt.HDB_HOME_DIR_NAME,Wt.BOOT_PROPS_FILE_NAME);return Wi.existsSync(t)||(t=Ei.join(_g,"utility/hdb_boot_properties.file")),t}a(OQ,"getPropsFilePath");function NQ(e){wr=e}a(NQ,"setLogLevel");function sC(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(sC,"autoCastBoolean");function IQ(e){try{if(e.includes("config/settings.js")){let o=oC(e);return{level:o.get(Wt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ei.dirname(o.get(Wt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Wt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=iC.parseDocument(Wi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Wt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(IQ,"getLogConfig");function wQ(){try{let e=iC.parseDocument(Wi.readFileSync(mQ,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(wQ,"getDefaultConfig");function CQ(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(CQ,"AuthAuditLog")});var Eg=N((pge,SC)=>{"use strict";var DQ=require("util"),PQ=require("path"),LQ=require("child_process"),MQ=DQ.promisify(LQ.execFile),UQ=1e3*1e3*10;SC.exports={findPs:vQ};async function vQ(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await MQ("ps",["wwxo",`pid,${r}`],{maxBuffer:UQ});for(let s of n.trim().split(`
8
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:PQ.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(vQ,"findPs")});var Ht=N((Sge,gC)=>{"use strict";var BQ="__dbis__",HQ="__txns__",xQ="__environment_name__",kQ="__dbi_defintion__",FQ={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"},GQ=["__createdtime__","__updatedtime__"],qQ="\uFFFF",TC={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},$Q=Object.values(TC);gC.exports={AUDIT_STORE_NAME:HQ,INTERNAL_DBIS_NAME:BQ,DBI_DEFINITION_NAME:kQ,SEARCH_TYPES:FQ,TIMESTAMP_NAMES:GQ,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:xQ,TRANSACTIONS_DBI_NAMES_ENUM:TC,TRANSACTIONS_DBIS:$Q,OVERFLOW_MARKER:qQ}});var Dn=N((Tge,CC)=>{"use strict";var AC=M(),RC=Ht(),yC={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},bC=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),OC={500:bC("There was an error processing your request."),400:"Invalid request"},VQ=OC[yC.INTERNAL_SERVER_ERROR],KQ={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")},YQ={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},WQ={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"},jQ={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${RC.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${RC.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"},zQ={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${AC.INSERT_MODULE_ENUM.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 ${AC.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},NC={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"},QQ={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."},JQ={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")},XQ={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"},ZQ={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},e2={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")},IC={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")},wC={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")},t2={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"},r2={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},n2={...NC,...WQ,...KQ,...QQ,...JQ,...XQ,...ZQ,...e2,...zQ,...IC,...wC,...t2,...r2,...YQ};CC.exports={CHECK_LOGS_WRAPPER:bC,HDB_ERROR_MSGS:n2,DEFAULT_ERROR_MSGS:OC,DEFAULT_ERROR_RESP:VQ,HTTP_STATUS_CODES:yC,LMDB_ERRORS_ENUM:jQ,AUTHENTICATION_ERROR_MSGS:NC,VALIDATION_ERROR_MSGS:IC,ITC_ERRORS:wC}});var _e=N((Age,LC)=>{"use strict";var wl=Dn(),s2=j(),i2=M(),sh=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,DC),this.statusCode=n||wl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(wl.DEFAULT_ERROR_MSGS[n]?wl.DEFAULT_ERROR_MSGS[n]:wl.DEFAULT_ERROR_MSGS[wl.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&&s2[s](i)}},hg=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}},pg=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function DC(e,t,r,n=i2.LOG_LEVELS.ERROR,s=null,i=!1){if(PC(e))return e;let o=new sh(e,t,r,n,s);return i&&delete o.stack,o}a(DC,"handleHDBError");function PC(e){return e.__proto__.constructor.name===sh.name}a(PC,"isHDBError");LC.exports={isHDBError:PC,handleHDBError:DC,ClientError:hg,ServerError:pg,hdb_errors:wl}});var Tt=N((yge,kC)=>{"use strict";var qd=M(),o2=re(),nn=se(),$d=require("path"),a2=require("minimist"),MC=require("fs-extra"),UC=require("lodash");nn.initSync();var{CONFIG_PARAMS:$o,DATABASES_PARAM_CONFIG:xd,SYSTEM_SCHEMA_NAME:ih}=qd,kd,Fd,Gd;function vC(){if(kd!==void 0)return kd;if(nn.getHdbBasePath()!==void 0)return kd=nn.get($o.STORAGE_PATH)||$d.join(nn.getHdbBasePath(),qd.DATABASES_DIR_NAME),kd}a(vC,"getBaseSchemaPath");function BC(){if(Fd!==void 0)return Fd;if(nn.getHdbBasePath()!==void 0)return Fd=xC(ih),Fd}a(BC,"getSystemSchemaPath");function HC(){if(Gd!==void 0)return Gd;if(nn.getHdbBasePath()!==void 0)return Gd=nn.get(qd.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||$d.join(nn.getHdbBasePath(),qd.TRANSACTIONS_DIR_NAME),Gd}a(HC,"getTransactionAuditStoreBasePath");function c2(e,t){let r=nn.get($o.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||$d.join(HC(),e.toString())}a(c2,"getTransactionAuditStorePath");function xC(e,t){e=e.toString(),t=t&&t.toString();let r=nn.get(qd.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||$d.join(vC(),e)}a(xC,"getSchemaPath");function l2(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,a2(process.argv));let n=r[$o.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!o2.isObject(n))throw o;i=n}for(let o of i){let c=o[ih];if(!c)continue;let l=nn.get($o.DATABASES);l=l??{};let u=c?.tables?.[t]?.[xd.PATH];if(u)return UC.set(l,[ih,xd.TABLES,t,xd.PATH],u),nn.setProperty($o.DATABASES,l),u;let d=c?.[xd.PATH];if(d)return UC.set(l,[ih,xd.PATH],d),nn.setProperty($o.DATABASES,l),d}}let s=r[$o.STORAGE_PATH.toUpperCase()];if(s){if(!MC.pathExistsSync(s))throw new Error(s+" does not exist");let i=$d.join(s,e);return MC.mkdirsSync(i),nn.setProperty($o.STORAGE_PATH,s),i}return BC()}a(l2,"initSystemSchemaPaths");function u2(){kd=void 0,Fd=void 0,Gd=void 0}a(u2,"resetPaths");kC.exports={getBaseSchemaPath:vC,getSystemSchemaPath:BC,getTransactionAuditStorePath:c2,getTransactionAuditStoreBasePath:HC,getSchemaPath:xC,initSystemSchemaPaths:l2,resetPaths:u2}});var sn=N((Ige,VC)=>{"use strict";var d2=Dn().LMDB_ERRORS_ENUM,Oge=require("lmdb"),_2=Ht(),Nge=require("buffer").Buffer,{OVERFLOW_MARKER:FC,MAX_SEARCH_KEY_LENGTH:oh}=_2,GC=["number","string","symbol","boolean","bigint"];function f2(e){if(e=e?.primaryStore||e,!e)throw new Error(d2.ENV_REQUIRED)}a(f2,"validateEnv");function E2(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(E2,"stringifyData");function h2(e){return e instanceof Date?e.valueOf():e}a(h2,"convertKeyValueToWrite");function p2(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(GC.includes(typeof e))return e.length>oh?[e.slice(0,oh)+FC]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(GC.includes(typeof i))i.length>oh?r.push(i.slice(0,oh)+FC):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(p2,"getIndexedValues");var ah=0,qC=0;function $C(){qC=Date.now()-performance.now()}a($C,"adjustStartTime");$C();var m2=6e4;setInterval($C,m2).unref();function S2(){let e=performance.now()+qC;return e>ah?(ah=e,e):(ah+=488e-6,ah)}a(S2,"getNextMonotonicTime");VC.exports={validateEnv:f2,stringifyData:E2,convertKeyValueToWrite:h2,getNextMonotonicTime:S2,getIndexedValues:p2}});var Vd=N((Cge,KC)=>{"use strict";var T2=M().OPERATIONS_ENUM,mg=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=T2.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};KC.exports=mg});var Kd=N((Lge,zC)=>{"use strict";var Pge=Vd(),ch=M(),Sg=re(),YC=j(),g2=require("uuid"),{handleHDBError:lh,hdb_errors:A2}=_e(),{HDB_ERROR_MSGS:uh,HTTP_STATUS_CODES:dh}=A2;zC.exports=WC;function WC(e,t,r){for(let s=0;s<t.length;s++)jC(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];R2(i,r,e.operation)}}a(WC,"processRows");WC.validateAttribute=jC;function jC(e){if(Buffer.byteLength(String(e))>ch.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw lh(new Error,uh.ATTR_NAME_LENGTH_ERR(e),dh.BAD_REQUEST,void 0,void 0,!0);if(Sg.isEmptyOrZeroLength(e)||Sg.isEmpty(e.trim()))throw lh(new Error,uh.ATTR_NAME_NULLISH_ERR,dh.BAD_REQUEST,void 0,void 0,!0)}a(jC,"validateAttribute");function R2(e,t,r){if(!e.hasOwnProperty(t)||Sg.isEmptyOrZeroLength(e[t])){if(r===ch.OPERATIONS_ENUM.INSERT||r===ch.OPERATIONS_ENUM.UPSERT){e[t]=g2.v4();return}throw YC.error("Update transaction aborted due to record with no hash value:",e),lh(new Error,uh.RECORD_MISSING_HASH_ERR,dh.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ch.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw YC.error(e),lh(new Error,uh.HASH_VAL_LENGTH_ERR,dh.BAD_REQUEST,void 0,void 0,!0)}a(R2,"validateHash")});var QC,Pn,Tg,Cl=Ie(()=>{QC=require("events"),Pn=class extends QC.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Tg;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)}},Tg=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}}}});var ja={};je(ja,{server:()=>it});var JC,it,qr=Ie(()=>{JC=L(_i()),it={};(0,JC._assignPackageExport)("server",it)});var Rg={};je(Rg,{loadGQLSchema:()=>O2,start:()=>Ag,startOnMainThread:()=>b2});function Ag({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"),_=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let g of _.definitions)switch(g.kind){case l.OBJECT_TYPE_DEFINITION:let H=function(Y){if(Y.kind==="NonNullType"){let Q=H(Y.type);return Q.nullable=!1,Q}if(Y.kind==="ListType")return{type:"array",elements:H(Y.type)};let ne={type:Y.name?.value};return Object.defineProperty(ne,"location",{value:Y.loc.startToken}),ne};a(H,"getProperty");let S=g.name.value,y=[],I={table:null,database:null,properties:y};E.set(S,I);for(let Y of g.directives){if(Y.name.value==="table"){for(let ne of Y.arguments)I[ne.name.value]=ne.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=S),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,f.push(I)}if(Y.name.value==="sealed"&&(I.sealed=!0),Y.name.value==="splitSegments"&&(I.splitSegments=!0),Y.name.value==="replicate"&&(I.replicate=!0),Y.name.value==="export"){I.export=!0;for(let ne of Y.arguments)typeof I.export!="object"&&(I.export={}),I.export[ne.name.value]=ne.value.value}}let U=!1,X={};for(let Y of g.fields){let V=H(Y.type);V.name=Y.name.value,y.push(V),X[V.name]=void 0;for(let ne of Y.directives){let Q=ne.name.value;if(Q==="primaryKey")U?console.warn("Can not define two attributes as a primary key at",ne.loc):(V.isPrimaryKey=!0,U=!0);else if(Q==="indexed")V.indexed=!0;else if(Q==="computed"){for(let de of ne.arguments||[])if(de.name.value==="from"){let W=de.value.value;V.computed={from:m(W,de,X)},V.version==null&&(V.version=W)}else de.name.value==="version"&&(V.version=de.value.value);V.computed=V.computed||!0}else if(Q==="relationship"){let de={};for(let W of ne.arguments)de[W.name.value]=W.value.value;V.relationship=de}else if(Q==="createdTime")V.assignCreatedTime=!0;else if(Q==="updatedTime")V.assignUpdatedTime=!0;else if(Q==="expiresAt")V.expiresAt=!0;else if(Q==="allow"){let de=V.authorizedRoles=[];for(let W of ne.arguments)W.name.value==="role"&&de.push(W.value.value)}else server.knownGraphQLDirectives.includes(Q)&&console.warn(`@${Q} is an unknown directive, at`,ne.loc)}}I.type=S,S==="Query"&&(h=I)}function T(g){let S=E.get(g.type);S?(Object.defineProperty(g,"properties",{value:S.properties}),Object.defineProperty(g,"definition",{value:S})):g.type==="array"?T(g.elements):y2.includes(g.type)||(0,ZC.getWorkerIndex)()===0&&console.error(`The type ${g.type} is unknown at line ${g.location.line}, column ${g.location.column}, in ${s}`)}a(T,"connectPropertyType");for(let g of E.values())for(let S of g.properties)T(S);for(let g of f)g.tableClass=e(g),g.export&&(g.export.name===""?i.set((0,gg.dirname)(n),g.tableClass):i.set((0,gg.dirname)(n)+"/"+(g.export.name||g.type),g.tableClass,g.export));function m(g,S,y){return new XC.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${g}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(m,"createComputedFrom")}}var gg,XC,ZC,y2,b2,O2,eD=Ie(()=>{gg=require("path"),XC=require("node:vm");De();ZC=L(dt()),y2=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);a(Ag,"start");b2=Ag,O2=Ag({ensureTable:Et}).handleFile});var aD={};je(aD,{parse:()=>bg,streamAsJSON:()=>Yd,stringify:()=>za});function Yd(e){return new yg({value:e})}function tD(e){return console.error(e),JSON.stringify(e.toString())}function rD(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function za(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===iD)return oD(e);if(t.resolution)return t.resolution.then(()=>za(e));throw t}}function oD(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+=oD(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+za(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function bg(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),w2.test(e)?N2.parse(e):JSON.parse(e)):null}var nD,sD,N2,I2,iD,yg,w2,Og=Ie(()=>{nD=require("stream"),sD=L(require("json-bigint-fixes")),N2=(0,sD.default)({useNativeBigInt:!0}),I2=1e4,iD={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw iD};a(Yd,"streamAsJSON");yg=class extends nD.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=>(o={done:!1,value:{error:c.toString()}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:c.toString()}},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),tD)}catch(s){yield tD(s)}else yield za(t)}else yield za(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);rD(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>I2?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 rD(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(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(tD,"handleError");a(rD,"when");a(za,"stringify");a(oD,"jsStringify");w2=/[[,:]\s*-?\d{16,}/;a(bg,"parse")});var gD=N((Fge,TD)=>{"use strict";var Ng=require("recursive-iterator"),C2=require("alasql"),Ig=require("clone"),cD=re(),{handleHDBError:lD,hdb_errors:D2}=_e(),{HDB_ERROR_MSGS:uD,HTTP_STATUS_CODES:dD}=D2,{getDatabases:P2}=(De(),oe(lt)),L2=["DISTINCT_ARRAY"],_D=Symbol("validateTables"),wg=Symbol("validateTable"),kge=Symbol("getAllColumns"),fD=Symbol("validateAllColumns"),_h=Symbol("findColumn"),ED=Symbol("validateOrderBy"),Wd=Symbol("validateSegment"),Cg=Symbol("validateColumn"),hD=Symbol("setColumnsForTable"),pD=Symbol("checkColumnsForAsterisk"),mD=Symbol("validateGroupBy"),SD=Symbol("hasColumns"),Dg=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_D](),this[pD](),this[fD]()}[_D](){if(this[SD]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[wg](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[wg](t.table)})}}[SD](){let t=!1,r=new Ng(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[wg](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=P2();if(!r[t.databaseid])throw lD(new Error,uD.SCHEMA_NOT_FOUND(t.databaseid),dD.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw lD(new Error,uD.TABLE_NOT_FOUND(t.databaseid,t.tableid),dD.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Ig(s);i.table=Ig(t),this.attributes.push(i)})}[_h](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[pD](){let t=new Ng(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[hD](r.tableid)}[hD](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new C2.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[fD](){this[Wd](this.statement.columns,!1),this[Wd](this.statement.joins,!1),this[Wd](this.statement.where,!1),this[mD](this.statement.group,!1),this[Wd](this.statement.order,!0)}[Wd](t,r){if(!t)return;let n=new Ng(t),s=[];for(let{node:i,path:o}of n)!cD.isEmpty(i)&&!cD.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ED](i):s.push(this[Cg](i)));return s}[mD](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&L2.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Ig(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[_h](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[_h](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ED](t){let r=this.statement.columns.filter(n=>n.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Cg](t)}[Cg](t){let r=this[_h](t),n=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${n}`;if(r.length>1)throw`ambiguous column reference ${n}`;return r[0]}};TD.exports=Dg});var RD=N((qge,AD)=>{"use strict";var Pg=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};AD.exports=Pg});var bD=N((Vge,yD)=>{"use strict";var Lg=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};yD.exports=Lg});var wD={};je(wD,{HAS_EXPIRATION:()=>hh,HAS_RESIDENCY_ID:()=>Fg,HAS_STRUCTURE_UPDATE:()=>ph,LAST_TIMESTAMP_PLACEHOLDER:()=>Jd,LOCAL_TIMESTAMP:()=>M2,METADATA:()=>jd,NO_TIMESTAMP:()=>Ug,PENDING_LOCAL_TIME:()=>Gg,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>kg,RecordEncoder:()=>xg,TIMESTAMP_ASSIGN_LAST:()=>v2,TIMESTAMP_ASSIGN_NEW:()=>ND,TIMESTAMP_ASSIGN_PREVIOUS:()=>ID,TIMESTAMP_PLACEHOLDER:()=>fh,TIMESTAMP_RECORD_PREVIOUS:()=>vg,getUpdateRecord:()=>qg,handleLocalTimeForGets:()=>mh});function H2(){return Qd[0]=Qd[0]^64,U2.getFloat64(0)}function mh(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),l=c?.value,u=l?.[jd];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[jd]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let l=c.value,u=l[jd];return u>=0&&(c.metadataFlags=u,c.localTime=l.localTime,c.value=l.value,c.residencyId=l.residencyId,l.expiresAt>=0&&(c.expiresAt=l.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Qa.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let l=0;l<Qa.length;l++){let u=Qa[l].deref();(!u||u.isDone||u.isCommitted)&&Qa.splice(l--,1)}},i.prototype.done.isTracked=!0}return e}function qg(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",_,E){_||l==null?Dl=i?.localTime?vg|ID:Ug:Dl=l?i?.localTime?vg|16384:ND|16384:Ug;let f=u?.expiresAt;if(f>=0&&(c|=hh),zd=c,Bg=f,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Dl>0},T,m=0;try{let g=i?.residencyId,S=u?.residencyId;S&&(Hg=S,zd|=Fg,m|=Ja),g!==S&&(m|=Xa,g||(g=0)),c&hh&&(m|=Zd),u?.originatingOperation&&(m|=Xd),_&&(h.ifVersion=T=i?.version??null);let y=e.put(n,s,h);if(l){let I=u?.user?.username;if(E&&(Eh=e.encoder.encode(E)),e.encoder.hasStructureUpdate&&(m|=ph,e.encoder.hasStructureUpdate=!1),_&&i?.localTime){let U=i?.localTime,H=r.get(U);if(H){let X=xt(H).previousLocalTime;return r.put(U,Pl(o,t,n,X,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,Eh,m,S,g,f),{ifVersion:T}),y}}r.put(Jd,Pl(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,Eh,m,S,g,f,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:T})}return y}catch(g){throw g.message+=" id: "+n+" options: "+h,g}}}var OD,Mg,fh,Jd,kg,M2,jd,Qd,U2,Ug,ND,v2,ID,vg,hh,Fg,Gg,ph,B2,Eh,Dl,zd,Bg,Hg,xg,Qa,Ll=Ie(()=>{OD=require("msgpackr");ji();Mg=L(j()),fh=new Uint8Array([1,1,1,1,4,64,0,0]),Jd=new Uint8Array([1,1,1,1,1,0,0,0]),kg=new Uint8Array([1,1,1,1,3,64,0,0]),M2=Symbol("local-timestamp"),jd=Symbol("metadata"),Qd=new Uint8Array(8),U2=new DataView(Qd.buffer,0,8),Ug=0,ND=0,v2=1,ID=3,vg=4,hh=16,Fg=32,Gg=1,ph=256,Dl=0,zd=-1,Bg=-1,Hg=0,xg=class extends OD.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(s,i){if(Dl||zd>=0){let o=0,c=Dl;c&&(o+=8,Dl=0);let l=zd,u=Bg,d=Hg;l>=0&&(o+=2,zd=-1,u>=0&&(o+=8,Bg=-1),d&&(o+=4,Hg=0));let _=B2=r.call(this,s,i|2048|o);Eh=_.subarray((_.start||0)+o,_.end);let E=_.start||0;return c&&(fh[4]=c,fh[5]=c>>8,_.set(fh,E),E+=8),l>=0&&(_[E++]=l&31,_[E++]=l>>5,u>=0&&((_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(E,u),E+=8),d&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setUint32(E,d)),_}else return r.call(this,s,i)};let n=this.saveStructures;this.saveStructures=function(s,i){let o=n.call(this,s,i);return this.hasStructureUpdate=!0,o}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Qd,0,c),c+=8;else for(let E=0;E<8;E++)Qd[E]=t[c++];l=H2(),i=t[c]}let u,d;i<32&&(o=i|t[c+1]<<5,c+=2,o&hh&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&Fg&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let _=r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c);return{localTime:l,value:_,[jd]:o,expiresAt:u,residencyId:d}}return r?.valueAsBuffer?t:super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(H2,"getTimestamp");a(mh,"handleLocalTimeForGets");Qa=[];setInterval(()=>{for(let e=0;e<Qa.length;e++){let t=Qa[e].deref();!t||t.isDone||t.isCommitted?Qa.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(Mg.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):Mg.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(qg,"getUpdateRecord")});var e_=N((zge,DD)=>{"use strict";var CD=se(),x2=M(),{RecordEncoder:k2}=(Ll(),oe(wD)),jge=require("fs");CD.initSync();var F2=CD.get(x2.CONFIG_PARAMS.STORAGE_CACHING)!==!1,$g=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=F2&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:k2})}};DD.exports=$g});var t_=N((Jge,PD)=>{"use strict";var Ln=se(),cs=M();Ln.initSync();var Sh=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Ln.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ln.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ln.get(cs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ln.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Ln.get(cs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Ln.get(cs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Ln.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Ln.get(cs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Ln.get(cs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};PD.exports=Sh;Sh.MAX_DBS=1e4});var ht=N((Zge,GD)=>{"use strict";var Kg=require("lmdb"),xs=require("fs-extra"),Mn=require("path"),Th=sn(),UD=j(),on=Dn().LMDB_ERRORS_ENUM,gh=bD(),Yg=e_(),vD=t_(),Vo=Ht(),LD=M(),{table:G2,resetDatabases:q2}=(De(),oe(lt)),MD=se(),ks=Vo.INTERNAL_DBIS_NAME,BD=Vo.DBI_DEFINITION_NAME,$2="data.mdb",V2="lock.mdb",r_=".mdb",K2="-lock",Vg=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ls(t,r),this.key_type=this.dbi[Vo.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Vo.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Kg.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ah(e,t){if(e===void 0)throw new Error(on.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(on.ENV_NAME_REQUIRED)}a(Ah,"pathEnvNameValidation");async function Wg(e,t,r=!0){try{await xs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(on.INVALID_BASE_PATH):n}try{let n=Mn.join(e,t+r_);return await xs.access(n,xs.constants.R_OK|xs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await xs.access(Mn.join(e,t,$2),xs.constants.R_OK|xs.constants.F_OK),Mn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(on.INVALID_ENVIRONMENT)}else throw new Error(on.INVALID_ENVIRONMENT);throw n}}a(Wg,"validateEnvironmentPath");function Rh(e,t){if(Th.validateEnv(e),t===void 0)throw new Error(on.DBI_NAME_REQUIRED)}a(Rh,"validateEnvDBIName");async function Y2(e,t,r=!1,n=!1){Ah(e,t);let s=Mn.basename(e);t=t.toString();let i=MD.get(LD.CONFIG_PARAMS.DATABASES);i||MD.setProperty(LD.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Wg(e,t,n),HD(e,t,r)}catch(o){if(o.message===on.INVALID_ENVIRONMENT){let c=Mn.join(e,t);await xs.mkdirp(n?c:e);let l=new vD(n?c:c+r_,!1),u=Kg.open(l);u.dbis=Object.create(null);let d=new Yg(!1);u.openDB(ks,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let _=jg(e,t,r);return u[Vo.ENVIRONMENT_NAME_KEY]=_,global.lmdb_map[_]=u,u}throw o}}a(Y2,"createEnvironment");async function W2(e,t,r,n=!0){Ah(e,t),t=t.toString();let s=Mn.join(e,t);return G2({table:t,database:Mn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(W2,"copyEnvironment");async function HD(e,t,r=!1){Ah(e,t),t=t.toString();let n=jg(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[n]!==void 0)return global.lmdb_map[n];let s=await Wg(e,t),i=Mn.join(e,t+r_),o=s!=i,c=new vD(s,o),l=Kg.open(c);l.dbis=Object.create(null);let u=kD(l);for(let d=0;d<u.length;d++)ls(l,u[d]);return l[Vo.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(HD,"openEnvironment");async function j2(e,t,r=!1){Ah(e,t),t=t.toString();let n=Mn.join(e,t+r_),s=await Wg(e,t);if(global.lmdb_map!==void 0){let i=jg(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await xD(o),delete global.lmdb_map[i]}}await xs.remove(s),await xs.remove(s===n?s+K2:Mn.join(Mn.dirname(s),V2))}a(j2,"deleteEnvironment");async function xD(e){Th.validateEnv(e);let t=e[Vo.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(xD,"closeEnvironment");function jg(e,t,r=!1){let s=`${Mn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(jg,"getCachedEnvironmentName");function z2(e){Th.validateEnv(e);let t=Object.create(null),r=ls(e,ks);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==ks)try{t[n]=Object.assign(new gh,s)}catch{UD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(z2,"listDBIDefinitions");function kD(e){Th.validateEnv(e);let t=[],r=ls(e,ks);for(let{key:n}of r.getRange({start:!1}))n!==ks&&t.push(n);return t}a(kD,"listDBIs");function Q2(e,t){let n=ls(e,ks).getEntry(t),s=new gh;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{UD.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(Q2,"getDBIDefinition");function FD(e,t,r,n=!r){if(Rh(e,t),t=t.toString(),t===ks)throw new Error(on.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ls(e,t)}catch(s){if(s.message===on.DBI_DOES_NOT_EXIST){let i=new Yg(r,n===!0),o=e.openDB(t,i),c=new gh(r===!0,n);return o[BD]=c,ls(e,ks).putSync(t,c),e.dbis[t]=o,o}throw s}}a(FD,"createDBI");function ls(e,t){if(Rh(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ks?r=Q2(e,t):r=new gh,r===void 0)throw new Error(on.DBI_DOES_NOT_EXIST);let n;try{let s=new Yg(r.dup_sort,r.useVersions);if(n=e.openDB(t,s),n.db===void 0)throw new Error("MDB_NOTFOUND")}catch(s){throw s.message.includes("MDB_NOTFOUND")===!0?new Error(on.DBI_DOES_NOT_EXIST):s}return n[BD]=r,e.dbis[t]=n,n}a(ls,"openDBI");function J2(e,t){Rh(e,t),t=t.toString();let r=ls(e,t),n=r.getStats();return r[Vo.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(J2,"statDBI");async function X2(e,t){try{let r=Mn.join(e,t+r_);return(await xs.stat(r)).size}catch{throw new Error(on.INVALID_ENVIRONMENT)}}a(X2,"environmentDataSize");function Z2(e,t){if(Rh(e,t),t=t.toString(),t===ks)throw new Error(on.CANNOT_DROP_INTERNAL_DBIS_NAME);ls(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ls(e,ks).removeSync(t)}a(Z2,"dropDBI");function e4(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ls(e,i)}catch(o){if(o.message===on.DBI_DOES_NOT_EXIST)FD(e,i,i!==t,i===t),n=!0;else throw o}}n&&q2()}a(e4,"initializeDBIs");GD.exports={openDBI:ls,openEnvironment:HD,createEnvironment:Y2,listDBIs:kD,listDBIDefinitions:z2,createDBI:FD,dropDBI:Z2,statDBI:J2,deleteEnvironment:j2,initializeDBIs:e4,TransactionCursor:Vg,environmentDataSize:X2,copyEnvironment:W2,closeEnvironment:xD}});var $D=N((tAe,qD)=>{"use strict";var zg=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};qD.exports=zg});var KD=N((nAe,VD)=>{"use strict";var Qg=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};VD.exports=Qg});var WD=N((iAe,YD)=>{"use strict";var Jg=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};YD.exports=Jg});var ec=N((uAe,QD)=>{"use strict";var t4=ht(),r4=$D(),n4=KD(),s4=WD(),hi=sn(),n_=Dn().LMDB_ERRORS_ENUM,i4=Ht(),zi=M(),o4=re(),a4=require("uuid"),aAe=require("lmdb"),{handleHDBError:c4,hdb_errors:l4}=_e(),{OVERFLOW_MARKER:cAe,MAX_SEARCH_KEY_LENGTH:lAe}=i4,jD=se();jD.initSync();var yh=jD.get(zi.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Xg=zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Za=zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function u4(e,t,r,n,s=hi.getNextMonotonicTime()){rA(e,t,r,n),Zg(e,t,r);let i=new r4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];zD(u,!0,s);let d=d4(e,t,r,u),_=u[t];o.push(d),c.push(_)}return eA(o,c,n,i,s)}a(u4,"insertRecords");function d4(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][zi.FUNC_VAL],n[o]=c)}let l=hi.getIndexedValues(c),u=e.dbis[o];if(l){yh&&u.prefetch(l.map(d=>({key:d,value:s})),bh);for(let d=0,_=l.length;d<_;d++)u.put(l[d],s)}}yh&&e.dbis[t].prefetch([s],bh),e.dbis[t].put(s,n,n[Za])})}a(d4,"insertRecord");function _4(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(_4,"removeSkippedRecords");function zD(e,t,r){let n=r>0;(n||!Number.isInteger(e[Za]))&&(e[Za]=r||(r=hi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Xg]))&&(e[Xg]=r||hi.getNextMonotonicTime()):delete e[Xg]}a(zD,"setTimestamps");function Zg(e,t,r){r.indexOf(zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(zi.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(zi.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),t4.initializeDBIs(e,t,r)}a(Zg,"initializeTransaction");async function f4(e,t,r,n,s=hi.getNextMonotonicTime()){rA(e,t,r,n),Zg(e,t,r);let i=new n4,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],_=d[t],E;try{E=tA(e,t,d,_,i,!0,s)}catch{i.skipped_hashes.push(_),o.push(u);continue}c.push(E),l.push(_)}return eA(c,l,n,i,s,o)}a(f4,"updateRecords");async function E4(e,t,r,n,s=hi.getNextMonotonicTime()){try{rA(e,t,r,n)}catch(l){throw c4(l,l.message,l4.HTTP_STATUS_CODES.BAD_REQUEST)}Zg(e,t,r);let i=new s4,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;o4.isEmpty(u[t])?(d=a4.v4(),u[t]=d):d=u[t];let _=tA(e,t,u,d,i,!1,s);o.push(_),c.push(d)}return eA(o,c,n,i,s)}a(E4,"upsertRecords");async function eA(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,l=o.length;c<l;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||hi.getNextMonotonicTime(),_4(r,i),n}a(eA,"finalizeWrite");function tA(e,t,r,n,s,i=!1,o){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(zD(r,!d,o),Number.isInteger(r[Za])&&u[Za]>r[Za])return!1;d&&s.original_records.push(u);let _,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],m=e.dbis[h];if(m===void 0)continue;let g=u[h];if(typeof T=="function"){let y=T([[u]]);Array.isArray(y)&&(T=y[0][zi.FUNC_VAL],r[h]=T)}if(T===g)continue;let S=hi.getIndexedValues(g);if(S){yh&&m.prefetch(S.map(y=>({key:y,value:n})),bh);for(let y=0,I=S.length;y<I;y++)m.remove(S[y],n)}if(S=hi.getIndexedValues(T),S){yh&&m.prefetch(S.map(y=>({key:y,value:n})),bh);for(let y=0,I=S.length;y<I;y++)m.put(S[y],n)}}let f={...u,...r};c.put(n,f,f[Za])},"do_put");return l?_=c.ifVersion(n,l.version,E):_=c.ifNoExists(n,E),_.then(f=>f?!0:tA(e,t,r,n,s,i,o))}a(tA,"updateUpsertRecord");function h4(e,t,r){if(hi.validateEnv(e),t===void 0)throw new Error(n_.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(n_.WRITE_ATTRIBUTES_REQUIRED):new Error(n_.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(h4,"validateBasic");function rA(e,t,r,n){if(h4(e,t,r),!Array.isArray(n))throw n===void 0?new Error(n_.RECORDS_REQUIRED):new Error(n_.RECORDS_MUST_BE_ARRAY)}a(rA,"validateWrite");function bh(){}a(bh,"noop");QD.exports={insertRecords:u4,updateRecords:f4,upsertRecords:E4}});var Qi=N((_Ae,p4)=>{p4.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var mi=N((fAe,ZD)=>{"use strict";var XD=re(),JD=M(),Ml=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,pi=require("joi"),Ko={schema_format:{pattern:Ml,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},m4=pi.alternatives(pi.string().min(1).max(Ko.schema_length.maximum).pattern(Ml).messages({"string.pattern.base":"{:#label} "+Ko.schema_format.message}),pi.number(),pi.array()).required(),S4=pi.alternatives(pi.string().min(1).max(Ko.schema_length.maximum).pattern(Ml).messages({"string.pattern.base":"{:#label} "+Ko.schema_format.message}),pi.number()),T4=pi.alternatives(pi.string().min(1).max(Ko.schema_length.maximum).pattern(Ml).messages({"string.pattern.base":"{:#label} "+Ko.schema_format.message}),pi.number()).required();function g4(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Ko.schema_length.maximum?`'${e}' maximum of 250 characters`:Ml.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(g4,"checkValidTable");function A4(e,t){return XD.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(A4,"validateSchemaExists");function R4(e,t){let r=t.state.ancestors[0].schema;return XD.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(R4,"validateTableExists");function y4(e,t){return e.toLowerCase()===JD.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${JD.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(y4,"validateSchemaName");ZD.exports={common_validators:Ko,schema_regex:Ml,hdb_schema_table:m4,validateSchemaExists:A4,validateTableExists:R4,validateSchemaName:y4,checkValidTable:g4,hdb_database:S4,hdb_table:T4}});var gt=N((hAe,eP)=>{"use strict";var an=require("validate.js");an.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||an.validators.type.checks[t](e)?null:` must be a '${t}' value`};an.validators.type.checks={Object:a(function(e){return an.isObject(e)&&!an.isArray(e)},"Object"),Array:an.isArray,Integer:an.isInteger,Number:an.isNumber,String:an.isString,Date:an.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};an.validators.hasValidFileExt=function(e,t){return an.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};eP.exports={validateObject:b4,validateObjectAsync:O4,validateBySchema:N4};function b4(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=an(e,t,{format:"flat"});return r?new Error(r):null}a(b4,"validateObject");async function O4(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await an.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(O4,"validateObjectAsync");function N4(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(N4,"validateBySchema")});var Oh=N((mAe,tP)=>{var{common_validators:Si}=mi(),i_=gt(),s_="is required",tr={database:{presence:!1,format:Si.schema_format,length:Si.schema_length},schema:{presence:!1,format:Si.schema_format,length:Si.schema_length},table:{presence:!0,format:Si.schema_format,length:Si.schema_length},attribute:{presence:!0,format:Si.schema_format,length:Si.schema_length},hash_attribute:{presence:!0,format:Si.schema_format,length:Si.schema_length}};function o_(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(o_,"makeAttributesStrings");function I4(e){return e=o_(e),tr.table.presence=!1,tr.attribute.presence=!1,tr.hash_attribute.presence=!1,i_.validateObject(e,tr)}a(I4,"schema_object");function w4(e){return e=o_(e),tr.table.presence={message:s_},tr.attribute.presence=!1,tr.hash_attribute.presence=!1,i_.validateObject(e,tr)}a(w4,"table_object");function C4(e){return e=o_(e),tr.table.presence={message:s_},tr.attribute.presence=!1,i_.validateObject(e,tr)}a(C4,"create_table_object");function D4(e){return e=o_(e),tr.table.presence={message:s_},tr.attribute.presence={message:s_},tr.hash_attribute.presence=!1,i_.validateObject(e,tr)}a(D4,"attribute_object");function P4(e){return e=o_(e),tr.table.presence={message:s_},tr.attribute.presence=!1,tr.hash_attribute.presence=!1,i_.validateObject(e,tr)}a(P4,"describe_table");function L4(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(L4,"validateTableResidence");tP.exports={schema_object:I4,create_table_object:C4,table_object:w4,attribute_object:D4,describe_table:P4,validateTableResidence:L4}});var nP=N((TAe,rP)=>{"use strict";var M4=require("uuid"),nA=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||M4.v4(),this.schema_table=`${this.schema}.${this.table}`}};rP.exports=nA});var Nh=N((AAe,sP)=>{"use strict";var U4=nP(),sA=class extends U4{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};sP.exports=sA});var oP=N((yAe,iP)=>{"use strict";iP.exports=B4;var v4="inserted";function B4(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===v4?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(B4,"returnObject")});var Ih=N((NAe,uP)=>{"use strict";var H4=M(),iA=ht(),x4=ec(),{getSystemSchemaPath:k4,getSchemaPath:F4}=Tt(),OAe=Qi(),G4=Oh(),q4=Nh(),$4=oP(),{handleHDBError:aP,hdb_errors:lP}=_e(),cP=re(),{HTTP_STATUS_CODES:V4}=lP,K4="inserted";uP.exports=Y4;async function Y4(e){let t=G4.attribute_object(e);if(t)throw aP(new Error,t.message,lP.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&cP.checkGlobalSchemaTable(e.schema,e.table);if(r)throw aP(new Error,r,V4.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=cP.isEmpty(e.dup_sort)||e.dup_sort=="true";let n=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(n=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(n)&&n.length>0){for(let i of n)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let s=new q4(e.schema,e.table,e.attribute,e.id);try{let i=await iA.openEnvironment(F4(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);iA.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await iA.openEnvironment(k4(),H4.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await x4.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_attribute_attributes,[s]);return $4(K4,c,{records:[s]},l)}catch(i){throw i}}a(Y4,"lmdbCreateAttribute")});var aA=N((wAe,_P)=>{var{hdb_table:W4,hdb_database:dP}=mi(),j4=gt(),oA=require("joi"),z4={undefined:"undefined",null:"null"},Q4=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||z4[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),J4=oA.object({database:dP,schema:dP,table:W4,records:oA.array().items(oA.object().custom(Q4)).required()});_P.exports=function(e){return j4.validateBySchema(e,J4)}});var a_=N((PAe,EP)=>{"use strict";var Ji=re(),fP=j(),DAe=aA(),{getDatabases:X4}=(De(),oe(lt)),{ClientError:tc}=_e();EP.exports=Z4;function Z4(e){if(Ji.isEmpty(e))throw new tc("invalid update parameters defined.");if(Ji.isEmptyOrZeroLength(e.schema))throw new tc("invalid schema specified.");if(Ji.isEmptyOrZeroLength(e.table))throw new tc("invalid table specified.");if(!Array.isArray(e.records))throw new tc("records must be an array");let t=X4()[e.schema]?.[e.table];if(Ji.isEmpty(t))throw new tc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Ji.isEmptyOrZeroLength(o[r]))throw fP.error("a valid hash attribute must be provided with update record:",o),new tc("a valid hash attribute must be provided with update record, check log for more info");if(!Ji.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw fP.error(`a valid hash value must be provided with ${e.operation} record:`,o),new tc(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ji.isEmpty(o[r])&&o[r]!==""&&n.has(Ji.autoCast(o[r]))&&(o.skip=!0),n.add(Ji.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(Z4,"insertUpdateValidate")});var pP=N((MAe,hP)=>{"use strict";var cA=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};hP.exports=cA});var TP=N((vAe,SP)=>{"use strict";var lA=ht(),eJ=j(),mP=Dn().LMDB_ERRORS_ENUM;SP.exports=tJ;async function tJ(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await lA.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==mP.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await lA.closeEnvironment(global.lmdb_map[n]),await lA.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==mP.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){eJ.error(t)}}a(tJ,"cleanLMDBMap")});var Xi=N((HAe,yP)=>{"use strict";var c_=require("crypto"),rJ=se(),{CONFIG_PARAMS:nJ}=M(),AP="aes-256-cbc",sJ=32,iJ=16,uA=64,RP=32,oJ=uA+RP,gP=new Map;yP.exports={encrypt:aJ,decrypt:cJ,createNatsTableStreamName:lJ};function aJ(e){let t=c_.randomBytes(sJ),r=c_.randomBytes(iJ),n=c_.createCipheriv(AP,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(aJ,"encrypt");function cJ(e){let t=e.substr(0,uA),r=e.substr(uA,RP),n=e.substr(oJ,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=c_.createDecipheriv(AP,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(cJ,"decrypt");function lJ(e,t){let r=rJ.get(nJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=gP.get(r);return n||(n=c_.createHash("md5").update(r).digest("hex"),gP.set(r,n)),n}a(lJ,"createNatsTableStreamName")});var Zi=N((FAe,NP)=>{"use strict";var kAe=$r(),l_=j(),bP=Oh(),uJ=Xi(),wh=re(),{handleHDBError:Ch,hdb_errors:dJ}=_e(),{HDB_ERROR_MSGS:Dh,HTTP_STATUS_CODES:dA}=dJ,OP=se();OP.initSync();var{getDatabases:_A}=(De(),oe(lt)),_J=require("fs-extra"),fJ=M();NP.exports={describeAll:EJ,describeTable:Ph,describeSchema:hJ};async function EJ(e={}){try{let t=wh.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=_A(),o={},c={},l=[],u=e?.exact_count;for(let _ in i){o[_]=!0,!t&&!s&&!r&&(c[_]=e.hdb_user?.role?.permission[_]?.describe);let E=i[_];for(let f in E)try{let h;if(t||s||r)h=await Ph({schema:_,table:f,exact_count:u});else if(n&&n[_].describe&&n[_].tables[f].describe){let T=n[_].tables[f].attribute_permissions;h=await Ph({schema:_,table:f,exact_count:u},T)}h&&l.push(h)}catch(h){l_.error(h)}}let d={};for(let _ in l)t||s||r?(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]):c[l[_].schema]&&(d[l[_].schema]==null&&(d[l[_].schema]={}),d[l[_].schema][l[_].name]=l[_],o[l[_].schema]&&delete o[l[_].schema]);for(let _ in o)t||s||r?d[_]={}:c[_]&&(d[_]={});return d}catch(t){return l_.error("Got an error in describeAll"),l_.error(t),Ch(new Error,Dh.DESCRIBE_ALL_ERR)}}a(EJ,"describeAll");async function Ph(e,t){wh.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=bP.describe_table(e);if(i)throw i;let c=_A()[r];if(!c)throw Ch(new Error,Dh.SCHEMA_NOT_FOUND(e.schema),dA.NOT_FOUND);let l=c[n];if(!l)throw Ch(new Error,Dh.TABLE_NOT_FOUND(e.schema,e.table),dA.NOT_FOUND);function u(f){d.push({attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),l.attributes.forEach(h=>{f[h.name]&&u(h)})}else l.attributes?.forEach(f=>u(f));let _;try{_=(await _J.stat(l.primaryStore.env.path)).size}catch(f){l_.warn("unable to get database size",f)}let E={schema:r,name:l.tableName,hash_attribute:l.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:_};l.replicate!==void 0&&(E.replicate=l.replicate),l.expirationMS!==void 0&&(E.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(E.sealed=l.sealed),l.sources?.length>0&&(E.sources=l.sources.map(f=>f.name).filter(f=>f&&f!=="NATSReplicator"&&f!=="Replicator")),OP.get(fJ.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(E.clustering_stream_name=uJ.createNatsTableStreamName(E.schema,E.name));try{let f=l.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.table_size=l.getSize(),E.db_audit_size=l.getAuditSize(),E.estimated_record_range=f.estimatedRange;let h=l.auditStore;if(h)for(let T of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=T[0];if(!E.last_updated_record&&l.indices.__updatedtime__)for(let T of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=T}catch(f){l_.warn(`unable to stat table dbi due to ${f}`)}return E}a(Ph,"descTable");async function hJ(e){wh.transformReq(e);let t=bP.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=_A()[n];if(!i)throw Ch(new Error,Dh.SCHEMA_NOT_FOUND(e.schema),dA.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),wh.isEmpty(l)||l.describe){let u=await Ph({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(hJ,"describeSchema")});var Fs=N((VAe,PP)=>{var pJ=Qi(),{callbackify:wP,promisify:mJ}=require("util"),{getDatabases:CP}=(De(),oe(lt));PP.exports={setSchemaDataToGlobal:IP,getTableSchema:SJ,getSystemSchema:TJ,setSchemaDataToGlobalAsync:mJ(IP)};var DP=Zi(),qAe=wP(DP.describeAll),$Ae=wP(DP.describeTable);function IP(e){global.hdb_schema=CP(),e&&e()}a(IP,"setSchemaDataToGlobal");function SJ(e,t,r){let n=CP()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(SJ,"getTableSchema");function TJ(){return pJ}a(TJ,"getSystemSchema")});var cn=N((YAe,vP)=>{"use strict";var Mh=aA(),Cr=re(),gJ=require("util"),Uh=Un(),AJ=Fs(),LP=j(),{handleHDBError:rc,hdb_errors:RJ}=_e(),{HTTP_STATUS_CODES:nc}=RJ,yJ=gJ.promisify(AJ.getTableSchema),bJ="updated",MP="inserted",UP="upserted";vP.exports={insert:NJ,update:IJ,upsert:wJ,validation:OJ,flush:CJ};async function OJ(e){if(Cr.isEmpty(e))throw new Error("invalid update parameters defined.");if(Cr.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Cr.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await yJ(e.schema,e.table),r=Mh(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Cr.isEmptyOrZeroLength(c[n]))throw LP.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!Cr.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw LP.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Cr.isEmpty(c[n])&&c[n]!==""&&s.has(Cr.autoCast(c[n]))&&(c.skip=!0),s.add(Cr.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(OJ,"validation");async function NJ(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Mh(e);if(t)throw rc(new Error,t.message,nc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw rc(new Error,r,nc.BAD_REQUEST);let n=await Uh.createRecords(e);return Lh(MP,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(NJ,"insertData");async function IJ(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Mh(e);if(t)throw rc(new Error,t.message,nc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw rc(new Error,r,nc.BAD_REQUEST);let n=await Uh.updateRecords(e);return Cr.isEmpty(n.existing_rows)?Lh(bJ,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Lh(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(IJ,"updateData");async function wJ(e){if(e.operation!=="upsert")throw rc(new Error,"invalid operation, must be upsert",nc.INTERNAL_SERVER_ERROR);let t=Mh(e);if(t)throw rc(new Error,t.message,nc.BAD_REQUEST);Cr.transformReq(e);let r=Cr.checkSchemaTableExist(e.schema,e.table);if(r)throw rc(new Error,r,nc.BAD_REQUEST);let n=await Uh.upsertRecords(e);return Lh(UP,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(wJ,"upsertData");function Lh(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===MP?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===UP?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Lh,"returnObject");function CJ(e){return Cr.transformReq(e),Uh.flush(e.schema,e.table)}a(CJ,"flush")});var EA=N((jAe,xP)=>{var DJ=gt(),fA=require("joi"),{hdb_table:PJ,hdb_database:BP}=mi(),HP={schema:BP,database:BP,table:PJ},LJ={date:fA.date().iso().required()},MJ={timestamp:fA.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};xP.exports=function(e,t){let r=t==="timestamp"?{...HP,...MJ}:{...HP,...LJ},n=fA.object(r);return DJ.validateBySchema(e,n)}});var GP=N((zAe,FP)=>{var UJ=gt(),hA=require("joi"),{hdb_table:vJ,hdb_database:kP}=mi(),BJ=hA.object({schema:kP,database:kP,table:vJ,hash_values:hA.array().required(),ids:hA.array()});FP.exports=function(e){return UJ.validateBySchema(e,BJ)}});var TA=N((QAe,qP)=>{"use strict";var pA=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},mA=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},SA=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};qP.exports={InsertObject:pA,NoSQLSeachObject:mA,DeleteResponseObject:SA}});var oc=N((XAe,WP)=>{"use strict";var VP=EA(),HJ=GP(),sc=re(),$P=require("moment"),KP=j(),{promisify:xJ,callbackify:kJ}=require("util"),ic=M(),FJ=Fs(),gA=xJ(FJ.getTableSchema),AA=Un(),{DeleteResponseObject:GJ}=TA(),{handleHDBError:Yo,hdb_errors:qJ}=_e(),{HDB_ERROR_MSGS:vh,HTTP_STATUS_CODES:Wo}=qJ,$J="records successfully deleted",VJ=kJ(YP);WP.exports={delete:VJ,deleteRecord:YP,deleteFilesBefore:KJ,deleteAuditLogsBefore:YJ};async function KJ(e){let t=VP(e,"date");if(t)throw Yo(t,t.message,Wo.BAD_REQUEST,void 0,void 0,!0);if(sc.transformReq(e),!$P(e.date,$P.ISO_8601).isValid())throw Yo(new Error,vh.INVALID_DATE,Wo.BAD_REQUEST,ic.LOG_LEVELS.ERROR,vh.INVALID_DATE,!0);let n=sc.checkSchemaTableExist(e.schema,e.table);if(n)throw Yo(new Error,n,Wo.NOT_FOUND,ic.LOG_LEVELS.ERROR,n,!0);let s=await AA.deleteRecordsBefore(e);if(await gA(e.schema,e.table),KP.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(KJ,"deleteFilesBefore");async function YJ(e){let t=VP(e,"timestamp");if(t)throw Yo(t,t.message,Wo.BAD_REQUEST,void 0,void 0,!0);if(sc.transformReq(e),isNaN(e.timestamp))throw Yo(new Error,vh.INVALID_VALUE("Timestamp"),Wo.BAD_REQUEST,ic.LOG_LEVELS.ERROR,vh.INVALID_VALUE("Timestamp"),!0);let r=sc.checkSchemaTableExist(e.schema,e.table);if(r)throw Yo(new Error,r,Wo.NOT_FOUND,ic.LOG_LEVELS.ERROR,r,!0);let n=await AA.deleteAuditLogsBefore(e);return await gA(e.schema,e.table),KP.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(YJ,"deleteAuditLogsBefore");async function YP(e){e.ids&&(e.hash_values=e.ids);let t=HJ(e);if(t)throw Yo(t,t.message,Wo.BAD_REQUEST,void 0,void 0,!0);sc.transformReq(e);let r=sc.checkSchemaTableExist(e.schema,e.table);if(r)throw Yo(new Error,r,Wo.NOT_FOUND,ic.LOG_LEVELS.ERROR,r,!0);try{await gA(e.schema,e.table);let n=await AA.deleteRecords(e);return sc.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${$J}`),n}catch(n){if(n.message===ic.SEARCH_NOT_FOUND_MESSAGE){let s=new GJ;return s.message=ic.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(YP,"deleteRecord")});var Bh=N((eRe,QP)=>{var WJ=require("crypto"),jP=9;function jJ(e){let t=QJ(jP),r=zP(e+t);return t+r}a(jJ,"createHash");function zJ(e,t){let r=e?.substr(0,jP),n=r+zP(t+r);return e===n}a(zJ,"validateHash");function QJ(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(QJ,"generateSalt");function zP(e){return WJ.createHash("md5").update(e).digest("hex")}a(zP,"md5");QP.exports={hash:jJ,validate:zJ}});var XP=N((rRe,JP)=>{var RA=gt(),Vr={username:{presence:!0,exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function JJ(e){return Vr.password.presence=!0,Vr.username.presence=!0,Vr.role.presence=!0,Vr.active.presence=!0,RA.validateObject(e,Vr)}a(JJ,"addUserValidation");function XJ(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,RA.validateObject(e,Vr)}a(XJ,"alterUserValidation");function ZJ(e){return Vr.password.presence=!1,Vr.username.presence=!0,Vr.role.presence=!1,Vr.active.presence=!1,RA.validateObject(e,Vr)}a(ZJ,"dropUserValidation");JP.exports={addUserValidation:JJ,alterUserValidation:XJ,dropUserValidation:ZJ}});var It=N((iRe,eL)=>{"use strict";var{platform:sRe}=require("os"),e3="nats-server.zip",yA="nats-server",t3=process.platform==="win32"?`${yA}.exe`:yA,r3=/^[^\s.,*>]+$/,ZP="__request__",n3=a(e=>`${e}.${ZP}`,"REQUEST_SUBJECT"),s3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},i3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},o3={HUB:"hub.pid",LEAF:"leaf.pid"},a3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},c3={SUCCESS:"success",ERROR:"error"},l3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},u3={TXN:"txn",MSGID:"msgid"},Ul={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},d3={[Ul.ERR]:1,[Ul.WRN]:2,[Ul.INF]:3,[Ul.DBG]:4,[Ul.TRC]:5},_3={debug:"-D",trace:"-DVV"};eL.exports={NATS_SERVER_ZIP:e3,NATS_SERVER_NAME:yA,NATS_BINARY_NAME:t3,PID_FILES:o3,NATS_CONFIG_FILES:i3,SERVER_SUFFIX:a3,NATS_TERM_CONSTRAINTS_RX:r3,REQUEST_SUFFIX:ZP,UPDATE_REMOTE_RESPONSE_STATUSES:c3,CLUSTER_STATUS_STATUSES:l3,REQUEST_SUBJECT:n3,SUBJECT_PREFIXES:u3,MSG_HEADERS:s3,LOG_LEVELS:Ul,LOG_LEVEL_FLAGS:_3,LOG_LEVEL_HIERARCHY:d3}});var bA=N(tL=>{"use strict";var f3={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
9
9
  `),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
10
- `)},E3="certificate.pem",h3="privateKey.pem",p3="caCertificate.pem",m3="natsCertificate.pem",S3="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},T3={tls_certificate:Rt.SERVER,tls_certificateAuthority:Rt.CA,customFunctions_tls_certificate:Rt.SERVER,customFunctions_tls_certificateAuthority:Rt.CA,operationsApi_tls_certificate:Rt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Rt["OPERATIONS-CA"]},g3={[Rt.SERVER]:2,[Rt.DEFAULT]:1},A3={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},R3={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},y3={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},b3={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},O3={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(tL,{CERTIFICATE_PEM_NAME:E3,PRIVATEKEY_PEM_NAME:h3,CA_PEM_NAME:p3,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:T3,CERT_PREFERENCE_APP:g3,CERT_PREFERENCE_OPS:A3,CERT_PREFERENCE_REP:R3,CA_CERT_PREFERENCE_REP:y3,CA_CERT_PREFERENCE_OPS:b3,CA_CERT_PREFERENCE_APP:O3,CERTIFICATE_VALUES:f3,NATS_CERTIFICATE_PEM_NAME:m3,NATS_CA_PEM_NAME:S3})});var NA=N((lRe,aL)=>{"use strict";var iL=require("fs-extra"),me=require("joi"),N3=require("os"),{boolean:He,string:wt,number:rr,array:cc}=me.types(),{totalmem:rL}=require("os"),ac=require("path"),I3=j(),OA=re(),cRe=bA(),nL=M(),w3=gt(),sL="log",C3="components",D3="Invalid logging.rotation.maxSize unit. Available units are G, M or K",P3="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",L3="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",M3="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",U3="rootPath config parameter is undefined",ln=me.alternatives([rr.min(0),wt]).optional().empty(null),Hh=me.alternatives([cc.items(wt,{host:wt.required(),port:ln},{hostname:wt.required(),port:ln}).empty(null),cc.items(wt)]),Ti,oL=!1;aL.exports={configValidator:v3,routesValidator:G3,route_constraints:Hh};function v3(e,t=!1){if(oL=t,Ti=e.rootPath,OA.isEmpty(Ti))throw U3;let r=He.optional(),n=rr.min(0).max(1e3).empty(null).default(F3),s=wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(__),i=wt.optional().empty(null),o=wt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=me.string().empty(null).default(__),l=me.custom(H3).empty(null).default(__),u=e.clustering?.enabled,d=me.object({certificate:i,certificateAuthority:i,privateKey:i}),_;return u===!0?_=me.object({enabled:r,hubServer:me.object({cluster:me.object({name:me.required().empty(null),network:me.object({port:ln,routes:Hh}).required()}).required(),leafNodes:me.object({network:me.object({port:ln}).required()}).required(),network:me.object({port:ln}).required()}).required(),leafServer:me.object({network:me.object({port:ln,routes:Hh}).required(),streams:me.object({maxAge:rr.min(120).allow(null).optional(),maxBytes:rr.min(1).allow(null).optional(),maxMsgs:rr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:me.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:He.optional(),databaseLevel:He.optional(),tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.required(),verify:He.optional()}),user:wt.optional().empty(null)}).optional():_=me.object({enabled:r,tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.optional()})}).optional(),me.object({authentication:me.alternatives(me.object({authorizeLocal:He,cacheTTL:rr.required(),enableSessions:He}),He).optional(),analytics:me.object({aggregatePeriod:rr}),replication:me.object({hostname:me.alternatives(wt,rr).optional().empty(null),url:wt.optional().empty(null),port:ln,securePort:ln,routes:cc.optional().empty(null),databases:me.alternatives(wt,cc),enableRootCAs:He.optional(),copyTablesToCatchUp:He.optional()}).optional(),componentsRoot:s.optional(),clustering:_,localStudio:me.object({enabled:r}).required(),logging:me.object({auditAuthEvents:me.object({logFailed:He,logSuccessful:He}),file:He.required(),level:me.valid("notify","fatal","error","warn","info","debug","trace"),rotation:me.object({enabled:He.optional(),compress:He.optional(),interval:wt.custom(k3).optional().empty(null),maxSize:wt.custom(x3).optional().empty(null),path:wt.optional().empty(null).default(__)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:me.object({network:me.object({cors:He.optional(),corsAccessList:cc.optional(),headersTimeout:rr.min(1).optional(),keepAliveTimeout:rr.min(1).optional(),port:ln,domainSocket:me.optional().empty("hdb/operations-server").default(__),securePort:ln,timeout:rr.min(1).optional()}).optional(),tls:me.alternatives([me.array().items(d),d])}).required(),rootPath:wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:me.object({network:me.object({port:ln,securePort:ln,mtls:me.alternatives([He.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:me.object({compressionThreshold:rr.optional(),cors:He.optional(),corsAccessList:cc.optional(),headersTimeout:rr.min(1).optional(),port:ln,securePort:ln,maxHeaderSize:rr.optional(),mtls:me.alternatives([He.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:me.alternatives([cc.optional(),wt.optional()])}).required(),threads:me.alternatives(n.optional(),me.object({count:n.optional(),debug:me.alternatives(He.optional(),me.object({startingPort:rr.min(1).optional(),host:wt.optional(),waitForDebugger:He.optional()})),maxHeapMemory:rr.min(0).optional()})),storage:me.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:me.alternatives([He.optional(),me.object({dictionary:wt.optional(),threshold:rr.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:rr.optional(),maxFreeSpaceToRetain:rr.optional()}).required(),ignoreScripts:He.optional(),tls:me.alternatives([me.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(v3,"configValidator");function B3(e){return oL||iL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(B3,"doesPathExist");function H3(e,t){me.assert(e,wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=B3(e);if(r)return t.message(r)}a(H3,"validatePath");function x3(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(D3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(L3):e}a(x3,"validateRotationMaxSize");function k3(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(P3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(M3):e}a(k3,"validateRotationInterval");function F3(e,t){let r=t.state.path.join("."),n=N3.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||rL();return i=Math.round(Math.min(i,rL())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),I3.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(F3,"setDefaultThreads");function __(e,t){let r=t.state.path.join(".");if(!OA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(OA.isEmpty(Ti))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ac.join(Ti,C3);case"logging.root":return ac.join(Ti,sL);case"clustering.leafServer.streams.path":return ac.join(Ti,"clustering","leaf");case"storage.path":let n=ac.join(Ti,nL.LEGACY_DATABASES_DIR_NAME);return iL.existsSync(n)?n:ac.join(Ti,nL.DATABASES_DIR_NAME);case"logging.rotation.path":return ac.join(Ti,sL);case"operationsApi.network.domainSocket":return r==null?null:ac.join(Ti,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(__,"setDefaultRoot");function G3(e){let t=me.object({routes:Hh});return w3.validateBySchema({routes:e},t)}a(G3,"routesValidator")});var Ct=N(mL=>{"use strict";var un=M(),Er=re(),hr=j(),{configValidator:q3,routesValidator:cL}=NA(),Kr=require("fs-extra"),uL=require("yaml"),Bn=require("path"),$3=require("is-number"),dL=require("properties-reader"),V3=require("lodash"),{handleHDBError:K3}=_e(),{HTTP_STATUS_CODES:Y3,HDB_ERROR_MSGS:vl}=Dn(),{server:W3}=(qr(),oe(ja)),{DATABASES_PARAM_CONFIG:f_,CONFIG_PARAMS:vn,CONFIG_PARAM_MAP:Gs}=un,j3="Unable to get config value because config is uninitialized",z3="Config successfully initialized",Q3="Error backing up config file",J3="Empty parameter sent to getConfigValue",_L=Bn.join(un.PACKAGE_ROOT,"config","yaml",un.HDB_DEFAULT_CONFIG_FILE),X3=Bn.join(un.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),Z3="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",lL={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},xh,jt,kh;Object.assign(mL,{createConfigFile:eX,getDefaultConfig:tX,getConfigValue:EL,initConfig:Fh,flattenConfig:Bl,updateConfigValue:hL,updateConfigObject:nX,getConfiguration:oX,setConfiguration:aX,readConfigFile:DA,getClusteringRoutes:cX,initOldConfig:pL,getConfigFromFile:lX,getConfigFilePath:lc,addConfig:uX,deleteConfigFromFile:dX,getConfigObj:_X,resolvePath:IA,getFlatConfigObj:fX});function IA(e){if(e?.startsWith("~/"))return Bn.join(Er.getHomeDir(),e.slice(1));let t=se();return Bn.resolve(t.getHdbBasePath(),e)}a(IA,"resolvePath");function eX(e,t=!1){let r=jo(_L);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=uL.parseDocument(Kr.readFileSync(X3,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}xh=Bl(r.toJSON());let n;for(let c in e){let l=Gs[c.toLowerCase()];if(l===vn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=wA(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(_){hr.error(_)}}}n&&fL(r,n),CA(r,t);let s=r.toJSON();jt=Bl(s);let i=r.getIn(["rootPath"]),o=Bn.join(i,un.HDB_CONFIG_FILE);Kr.createFileSync(o),Kr.writeFileSync(o,String(r)),hr.trace(`Config file written to ${o}`)}a(eX,"createConfigFile");function fL(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Er.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(f_.TABLES))for(let i in n[s][f_.TABLES])for(let o in n[s][f_.TABLES][i]){let c=n[s][f_.TABLES][i][o],l=[vn.DATABASES,s,f_.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[vn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){hr.error("Error parsing schemas CLI/env config arguments",n)}}a(fL,"setSchemasConfig");function tX(e){if(xh===void 0){let r=jo(_L);xh=Bl(r.toJSON())}let t=Gs[e.toLowerCase()];if(t!==void 0)return xh[t.toLowerCase()]}a(tX,"getDefaultConfig");function EL(e){if(e==null){hr.info(J3);return}if(jt===void 0){hr.trace(j3);return}let t=Gs[e.toLowerCase()];if(t!==void 0)return jt[t.toLowerCase()]}a(EL,"getConfigValue");function lc(e=Er.getPropsFilePath()){let t=Er.getEnvCliRootPath();if(t)return IA(Bn.join(t,un.HDB_CONFIG_FILE));let r=dL(e);return IA(r.get(un.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(lc,"getConfigFilePath");function Fh(e=!1){if(jt===void 0||e){let t;if(!Er.noBootFile()){t=Er.getPropsFilePath();try{Kr.accessSync(t,Kr.constants.F_OK|Kr.constants.R_OK)}catch(i){throw hr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=lc(t),n;if(r.includes("config/settings.js"))try{pL(r);return}catch(i){if(i.code!==un.NODE_ERROR_CODES.ENOENT)throw i}try{n=jo(r)}catch(i){if(i.code===un.NODE_ERROR_CODES.ENOENT){hr.trace(`HarperDB config file not found at ${r}.
11
- This can occur during early stages of install where the config file has not yet been created`);return}else throw hr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}rX(n,r),CA(n);let s=n.toJSON();if(W3.config=s,jt=Bl(s),jt.logging_rotation_rotate)for(let i in lL)jt[i]&&hr.error(`Config ${lL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);hr.trace(z3)}}a(Fh,"initConfig");function rX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(hr.trace("Updating config file with missing config params"),Kr.writeFileSync(t,String(e)))}a(rX,"checkForUpdatedConfig");function CA(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw vl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw vl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=q3(r,t);if(n.error)throw vl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(CA,"validateConfig");function nX(e,t){jt===void 0&&(jt={});let r=Gs[e.toLowerCase()];if(r===void 0){hr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(nX,"updateConfigObject");function hL(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&Fh();let o=EL(Gs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=jo(c),u;if(r===void 0&&e.toLowerCase()===vn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=Gs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=wA(E,t);l.setIn([...f],h)}else for(let E in r){let f=Gs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===jt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[vn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===vn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=un.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=wA(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){hr.error(g)}}}u&&fL(l,u),CA(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&sX(c,d),Kr.writeFileSync(_,String(l)),s&&(jt=Bl(l.toJSON())),hr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(hL,"updateConfigValue");function sX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Kr.copySync(e,r),hr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){hr.error(Q3),hr.error(r)}}a(sX,"backupConfigFile");var iX=["databases"];function Bl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),kh=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!iX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!vn[l.toUpperCase()]&&Gs[l]&&(s[Gs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Bl,"flattenConfig");function wA(e,t){if(e===vn.CLUSTERING_NODENAME||e===vn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if($3(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Er.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Er.autoCast(t)}a(wA,"castConfigValue");function oX(){let e=Er.getPropsFilePath(),t=lc(e);return jo(t).toJSON()}a(oX,"getConfiguration");async function aX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return hL(void 0,void 0,s,!0),Z3}catch(i){throw typeof i=="string"||i instanceof String?K3(i,i,Y3.BAD_REQUEST,void 0,void 0,!0):i}}a(aX,"setConfiguration");function DA(){let e=Er.getPropsFilePath();try{Kr.accessSync(e,Kr.constants.F_OK|Kr.constants.R_OK)}catch(n){if(!Er.noBootFile())throw hr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=lc(e);return jo(t).toJSON()}a(DA,"readConfigFile");function jo(e){return uL.parseDocument(Kr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(jo,"parseYamlDoc");function cX(){let e=DA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Er.isEmptyOrZeroLength(t)?[]:t;let r=cL(t);if(r)throw vl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Er.isEmptyOrZeroLength(n)?[]:n;let s=cL(n);if(s)throw vl.CONFIG_VALIDATION(s.message);if(!Er.isEmptyOrZeroLength(n)&&!Er.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Er.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw vl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(cX,"getClusteringRoutes");function pL(e){let t=dL(e);jt={};for(let r in Gs){let n=t.get(r.toUpperCase());if(Er.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Gs[r].toLowerCase();s===vn.LOGGING_ROOT?jt[s]=Bn.dirname(n):jt[s]=n}return jt}a(pL,"initOldConfig");function lX(e){let t=DA();return V3.get(t,e.replaceAll("_","."))}a(lX,"getConfigFromFile");async function uX(e,t){let r=jo(lc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kr.writeFile(lc(),String(r))}a(uX,"addConfig");function dX(e){let t=lc(Er.getPropsFilePath()),r=jo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Kr.writeFileSync(s,String(r))}a(dX,"deleteConfigFromFile");function _X(){return kh||(Fh(),kh)}a(_X,"getConfigObj");function fX(){return jt||Fh(),jt}a(fX,"getFlatConfigObj")});var TL=N((fRe,SL)=>{"use strict";var Gh=M(),qh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Gh.RAM_ALLOCATION_ENUM.DEFAULT,n=Gh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},PA=class extends qh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Gh.RAM_ALLOCATION_ENUM.DEFAULT,n=Gh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};SL.exports={BaseLicense:qh,ExtendedLicense:PA}});var uc=N((hRe,NL)=>{"use strict";var xl=require("fs-extra"),AL=Bh(),RL=require("crypto"),EX=require("moment"),hX=require("uuid").v4,Yr=j(),MA=require("path"),pX=re(),zo=M(),{totalmem:gL}=require("os"),mX=TL().ExtendedLicense,Hl="invalid license key format",SX="061183",TX="mofi25",gX="aes-256-cbc",AX=16,RX=32,yL=se(),{resolvePath:bL}=Ct();yL.initSync();var LA;NL.exports={validateLicense:OL,generateFingerPrint:bX,licenseSearch:BA,getLicense:IX,checkMemoryLimit:wX};function UA(){return MA.join(yL.getHdbBasePath(),zo.LICENSE_KEY_DIR_NAME,zo.LICENSE_FILE_NAME)}a(UA,"getLicenseDirPath");function yX(){let e=UA();return bL(MA.join(e,zo.LICENSE_FILE_NAME))}a(yX,"getLicenseFilePath");function vA(){let e=UA();return bL(MA.join(e,zo.REG_KEY_FILE_NAME))}a(vA,"getFingerPrintFilePath");async function bX(){let e=vA();try{return await xl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await OX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(bX,"generateFingerPrint");async function OX(){let e=hX(),t=AL.hash(e),r=vA();try{await xl.mkdirp(UA()),await xl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yr.error(`Error writing fingerprint file to ${r}`),Yr.error(n),new Error("There was an error generating the fingerprint")}return t}a(OX,"writeFingerprint");function OL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zo.RAM_ALLOCATION_ENUM.DEFAULT,version:zo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=vA(),s=!1;try{s=xl.statSync(n)}catch(i){Yr.error(i)}if(s){let i;try{i=xl.readFileSync(n,"utf8")}catch{Yr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(TX),c=o[1];c=Buffer.concat([Buffer.from(c)],AX);let l=Buffer.concat([Buffer.from(i)],RX),u=RL.createDecipheriv(gX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=NX(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Hl),Yr.error(Hl),new Error(Hl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(Hl),Yr.error(Hl),new Error(Hl)}else r.exp_date=d;r.exp_date<EX().valueOf()&&(r.valid_date=!1),AL.validate(o[1],`${SX}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Yr.error("Invalid licence"),r}a(OL,"validateLicense");function NX(e,t){try{let r=RL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yr.warn("Check old license failed")}}a(NX,"checkOldLicense");function BA(){let e=new mX,t=[];try{t=xl.readFileSync(yX(),"utf-8").split(zo.NEW_LINE)}catch(r){r.code==="ENOENT"?Yr.debug("no license file found"):Yr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(pX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=OL(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Yr.error("There was an error parsing the license string."),Yr.error(s),e.ram_allocation=zo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return LA=e,e}a(BA,"licenseSearch");async function IX(){return LA||await BA(),LA}a(IX,"getLicense");function wX(){let e=BA().ram_allocation,t=process.constrainedMemory?.()||gL();if(t=Math.round(Math.min(t,gL())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(wX,"checkMemoryLimit")});var xn=N((gRe,qL)=>{"use strict";var DL="username is required",PL="nothing to update, must supply active, role or password to update",LL="password cannot be an empty string",ML="If role is specified, it cannot be empty.",UL="active must be true or false";qL.exports={addUser:HX,alterUser:xX,dropUser:FX,getSuperUser:VX,userInfo:GX,listUsers:Vh,listUsersExternal:qX,setUsersToGlobal:Fl,findAndValidateUser:FL,getClusterUser:KX,USERNAME_REQUIRED:DL,ALTERUSER_NOTHING_TO_UPDATE:PL,EMPTY_PASSWORD:LL,EMPTY_ROLE:ML,ACTIVE_BOOLEAN:UL};var vL=cn(),CX=oc(),kA=Bh(),BL=XP(),HL=$r(),FA=eo(),Hn=re(),xL=require("validate.js"),Ke=j(),{promisify:DX}=require("util"),GA=Xi(),IL=M(),wL=It(),PX=Ct(),mRe=se(),SRe=uc(),LX=Qi(),{table:TRe}=(De(),oe(lt)),{handleHDBError:gi,hdb_errors:MX}=_e(),{HTTP_STATUS_CODES:Ai,AUTHENTICATION_ERROR_MSGS:HA,HDB_ERROR_MSGS:kl}=MX,{UserEventMsg:qA}=qs(),xA=require("lodash"),{server:$A}=(qr(),oe(ja)),UX=j();$A.getUser=(e,t)=>FL(e,t,t!=null);var kL={username:!0,active:!0,role:!0,password:!0},CL=new Map,$h=HL.searchByValue,vX=HL.searchByHash,BX=DX(CX.delete);async function HX(e){let t=xL.cleanAttributes(e,kL),r=BL.addUserValidation(t);if(r)throw gi(new Error,r.message,Ai.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await $h(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw gi(new Error,kl.ROLE_NAME_NOT_FOUND(t.role),Ai.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw gi(new Error,kl.DUP_ROLES_FOUND(t.role),Ai.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=GA.encrypt(t.password)),t.password=kA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await vL.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await Fl()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw gi(new Error,kl.USER_ALREADY_EXISTS(t.username),Ai.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],FA.signalUserChange(new qA(process.pid)),`${c.username} successfully added`}a(HX,"addUser");async function xX(e){let t=xL.cleanAttributes(e,kL);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(DL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(PL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(LL);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error(UL);let r=kX(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=GA.encrypt(t.password)),t.password=kA.hash(t.password)),t.role==="")throw new Error(ML);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await $h(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=kl.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),gi(new Error,c,Ai.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=kl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),gi(new Error,c,Ai.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await vL.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await Fl()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return FA.signalUserChange(new qA(process.pid)),s}a(xX,"alterUser");function kX(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(kX,"isClusterUser");async function FX(e){try{let t=BL.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Hn.isEmpty(global.hdb_users.get(e.username)))throw gi(new Error,kl.USER_NOT_EXIST(e.username),Ai.NOT_FOUND,void 0,void 0,!0);let n;try{n=await BX(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await Fl()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return FA.signalUserChange(new qA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(FX,"dropUser");async function GX(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=xA.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await vX(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(GX,"userInfo");async function qX(){let e;try{e=await Vh()}catch(t){throw Ke.error("Got an error listing users."),Ke.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(qX,"listUsersExternal");async function Vh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await $h(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=xA.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await $h(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=xA.cloneDeep(o),o.role=r[o.role],$X(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),Hn.errorizeMessage(e)}return null}a(Vh,"listUsers");function $X(e){try{if(!e){Ke.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(LX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a($X,"appendSystemTablesToRole");async function Fl(){try{let e=await Vh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Fl,"setUsersToGlobal");async function FL(e,t,r=!0){global.hdb_users||await Fl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw gi(new Error,HA.GENERIC_AUTH_FAIL,Ai.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw gi(new Error,HA.USER_INACTIVE,Ai.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(CL.get(t)===n.password)return s;if(kA.validate(n.password,t))CL.set(t,n.password);else throw gi(new Error,HA.GENERIC_AUTH_FAIL,Ai.UNAUTHORIZED,void 0,void 0,!0)}return s}a(FL,"findAndValidateUser");async function VX(){global.hdb_users||await Fl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(VX,"getSuperUser");async function KX(){let e=await Vh(),t=PX.getConfigFromFile(IL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===IL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=GA.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+wL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+wL.SERVER_SUFFIX.ADMIN,r}a(KX,"getClusterUser");var GL=[];$A.invalidateUser=function(e){for(let t of GL)try{t(e)}catch(r){UX.error("Error invalidating user",r)}};$A.onInvalidatedUser=function(e){GL.push(e)}});var h_=N((bRe,YL)=>{"use strict";var dc=j(),kn=M(),YX=TP(),RRe=Fs(),yRe=Zi(),WX=xn(),{validateEvent:$L}=qs(),E_=Un(),jX=require("process"),{resetDatabases:zX}=(De(),oe(lt)),QX={[kn.ITC_EVENT_TYPES.SCHEMA]:JX,[kn.ITC_EVENT_TYPES.USER]:KL};async function JX(e){let t=$L(e);if(t){dc.error(t);return}dc.trace("ITC schemaHandler received schema event:",e),await YX(e.message),await XX(e.message)}a(JX,"schemaHandler");async function XX(e){try{E_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),E_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),E_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=zX();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){dc.error(t)}}a(XX,"syncSchemaMetadata");var VL=[];async function KL(e){try{try{E_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),E_.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){dc.warn(r)}let t=$L(e);if(t){dc.error(t);return}dc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${jX.pid} received user event:`,e),await WX.setUsersToGlobal();for(let r of VL)r()}catch(t){dc.error(t)}}a(KL,"userHandler");KL.addListener=function(e){VL.push(e)};YL.exports=QX});var qs=N((DRe,jL)=>{"use strict";var NRe=j(),VA=re(),ZX=M(),{ITC_ERRORS:p_}=Dn(),{parentPort:IRe,threadId:eZ,isMainThread:tZ,workerData:wRe}=require("worker_threads"),{onMessageFromWorkers:rZ,broadcast:CRe,broadcastWithAcknowledgement:nZ}=dt();jL.exports={sendItcEvent:sZ,validateEvent:WL,SchemaEventMsg:iZ,UserEventMsg:oZ};var Kh;rZ(async(e,t)=>{Kh=Kh||h_(),WL(e),Kh[e.type]&&await Kh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function sZ(e){return!tZ&&e.message&&(e.message.originator=eZ),nZ(e)}a(sZ,"sendItcEvent");function WL(e){if(typeof e!="object")return p_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||VA.isEmpty(e.type))return p_.MISSING_TYPE;if(!e.hasOwnProperty("message")||VA.isEmpty(e.message))return p_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||VA.isEmpty(e.message.originator))return p_.MISSING_ORIGIN;if(ZX.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return p_.INVALID_EVENT(e.type)}a(WL,"validateEvent");function iZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(iZ,"SchemaEventMsg");function oZ(e){this.originator=e}a(oZ,"UserEventMsg")});var eo=N((MRe,XL)=>{"use strict";var zL=M(),LRe=re(),Yh=j(),QL=pP(),Gl,{sendItcEvent:JL}=qs();function aZ(e){try{Yh.info("signalSchemaChange called with message:",e),Gl=Gl||h_();let t=new QL(zL.ITC_EVENT_TYPES.SCHEMA,e);return Gl.schema(t),JL(t)}catch(t){Yh.error(t)}}a(aZ,"signalSchemaChange");function cZ(e){try{Yh.trace("signalUserChange called with message:",e),Gl=Gl||h_();let t=new QL(zL.ITC_EVENT_TYPES.USER,e);return Gl.user(t),JL(t)}catch(t){Yh.error(t)}}a(cZ,"signalUserChange");XL.exports={signalSchemaChange:aZ,signalUserChange:cZ}});var Wh=N((vRe,eM)=>{"use strict";var ZL=re(),lZ=M(),uZ=j(),dZ=Ih(),_Z=Nh(),fZ=eo(),{SchemaEventMsg:EZ}=qs(),hZ="already exists in";eM.exports=pZ;async function pZ(e,t,r){if(ZL.isEmptyOrZeroLength(r))return r;let n=[];ZL.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await mZ(e,t.schema,t.name,i)})),s}a(pZ,"lmdbCheckForNewAttributes");async function mZ(e,t,r,n){let s=new _Z(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await SZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(hZ))uZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(mZ,"createNewAttribute");async function SZ(e){let t;return t=await dZ(e),fZ.signalSchemaChange(new EZ(process.pid,lZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(SZ,"createAttribute")});var ql=N((HRe,tM)=>{"use strict";var KA=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};tM.exports=KA});var nM=N((kRe,rM)=>{"use strict";var TZ=ql(),gZ=M().OPERATIONS_ENUM,YA=class extends TZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(gZ.INSERT,r,n,s,i),this.records=t}};rM.exports=YA});var iM=N((GRe,sM)=>{"use strict";var AZ=ql(),RZ=M().OPERATIONS_ENUM,WA=class extends AZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(RZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};sM.exports=WA});var aM=N(($Re,oM)=>{"use strict";var yZ=ql(),bZ=M().OPERATIONS_ENUM,jA=class extends yZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(bZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};oM.exports=jA});var lM=N((KRe,cM)=>{"use strict";var OZ=ql(),NZ=M().OPERATIONS_ENUM,zA=class extends OZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(NZ.DELETE,n,s,t,i),this.original_records=r}};cM.exports=zA});var m_=N((jRe,fM)=>{"use strict";var WRe=require("path"),uM=ht(),IZ=nM(),wZ=iM(),CZ=aM(),DZ=lM(),$l=Ht(),dM=re(),{CONFIG_PARAMS:PZ}=M(),_M=se();_M.initSync();var jh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:LZ}=Tt();fM.exports=MZ;async function MZ(e,t){if(_M.get(PZ.LOGGING_AUDITLOG)===!1)return;let r=LZ(e.schema,e.table),n=await uM.openEnvironment(r,e.table,!0),s=UZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){uM.initializeDBIs(n,$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,$l.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),dM.isEmpty(s.user_name)||n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(MZ,"writeTransaction");function UZ(e,t){let r=dM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===jh.INSERT)return new IZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.UPDATE)return new wZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.UPSERT)return new CZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.DELETE)return new DZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(UZ,"createTransactionObject")});var QA=N((JRe,EM)=>{"use strict";var vZ=l_(),QRe=Yd(),S_=M(),BZ=Wd(),HZ=ec().insertRecords,xZ=ht(),kZ=j(),FZ=Wh(),{getSchemaPath:GZ}=Tt(),qZ=m_();EM.exports=$Z;async function $Z(e){try{let{schema_table:t,attributes:r}=vZ(e);BZ(e,r,t.hash_attribute),e.schema!==S_.SYSTEM_SCHEMA_NAME&&(r.includes(S_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(S_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(S_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(S_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await FZ(e.hdb_auth_header,t,r),s=GZ(e.schema,e.table),i=await xZ.openEnvironment(s,e.table),o=await HZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qZ(e,o)}catch(c){kZ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a($Z,"lmdbCreateRecords")});var mM=N((ZRe,pM)=>{"use strict";var hM=M(),VZ=QA(),KZ=Yd(),YZ=require("fs-extra"),{getSchemaPath:WZ}=Tt();pM.exports=jZ;async function jZ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new KZ(hM.SYSTEM_SCHEMA_NAME,hM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await VZ(r),await YZ.mkdirp(WZ(e.schema))}a(jZ,"lmdbCreateSchema")});var TM=N((tye,SM)=>{"use strict";var JA=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};SM.exports=JA});var yM=N((oye,RM)=>{"use strict";var gM=ht(),XA=sn(),ZA=Dn().LMDB_ERRORS_ENUM,zZ=Ht(),AM=j(),nye=re(),QZ=require("lmdb"),JZ=TM(),XZ=M(),{OVERFLOW_MARKER:sye,MAX_SEARCH_KEY_LENGTH:iye}=zZ,ZZ=XZ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function e5(e,t,r,n){if(XA.validateEnv(e),t===void 0)throw new Error(ZA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ZA.IDS_REQUIRED):new Error(ZA.IDS_MUST_BE_ITERABLE);try{let s=gM.listDBIs(e);gM.initializeDBIs(e,t,s);let i=new JZ,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[ZZ]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,QZ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=XA.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{AM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){AM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=XA.getNextMonotonicTime(),i}catch(s){throw s}}a(e5,"deleteRecords");RM.exports={deleteRecords:e5}});var T_=N((cye,OM)=>{"use strict";var Vl=re(),t5=yM(),r5=ht(),{getSchemaPath:n5}=Tt(),s5=m_(),i5=j();OM.exports=o5;async function o5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Vl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Vl.isEmptyOrZeroLength(e.hash_values)&&!Vl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Vl.isEmpty(l)||e.hash_values.push(l)}}if(Vl.isEmptyOrZeroLength(e.hash_values))return bM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Vl.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=n5(e.schema,e.table),i=await r5.openEnvironment(s,e.table),o=await t5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await s5(e,o)}catch(c){i5.error(`unable to write transaction due to ${c.message}`)}return bM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(o5,"lmdbDeleteRecords");function bM(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(bM,"createDeleteResponse")});var tR=N((dye,NM)=>{"use strict";var a5=M(),uye=sn();function eR(e,t){let r=Object.create(null);if(t.length===1&&a5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(eR,"parseRow");function c5(e,t,r,n){let s=eR(r,e);n.push(s)}a(c5,"searchAll");function l5(e,t,r,n){let s=eR(r,e);n[t]=s}a(l5,"searchAllToMap");function u5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(u5,"iterateDBI");function _c(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(_c,"pushResults");function d5(e,t,r,n,s,i){t.toString().endsWith(e)&&_c(t,r,n,s,i)}a(d5,"endsWith");function _5(e,t,r,n,s,i){t.toString().includes(e)&&_c(t,r,n,s,i)}a(_5,"contains");function f5(e,t,r,n,s,i){t>e&&_c(t,r,n,s,i)}a(f5,"greaterThanCompare");function E5(e,t,r,n,s,i){t>=e&&_c(t,r,n,s,i)}a(E5,"greaterThanEqualCompare");function h5(e,t,r,n,s,i){t<e&&_c(t,r,n,s,i)}a(h5,"lessThanCompare");function p5(e,t,r,n,s,i){t<=e&&_c(t,r,n,s,i)}a(p5,"lessThanEqualCompare");NM.exports={parseRow:eR,searchAll:c5,searchAllToMap:l5,iterateDBI:u5,endsWith:d5,contains:_5,greaterThanCompare:f5,greaterThanEqualCompare:E5,lessThanCompare:h5,lessThanEqualCompare:p5,pushResults:_c}});var Kl=N((pye,MM)=>{"use strict";var Qo=ht(),fye=j(),Fn=sn(),zh=Ht(),zt=Dn().LMDB_ERRORS_ENUM,Eye=re(),m5=M(),Qh=tR(),{parseRow:S5}=Qh,hye=require("lmdb"),{OVERFLOW_MARKER:IM,MAX_SEARCH_KEY_LENGTH:T5}=zh;function wM(e,t,r,n=!1,s=void 0,i=void 0){return fc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(wM,"iterateFullIndex");function g_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return fc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(g_,"iterateRangeBetween");function fc(e,t,r,n){let s=e.database||e,i=Qo.openDBI(s,r);i[zh.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(fc,"setupTransaction");function CM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(IM)){if(!s)if(r)s=Qo.openDBI(e,r);else{let l=Qo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Qo.openDBI(e,l[u]),!s[zh.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(CM,"getOverflowCheck");function g5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return fc(e,t,t,(o,c,l)=>(Jh(r),r=A_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>S5(u.value,r))))}a(g5,"searchAll");function A5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);Jh(r),r=A_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of wM(e,t,t,n,s,i))o.set(c,Qh.parseRow(l,r));return o}a(A5,"searchAllToMap");function R5(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=wM(e,void 0,t,r,n,s),c=o.transaction,l=CM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(R5,"iterateDBI");function y5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Qo.statDBI(e,t).entryCount}a(y5,"countAll");function b5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),fc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(b5,"equals");function O5(e,t,r){return Jo(e,t,r),Qo.openDBI(e,t).getValuesCount(r)}a(O5,"count");function N5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),fc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(N5,"startsWith");function I5(e,t,r,n,s=!1,i=void 0,o=void 0){return DM(e,t,r,n,s,i,o,!0)}a(I5,"endsWith");function DM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Jo(e,r,n),fc(e,null,r,(l,u,d,_)=>{let E=CM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(IM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[zh.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(DM,"contains");function w5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),g_(e,t,r,n,l,s,i,o,!0,!1)}a(w5,"greaterThan");function C5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),g_(e,t,r,n,l,s,i,o,!1,!1)}a(C5,"greaterThanEqual");function D5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),g_(e,t,r,l,n,s,i,o,!1,!0)}a(D5,"lessThan");function P5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),g_(e,t,r,l,n,s,i,o,!1,!1)}a(P5,"lessThanEqual");function L5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return g_(e,t,r,n,s,i,o,c)}a(L5,"between");function M5(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(Jh(r),r=A_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Qh.parseRow(c,r)),o}a(M5,"searchByHash");function U5(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(U5,"checkHashExists");function v5(e,t,r,n,s=[]){return LM(e,t,r,n,s),PM(e,t,r,n,s).map(i=>i[1])}a(v5,"batchSearchByHash");function B5(e,t,r,n,s=[]){LM(e,t,r,n,s);let i=new Map;for(let[o,c]of PM(e,t,r,n,s))i.set(o,c);return i}a(B5,"batchSearchByHashToMap");function PM(e,t,r,n,s=[]){return fc(e,t,t,(i,o,c)=>{r=A_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,Qh.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(PM,"batchHashSearch");function LM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(Jh(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(LM,"initializeBatchSearchByHash");function Jh(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Jh,"validateFetchAttributes");function Jo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>T5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Jo,"validateComparisonFunctions");function A_(e,t){return t.length===1&&m5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qo.listDBIs(e)),t}a(A_,"setGetWholeRowAttributes");MM.exports={searchAll:g5,searchAllToMap:A5,count:O5,countAll:y5,equals:b5,startsWith:N5,endsWith:I5,contains:DM,searchByHash:M5,setGetWholeRowAttributes:A_,batchSearchByHash:v5,batchSearchByHashToMap:B5,checkHashExists:U5,iterateDBI:R5,greaterThan:w5,greaterThanEqual:C5,lessThan:D5,lessThanEqual:P5,between:L5}});var Yl=N((Sye,xM)=>{var UM=require("lodash"),vM=gt(),xe=require("joi"),H5=re(),{hdb_schema_table:R_,checkValidTable:BM,hdb_table:HM,hdb_database:Xh}=mi(),{handleHDBError:x5,hdb_errors:k5}=_e(),{getDatabases:F5}=(De(),oe(lt)),{HTTP_STATUS_CODES:G5}=k5,q5=xe.object({database:Xh,schema:Xh,table:HM,search_attribute:R_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(R_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),$5=xe.object({database:Xh,schema:Xh,table:HM,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(R_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(R_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(R_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});xM.exports=function(e,t){let r=null;switch(t){case"value":r=vM.validateBySchema(e,q5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(BM("database",e.schema)),i(BM("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=vM.validateBySchema(e,$5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=H5.checkGlobalSchemaTable(e.schema,e.table);if(s)return x5(new Error,s,G5.NOT_FOUND);let o=F5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=UM.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!UM.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var rR=N((gye,kM)=>{"use strict";var V5=ht(),K5=Yl(),{getSchemaPath:Y5}=Tt();kM.exports=W5;function W5(e){let t=K5(e,"hashes");if(t)throw t;let r=Y5(e.schema,e.table);return V5.openEnvironment(r,e.table)}a(W5,"initialize")});var nR=N((Rye,FM)=>{"use strict";var j5=Kl(),z5=rR();FM.exports=Q5;async function Q5(e){let t=await z5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return j5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Q5,"lmdbGetDataByHash")});var Wl=N((bye,GM)=>{"use strict";var sR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};GM.exports=sR});var $M=N((Iye,qM)=>{"use strict";var Nye=Wl(),J5=Kl(),X5=rR();qM.exports=Z5;async function Z5(e){let t=await X5(e),r=global.hdb_schema[e.schema][e.table];return J5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Z5,"lmdbSearchByHash")});var $s=N((Cye,VM)=>{"use strict";var iR=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};VM.exports=iR});var Zh=N((Pye,QM)=>{"use strict";var Wr=Kl(),e6=ht(),t6=re(),ke=Ht(),Ec=M(),r6=Qi(),KM=Dn().LMDB_ERRORS_ENUM,{getSchemaPath:n6}=Tt(),to=Ec.SEARCH_WILDCARDS;async function s6(e,t,r){let n;e.schema===Ec.SYSTEM_SCHEMA_NAME?n=r6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=zM(e,n.hash_attribute,r,t);return WM(e,s,n.hash_attribute,r)}a(s6,"prepSearch");async function WM(e,t,r,n){let s=n6(e.schema,e.table),i=await e6.openEnvironment(s,e.table),o=jM(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(i6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?YM(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?YM(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(WM,"executeSearch");function jM(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Wr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=Wr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Wr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=Wr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=Wr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(jM,"searchByType");function YM(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(YM,"createMapFromIterable");function i6(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(i6,"checkToFetchMore");function zM(e,t,r,n){if(t6.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),to.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(to[0])<0&&s.indexOf(to[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(to.indexOf(i)>=0&&to.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(to.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(to.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(to[0])||s.includes(to[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(KM.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ec.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case Ec.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case Ec.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ec.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case Ec.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(KM.UNKNOWN_SEARCH_TYPE)}}a(zM,"createSearchTypeFromSearchObject");QM.exports={executeSearch:WM,createSearchTypeFromSearchObject:zM,prepSearch:s6,searchByType:jM}});var XM=N((Uye,JM)=>{"use strict";var Mye=$s(),o6=Yl(),a6=re(),c6=M(),l6=Zh();JM.exports=u6;function u6(e,t){if(!a6.isEmpty(t)&&c6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=o6(e,"value");if(n)throw n;return l6.prepSearch(e,t,!0)}a(u6,"lmdbGetDataByValue")});var y_=N((Hye,ZM)=>{"use strict";var Bye=$s(),d6=Yl(),_6=re(),f6=M(),E6=Zh();ZM.exports=h6;async function h6(e,t){if(!_6.isEmpty(t)&&f6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=d6(e,"value");if(n)throw n;return E6.prepSearch(e,t,!1)}a(h6,"lmdbSearchByValue")});var tU=N((Fye,eU)=>{"use strict";var kye=Ht(),oR=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},aR=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},cR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};eU.exports={SearchByConditionsObject:oR,SearchCondition:aR,SortAttribute:cR}});var oU=N((Vye,iU)=>{"use strict";var qye=tU().SearchByConditionsObject,p6=$s(),m6=Yl(),lR=Kl(),ep=Ht(),{Resource:$ye}=(Vs(),oe(uR)),sU=Zh(),S6=tR(),T6=require("lodash"),{getSchemaPath:g6}=Tt(),rU=ht(),{handleHDBError:A6,hdb_errors:R6}=_e(),{HTTP_STATUS_CODES:y6}=R6,b6=1e8;iU.exports=O6;async function O6(e){let t=m6(e,"conditions");if(t)throw A6(t,t.message,y6.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=g6(e.schema,e.table),n=await rU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)rU.openDBI(n,u.search_attribute);let i=T6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===ep.SEARCH_TYPES.EQUALS?u.estimated_count=lR.count(n,u.search_attribute,u.search_value):d===ep.SEARCH_TYPES.CONTAINS||d===ep.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=b6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await nU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(sU.filterByType),_=d.length,E=lR.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>S6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await nU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=lR.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(O6,"lmdbSearchByConditions");async function nU(e,t,r,n){let s=new p6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===ep.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,sU.searchByType(e,s,i,n).map(o=>o.value)}a(nU,"executeConditionSearch")});var b_=N((Yye,aU)=>{"use strict";var N6=M().OPERATIONS_ENUM,dR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=N6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};aU.exports=dR});var _R=N((jye,hU)=>{"use strict";var dU=$s(),_U=b_(),fU=y_(),EU=T_(),dn=M(),cU=re(),lU=ht(),{getTransactionAuditStorePath:I6,getSchemaPath:w6}=Tt(),uU=j();hU.exports=C6;async function C6(e){try{if(cU.isEmpty(global.hdb_schema[e.schema])||cU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await D6(e),await P6(e);let t=w6(e.schema,e.table);try{await lU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")uU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=I6(e.schema,e.table);await lU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")uU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(C6,"lmdbDropTable");async function D6(e){let t=new dU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await fU(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new _U(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await EU(s)}a(D6,"deleteAttributesFromSystem");async function P6(e){let t=new dU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await fU(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new _U(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await EU(s)}catch(i){throw i}}a(P6,"dropTableFromSystem")});var mU=N((Qye,pU)=>{"use strict";var L6=require("fs-extra"),M6=$s(),U6=Wl(),v6=b_(),B6=_R(),H6=T_(),x6=nR(),k6=y_(),ro=M(),{getSchemaPath:F6}=Tt(),{handleHDBError:G6,hdb_errors:q6}=_e(),{HDB_ERROR_MSGS:$6,HTTP_STATUS_CODES:V6}=q6;pU.exports=K6;async function K6(e){let t;try{t=await Y6(e.schema);let r=new M6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await k6(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await B6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new v6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await H6(s);let i=F6(t);await L6.remove(i)}catch(r){throw r}}a(K6,"lmdbDropSchema");async function Y6(e){let t=new U6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await x6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw G6(new Error,$6.SCHEMA_NOT_FOUND(e),V6.NOT_FOUND,void 0,void 0,!0);return n}a(Y6,"validateDropSchema")});var O_=N((Xye,SU)=>{"use strict";var fR=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};SU.exports=fR});var hR=N((tbe,TU)=>{"use strict";var W6=require("fs-extra"),tp=ht(),{getTransactionAuditStorePath:j6}=Tt(),ER=Ht(),ebe=O_();TU.exports=z6;async function z6(e){let t;try{let r=j6(e.schema,e.table);await W6.mkdirp(r),t=await tp.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{tp.createDBI(t,ER.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),tp.createDBI(t,ER.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),tp.createDBI(t,ER.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(z6,"createTransactionsAuditEnvironment")});var RU=N((sbe,AU)=>{"use strict";var pR=M(),gU=ht(),Q6=ec(),{getSystemSchemaPath:J6,getSchemaPath:X6}=Tt(),nbe=Qi(),Z6=Ih(),mR=Nh(),e8=j(),t8=hR();AU.exports=r8;async function r8(e,t){let r=X6(t.schema,t.table),n=new mR(t.schema,t.table,pR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new mR(t.schema,t.table,pR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await gU.createEnvironment(r,t.table),e!==void 0){let o=await gU.openEnvironment(J6(),pR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Q6.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await SR(n),await SR(s),await SR(i)}await t8(t)}catch(o){throw o}}a(r8,"lmdbCreateTable");async function SR(e){try{await Z6(e)}catch(t){e8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(SR,"createAttribute")});var bU=N((obe,yU)=>{"use strict";var n8=l_(),s8=Wd(),i8=Wh(),N_=M(),o8=ec().updateRecords,a8=ht(),{getSchemaPath:c8}=Tt(),l8=m_(),u8=j();yU.exports=d8;async function d8(e){try{let{schema_table:t,attributes:r}=n8(e);s8(e,r,t.hash_attribute),e.schema!==N_.SYSTEM_SCHEMA_NAME&&(r.includes(N_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(N_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(N_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(N_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await i8(e.hdb_auth_header,t,r),s=c8(e.schema,e.table),i=await a8.openEnvironment(s,e.table),o=await o8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await l8(e,o)}catch(c){u8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(d8,"lmdbUpdateRecords")});var NU=N((cbe,OU)=>{"use strict";var _8=M().OPERATIONS_ENUM,TR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=_8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};OU.exports=TR});var wU=N((dbe,IU)=>{"use strict";var ube=NU(),f8=l_(),E8=Wd(),h8=Wh(),I_=M(),p8=ec().upsertRecords,m8=ht(),{getSchemaPath:S8}=Tt(),T8=m_(),g8=j(),{handleHDBError:A8,hdb_errors:R8}=_e();IU.exports=y8;async function y8(e){let t;try{t=f8(e)}catch(l){throw A8(l,l.message,R8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;E8(e,n,r.hash_attribute),e.schema!==I_.SYSTEM_SCHEMA_NAME&&(n.includes(I_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(I_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(I_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(I_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await h8(e.hdb_auth_header,r,n),i=S8(e.schema,e.table),o=await m8.openEnvironment(i,e.table),c=await p8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await T8(e,c)}catch(l){g8.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(y8,"lmdbUpsertRecords")});var DU=N((fbe,CU)=>{"use strict";var gR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};CU.exports=gR});var LU=N((hbe,PU)=>{"use strict";var AR=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};PU.exports=AR});var vU=N((Sbe,UU)=>{"use strict";var RR=ht(),{getTransactionAuditStorePath:b8}=Tt(),mbe=DU(),w_=Ht(),O8=re(),MU=LU(),N8=require("util").promisify,I8=N8(setTimeout),w8=1e4,C8=100;UU.exports=D8;async function D8(e){let t=b8(e.schema,e.table),r=await RR.openEnvironment(t,e.table,!0),n=RR.listDBIs(r);RR.initializeDBIs(r,w_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new MU;do s=await P8(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await I8(C8);while(s.transactions_deleted>0);return i}a(D8,"deleteAuditLogsBefore");async function P8(e,t){let r=new MU;try{let n=e.dbis[w_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[w_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];O8.isEmpty(c)||(s=e.dbis[w_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[w_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>w8)break}return await s,r}catch(n){throw n}}a(P8,"deleteTransactions")});var HU=N((gbe,BU)=>{"use strict";var yR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};BU.exports=yR});var kU=N((ybe,xU)=>{"use strict";var L8=$s(),M8=b_(),Rbe=HU(),Ri=M(),U8=re(),bR=ht(),v8=Qi(),B8=y_(),H8=T_(),{getSchemaPath:x8}=Tt();xU.exports=k8;async function k8(e,t=!0){let r;e.schema===Ri.SYSTEM_SCHEMA_NAME?r=v8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await G8(e),s=x8(e.schema,e.table),i=await bR.openEnvironment(s,e.table);return t===!0&&await F8(e,i,r.hash_attribute),bR.dropDBI(i,e.attribute),n}a(k8,"lmdbDropAttribute");async function F8(e,t,r){let n=bR.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(F8,"removeAttributeFromAllObjects");async function G8(e){let t=new L8(Ri.SYSTEM_SCHEMA_NAME,Ri.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await B8(t)).filter(o=>o[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(U8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new M8(Ri.SYSTEM_SCHEMA_NAME,Ri.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return H8(i)}a(G8,"dropAttributeFromSystem")});var KU=N((Nbe,VU)=>{"use strict";var OR=ht(),jl=Ht(),Obe=sn(),NR=M(),FU=re(),{getTransactionAuditStorePath:q8}=Tt(),$8=Kl(),rp=ql(),V8=j();VU.exports=K8;async function K8(e){let t=q8(e.schema,e.table),r=await OR.openEnvironment(t,e.table,!0),n=OR.listDBIs(r);OR.initializeDBIs(r,jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case NR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return GU(r,e.search_values);case NR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,W8(r,e.search_values,s);case NR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Y8(r,e.search_values);default:return GU(r)}}a(K8,"readAuditLog");function GU(e,t=[0,Date.now()]){FU.isEmpty(t[0])&&(t[0]=0),FU.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new rp,s))}a(GU,"searchTransactionsByTimestamp");function Y8(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[jl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,$U(e,i))}return Object.fromEntries(r)}a(Y8,"searchTransactionsByUsername");function W8(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=$8.equals(e,jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=$U(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);qU(l,"records",r,d,o),qU(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(W8,"searchTransactionsByHashValues");function qU(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new rp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new rp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(qU,"loopRecords");function $U(e,t){let r=[];try{let n=e.dbis[jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new rp,i);r.push(o)}}catch(i){V8.warn(i)}return r}catch(n){throw n}}a($U,"batchSearchTransactions")});var WU=N((Dbe,YU)=>{"use strict";var{getSchemaPath:wbe}=Tt(),Cbe=ht(),{database:j8}=(De(),oe(lt));YU.exports={writeTransaction:z8};async function z8(e,t,r){return j8({database:e,table:t}).transaction(r)}a(z8,"writeTransaction")});var JU=N((Lbe,QU)=>{"use strict";var{getSchemaPath:jU}=Tt(),zU=ht();QU.exports={flush:Q8,resetReadTxn:J8};async function Q8(e,t){return(await zU.openEnvironment(jU(e,t),t.toString())).flushed}a(Q8,"flush");async function J8(e,t){try{(await zU.openEnvironment(jU(e,t),t.toString())).resetReadTxn()}catch{}}a(J8,"resetReadTxn")});var tv=N((Ube,ev)=>{"use strict";var{Readable:X8}=require("stream"),{getDatabases:Z8}=(De(),oe(lt)),{readSync:e9,openSync:t9,createReadStream:XU}=require("fs"),{open:r9}=require("lmdb"),ZU=r_(),n9=n_(),{AUDIT_STORE_OPTIONS:s9}=(ji(),oe(rv)),{INTERNAL_DBIS_NAME:i9,AUDIT_STORE_NAME:o9}=Ht();ev.exports=c9;var IR=32768,a9=100;async function c9(e){let t=e.database||e.schema||"data",r=Z8()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=r9({noSync:!0,maxDbs:n9.MAX_DBS}),E,f=_.openDB(i9,new ZU(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:Y}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,Y,X),T++%a9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new ZU(!U,U);await m(S,H)}e.include_audit&&await m(o9,{...s9}),await E;let g=XU(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=t9(o.path);return o.transaction(()=>{let u=Buffer.alloc(IR);e9(c,u,0,IR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=XU(null,{fd:c,start:IR}),E=new X8.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(c9,"getBackup")});var iv=N((Bbe,sv)=>{"use strict";var l9=j(),{handleHDBError:u9}=_e(),d9=RD(),_9=Ih(),f9=QA(),E9=mM(),h9=T_(),p9=nR(),m9=$M(),S9=XM(),T9=y_(),g9=oU(),A9=mU(),R9=RU(),y9=bU(),b9=wU(),O9=vU(),N9=_R(),I9=kU(),w9=KU(),C9=WU(),nv=JU(),D9=tv(),wR=class extends d9{static{a(this,"LMDBBridge")}async searchByConditions(t){return g9(t)}async getDataByHash(t){return await p9(t)}async searchByHash(t){return await m9(t)}async getDataByValue(t,r){return await S9(t,r)}async searchByValue(t){return await T9(t)}async createSchema(t){return await E9(t)}async dropSchema(t){return await A9(t)}async createTable(t,r){return await R9(t,r)}async dropTable(t){return await N9(t)}async createAttribute(t){return await _9(t)}async createRecords(t){return await f9(t)}async updateRecords(t){return await y9(t)}async upsertRecords(t){try{return await b9(t)}catch(r){throw u9(r,null,null,l9.ERR,r)}}async deleteRecords(t){return await h9(t)}async dropAttribute(t){return await I9(t)}async deleteAuditLogsBefore(t){return await O9(t)}async readAuditLog(t){return await w9(t)}writeTransaction(t,r,n){return C9.writeTransaction(t,r,n)}flush(t,r){return nv.flush(t,r)}resetReadTxn(t,r){return nv.resetReadTxn(t,r)}getBackup(t){return D9(t)}};sv.exports=wR});function fv(e){DR=e}function U9(){M9=setInterval(function(){for(let e of CR)if(e.stale){let t=e[Fe]?.url;lv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},L9).unref()}var PR,cv,lv,uv,dv,_v,ov,CR,P9,C_,av,DR,hc,np,L9,M9,sp=Ie(()=>{PR=L(sn()),cv=L(_e()),lv=L(j());Vs();uv=L(se()),dv=L(M()),_v=L(re()),ov=100,CR=new Set,P9=(0,_v.convertToMS)(uv.get(dv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(fv,"replicationConfirmation");hc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;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===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),CR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(CR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(C_&&!this.overloadChecked&&performance.now()-av>P9)throw new cv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){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,PR.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<ov>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return C_||(C_=s,av=performance.now(),C_.then(()=>{C_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];DR&&f&&i.push(DR(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+ov/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},np=class extends hc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,PR.getNextMonotonicTime)())}getReadTxn(){}},L9=3e4;a(U9,"startMonitoringTxns");U9()});function Dt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&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 hc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=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({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var Ev,pc=Ie(()=>{Ev=L(_i());Vs();sp();a(Dt,"transaction");(0,Ev._assignPackageExport)("transaction",Dt);Dt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Dt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var Rv={};je(Rv,{ResourceBridge:()=>UR});function vR({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function pv(e,t){let r=yi(e),n=vR(e,r);if(!r)throw new Ks.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Dt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&op(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function yi(e){let t=e.database||e.schema||B9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,v9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function mv(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*Sv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var Tv,ip,Ks,gv,Ys,LR,MR,Av,v9,B9,H9,x9,hv,UR,yv=Ie(()=>{"use strict";Tv=L(iv()),ip=L(Yl()),Ks=L(_e());De();gv=L(l_()),Ys=L(M()),LR=L(eo()),MR=L(qs()),Av=L(re());pc();ap();({HDB_ERROR_MSGS:v9}=Ks.hdb_errors),B9="data",H9=1e4,x9=10,UR=class extends Tv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),hv=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,ip.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=yi(t);if(!n)throw new Ks.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:vR(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ks.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await yi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=yi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){yi(t).dropTable()}createSchema(t){return zl({database:t.schema,table:null}),LR.signalSchemaChange(new MR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await BR(t.schema),LR.signalSchemaChange(new MR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,hv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,gv.default)(t),s,i=ut()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Dt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=op(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ut()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Dt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return mv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ut()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ks.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ys.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Av.async_set_timeout)(x9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%H9===0&&await u();return l.length>0&&await u(),s?mv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,ip.default)(t,"hashes");if(r)throw r;return pv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of pv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ys.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,ip.default)(t,"value");if(n)throw n;let s=yi(t);if(!s)throw new Ks.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Ys.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:vR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=yi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){yi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return yi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=yi(t),n={};switch(t.search_type){case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Sv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Sv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(vR,"getSelect");a(pv,"getRecords");a(yi,"getTable");a(mv,"createDeleteResponse");a(Sv,"groupRecordsInHistory")});var Un=N((Jbe,bv)=>{"use strict";var{ResourceBridge:k9}=(yv(),oe(Rv)),F9=se();F9.initSync();var cp;function G9(){return cp||(cp=new k9,cp)}a(G9,"getBridge");bv.exports=G9()});var wv=N((Zbe,Iv)=>{"use strict";var Ov=require("lodash"),D_=require("mathjs"),q9=require("jsonata"),Nv=re();Iv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Ov.uniqWith(e,Ov.isEqual):e,"distinct_array"),searchJSON:$9,mad:P_.bind(null,D_.mad),mean:P_.bind(null,D_.mean),mode:P_.bind(null,D_.mode),prod:P_.bind(null,D_.prod),median:P_.bind(null,D_.median)};function P_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(P_,"aggregateFunction");function $9(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(Nv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Nv.isEmpty(this.__ala__.res[r])){let n=q9(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a($9,"searchJSON")});var Dv=N((tOe,Cv)=>{"use strict";var nr=require("moment"),HR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;Cv.exports={current_date:a(()=>nr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>nr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return nr(e).utc().format("YYYY");case"month":return nr(e).utc().format("MM");case"day":return nr(e).utc().format("DD");case"hour":return nr(e).utc().format("HH");case"minute":return nr(e).utc().format("mm");case"second":return nr(e).utc().format("ss");case"millisecond":return nr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>nr(e).utc().format(HR),"date"),date_format:a((e,t)=>nr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>nr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>nr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=nr(e).utc(),s=nr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>nr().utc().valueOf(),"now"),get_server_time:a(()=>nr().format(HR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(HR),"offset_utc")}});var Uv=N((nOe,Mv)=>{"use strict";var V9=require("@turf/area"),K9=require("@turf/length"),Y9=require("@turf/circle"),W9=require("@turf/difference"),j9=require("@turf/distance"),z9=require("@turf/boolean-contains"),Q9=require("@turf/boolean-equal"),J9=require("@turf/boolean-disjoint"),X9=require("@turf/helpers"),Pv=M(),$e=re(),no=j();Mv.exports={geoArea:Z9,geoLength:e7,geoCircle:t7,geoDifference:r7,geoDistance:Lv,geoNear:n7,geoContains:s7,geoEqual:i7,geoCrosses:o7,geoConvert:a7};function Z9(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return V9.default(e)}catch(t){return no.trace(t,e),NaN}}a(Z9,"geoArea");function e7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return K9.default(e,{units:t||"kilometers"})}catch(r){return no.trace(r,e),NaN}}a(e7,"geoLength");function t7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return Y9.default(e,t,{units:r||"kilometers"})}catch(n){return no.trace(n,e,t),NaN}}a(t7,"geoCircle");function r7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return W9(e,t)}catch(r){return no.trace(r,e,t),NaN}}a(r7,"geoDifference");function Lv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return j9.default(e,t,{units:r||"kilometers"})}catch(n){return no.trace(n,e,t),NaN}}a(Lv,"geoDistance");function n7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Lv(e,t,n)<=r}catch(s){return no.trace(s,e,t),!1}}a(n7,"geoNear");function s7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return z9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(s7,"geoContains");function i7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return Q9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(i7,"geoEqual");function o7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!J9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(o7,"geoCrosses");function a7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Pv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Pv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),X9[t](e,r)}a(a7,"geoConvert")});var lp=N((iOe,vv)=>{var mc=wv(),Gn=Dv(),bi=Uv();vv.exports=e=>{e.aggr.mad=e.aggr.MAD=mc.mad,e.aggr.mean=e.aggr.MEAN=mc.mean,e.aggr.mode=e.aggr.MODE=mc.mode,e.aggr.prod=e.aggr.PROD=mc.prod,e.aggr.median=e.aggr.MEDIAN=mc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=mc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=mc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var kv=N((oOe,xv)=>{"use strict";var L_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var c7=lp(),Bv=require("clone"),up=require("recursive-iterator"),Ue=j(),et=re(),Ql=Un(),l7=M(),{hdb_errors:u7}=_e(),{getDatabases:Hv}=(De(),oe(lt)),d7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";c7(_n);var xR=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(Ws)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}}_getColumns(){let t=new up(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(Bv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=L_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=Hv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new up(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new up(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(l7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(et.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&L_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(Bv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(d7)>-1&&this.tables.forEach(s=>{let i={columnid:Hv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=L_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Ql.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await Ql.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Ql.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Ql.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(Ws)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof _n.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=L_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new up(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=L_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(Ws)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Ql.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(u7.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Ql.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Ws)}}return Object.values(Object.values(this.data)[0].__merged_data)}};xv.exports=xR});var $r=N((cOe,Fv)=>{"use strict";var _7=gD();Fv.exports={searchByConditions:E7,searchByHash:h7,searchByValue:p7,search:m7};var kR=Un(),{transformReq:FR}=re(),f7=kv();async function E7(e){return FR(e),kR.searchByConditions(e)}a(E7,"searchByConditions");async function h7(e){FR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of kR.searchByHash(e))r&&t.push(r);return t}a(h7,"searchByHash");async function p7(e){FR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of kR.searchByValue(e))t.push(r);return t}a(p7,"searchByValue");function m7(e,t){try{let r=new _7(e);r.validate(),new f7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(m7,"search")});var dp=N((uOe,Gv)=>{"use strict";var S7=Un();Gv.exports={writeTransaction:T7};function T7(e,t,r){return S7.writeTransaction(e,t,r)}a(T7,"writeTransaction")});var Kv=N((fOe,Vv)=>{"use strict";var g7=$r(),A7=Fs(),qv=j(),R7=cn(),_Oe=dp(),y7=require("clone"),qR=require("alasql"),b7=lp(),$v=require("util"),O7=$v.promisify(A7.getTableSchema),N7=$v.promisify(g7.search),I7=M(),GR=re();b7(qR);Vv.exports={update:C7};var w7="There was a problem performing this update. Please check the logs and try again.";async function C7({statement:e,hdb_user:t}){let r=await O7(e.table.databaseid,e.table.tableid),n=D7(e.columns);GR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=y7(s),c=GR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=qR.parse(l).statements[0],d=await N7(u),_=P7(n,d);return L7(o,_,t)}a(C7,"update");function D7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=qR.compile(`SELECT ${r.expression.toString()} AS [${I7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw qv.error(t),new Error(w7)}}a(D7,"createUpdateRecord");function P7(e,t){return GR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(P7,"buildUpdateRecords");async function L7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await R7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){qv.error(`Error delete new_attributes from update response: ${i}`)}return s}a(L7,"updateRecords")});var Wv=N((mOe,Yv)=>{var M7=require("alasql"),U7=$r(),v7=j(),B7=Un(),VR=require("util"),$R=re(),H7=M(),x7=Fs(),hOe=dp(),pOe=cn(),k7="record",F7="successfully deleted",G7=VR.callbackify(K7),q7=VR.promisify(U7.search),$7=VR.promisify(x7.getTableSchema);Yv.exports={convertDelete:G7};function V7(e){return`${e.deleted_hashes.length} ${k7}${e.deleted_hashes.length===1?"":"s"} ${F7}`}a(V7,"generateReturnMessage");async function K7({statement:e,hdb_user:t}){let r=await $7(e.table.databaseid,e.table.tableid);$R.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=$R.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=M7.parse(o).statements[0],l={operation:H7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await q7(c);let u=await B7.deleteRecords(l);return $R.isEmptyOrZeroLength(u.message)&&(u.message=V7(u)),delete u.txn_time,u}catch(u){throw v7.error(u),u.hdb_code?u.message:u}}a(K7,"convertDelete")});var Xv=N((TOe,Jv)=>{"use strict";var Y7=Zi(),{hdb_errors:jv}=_e(),{getDatabases:zv}=(De(),oe(lt));Jv.exports={checkSchemaExists:Qv,checkSchemaTableExists:W7,schema_describe:Y7};async function Qv(e){if(!zv()[e])return jv.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Qv,"checkSchemaExists");async function W7(e,t){let r=await Qv(e);if(r)return r;if(!zv()[e][t])return jv.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(W7,"checkSchemaTableExists")});var Sc=N(fp=>{var _p=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])_p.logsAtLevel(e)&&(fp[e]=_p[e]);fp.loggerWithTag=e=>_p.loggerWithTag(e,!0);fp.setLogLevel=_p.setLogLevel});function KR(e){let t=e.get(Ep),r=t?(0,Jl.unpack)(t):null;r||(r={remoteNameToId:{}});let n=ot(),s=!1;r.nodeName=ot();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:U_(e)??1,nodes:[]})})}i[n]=0,e.putSync(Ep,(0,Jl.pack)(r))}return r}function M_(e){return KR(e).remoteNameToId}function e0(e,t,r){let n=KR(r),s=n.remoteNameToId,i=new Map,o=!1;for(let c in t){let l=t[c],u=s[c];if(u==null){let d=0;for(let _ in s){let E=s[_];E>d&&(d=E)}u=d+1,s[c]=u,o=!0}i.set(l,u)}return o&&r.putSync(Ep,(0,Jl.pack)(n)),i}function hp(e,t){let r=KR(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(Ep,(0,Jl.pack)(r))}return Zv.info?.("The remote node name map",e,n,s),s}var Zv,Jl,Ep,YR=Ie(()=>{Zv=L(Sc());ls();Jl=require("msgpackr"),Ep=Symbol.for("remote-ids");a(KR,"getIdMappingRecord");a(M_,"exportIdMapping");a(e0,"remoteToLocalNodeId");a(hp,"getIdOfRemoteNode")});var Xo,WR=Ie(()=>{Xo=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var n0={};je(n0,{Resources:()=>pp,keyArrayToString:()=>Xl,resetResources:()=>j7,resources:()=>Oi});function j7(){return Oi=new pp}function Xl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var t0,r0,pp,Oi,Zl=Ie(()=>{pc();WR();t0=L(j()),r0=L(_e()),pp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new r0.ServerError(`Conflicting paths for ${t}`);t0.default.error(c),i.Resource=new Xo(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Dt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(j7,"resetResources");a(Xl,"keyArrayToString")});function QR(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=i0,z7(e.primaryStore,e.auditStore)):(c=s0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{o0(s0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=Xl(t);let d=new zR(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function o0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),a0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Xl(c),u=0;do{let d=o.get(l);if(d){for(let E of d)if(!(u>0&&!(E.includeDescendants&&!(E.onlyChildren&&u>1)))){if(E.startTime>=n){(0,jR.info)("omitting",c,E.startTime,n);continue}try{let f;E.supportsTransactions&&E.txnInProgress!==i.version&&(f=!0,E.txnInProgress||(r?r.push(E):r=[E]),E.txnInProgress=i.version),E.listener(c,i,n,f)}catch(f){console.error(f),(0,jR.info)(f)}}}if(l==null)break;let _=l.lastIndexOf?.("/",l.length-2);_>-1?l=l.slice(0,_):l=null,u++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function z7(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=i0[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{o0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function a0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function c0(e){return e.nextTransaction||(QR({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),a0(e)),e.nextTransaction}var jR,s0,i0,zR,JR=Ie(()=>{jR=L(j());Cl();Zl();ji();s0=Object.create(null),i0=Object.create(null);a(QR,"addSubscription");zR=class extends Pn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(o0,"notifyFromTransactionData");a(z7,"listenToCommits");a(a0,"nextTransaction");a(c0,"whenNextTransaction")});var E0={};je(E0,{commits_awaiting_replication:()=>ru,getHDBNodeTable:()=>pr,iterateRoutes:()=>B_,shouldReplicateToNode:()=>v_,subscribeToNodeUpdates:()=>nu});function pr(){return l0||(l0=Et({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:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function nu(e){pr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;f0.debug?.("adding node",n,"on node",ot()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==ot()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function v_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&pr().primaryStore.get(ot())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Q7(){nu(e=>{Zo({},(t,r)=>{let n=e.name,s=u0.get(n);if(s||u0.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=new Float64Array(i.getUserSharedBuffer(["replicated",r,n],new ArrayBuffer(8),{callback:a(()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of ru.get(r)||[])u>l&&u<=c&&d();o.lastTime=c},"callback")}));o.lastTime=0,s.set(r,o)}})})}function*B_(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=eu.default.get(tu.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!eu.default.get(tu.CONFIG_PARAMS.REPLICATION_PORT)&&eu.default.get(tu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||eu.default.get(tu.CONFIG_PARAMS.REPLICATION_PORT)||eu.default.get(tu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){d0.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,start_time:t.startTime}}}var d0,_0,eu,tu,f0,l0,u0,ru,su=Ie(()=>{De();ls();sp();d0=require("worker_threads"),_0=L(_e()),eu=L(se()),tu=L(M()),f0=L(Sc());server.nodes=[];a(pr,"getHDBNodeTable");a(nu,"subscribeToNodeUpdates");a(v_,"shouldReplicateToNode");u0=new Map;fv((e,t,r)=>{if(r>server.nodes.length)throw new _0.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);ru||(ru=new Map,Q7());let n=ru.get(e);return n||(n=[],ru.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Q7,"startSubscriptionToReplications");a(B_,"iterateRoutes")});var T0={};je(T0,{connectedToNode:()=>Tc,disconnectedFromNode:()=>au,ensureNode:()=>io,requestClusterStatus:()=>S0,startOnMainThread:()=>ZR});async function ZR(e){let t=0,r=ut();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){mp.set(i,U_(l.auditStore));break}}}Ni.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of B_(e))try{let c=!o.subscriptions;if(c){let u=ot();pr().primaryStore.get(u)===void 0&&await io(u,{name:u,url:e.url??ea(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}nu(s)});let n;function s(i,o=i?.name){let c=ot()&&o===ot()||ea()&&i?.url===ea();if(c){let _=!!i?.replicates;if(n!==void 0&&n!==_)for(let E of pr().search([]))E.replicates&&E.name!==o&&s(E,E.name);n=_}if(_t.trace("Setting up node replication for",i),!i){for(let[_,E]of so){let f;for(let[h,{worker:T,nodes:m}]of E){let g=m[0];if(g&&g.name==o){f=!0;for(let[S,{worker:y}]of E)E.delete(S),_t.warn("Node was deleted, unsubscribing from node",o,S,_),y?.postMessage({type:"unsubscribe-from-node",node:o,database:S,url:_});break}}if(f){so.get(_).iterator.remove(),so.delete(_);return}}return}if(c)return;if(!i.url){_t.info(`Node ${i.name} is missing url`);return}let l=so.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(_t.info(`Added node ${i.name} at ${i.url} for process ${ot()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[_,E]of iu)if(i.url===E.url){iu.delete(_);break}iu.set(i.name,i)}let u=ut();if(l||(l=new Map,so.set(i.url,l)),l.iterator=Zo(e,(_,E,f)=>{f?d(E,!0):d(E,!1)}),i.subscriptions)for(let _ of i.subscriptions){let E=_.database||_.schema;u[E]||(_t.warn(`Database ${E} not found for node ${i.name}, making a subscription anyway`),d(E,!1))}function d(_,E){_t.trace("Setting up replication for database",_,"on node",i.name);let f=l.get(_),h,T=[{replicateByDefault:E,...i}];mp.has(_)&&(T.push({replicateByDefault:E,name:ot(),start_time:mp.get(_),end_time:Date.now(),replicates:!0}),mp.delete(_));let m=v_(i,_),g=Ni.workers.filter(S=>S.name==="http");if(f?(h=f.worker,f.nodes=T):m&&(t=t%g.length,h=g[t++],l.set(_,{worker:h,nodes:T,url:i.url}),h?.on("exit",()=>{l.get(_)?.worker===h&&(l.delete(_),d(_,E))})),m)setTimeout(()=>{let S={type:"subscribe-to-node",database:_,nodes:T};h?h.postMessage(S):ou(S)},J7);else{_t.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[_],pr().primaryStore.get(ot())?.replicates),pr().primaryStore.get(ot())?.replicates||(n=!1);let S={type:"unsubscribe-from-node",database:_,url:i.url,name:i.name};h?h.postMessage(S):Tp(S)}}a(d,"onDatabase")}a(s,"onNodeUpdate"),au=a(function(i){try{_t.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(iu.keys()),c=o.sort(),l=c.indexOf(i.name||js(i.url));if(l===-1){_t.warn("Disconnected node not found in node map",i.name,o);return}let u=so.get(i.url),d=u?.get(i.database);if(!d){_t.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let _=d.nodes[0];if(!(_.replicates===!0||_.replicates?.sends||_.subscriptions?.length))return;let E=(l+1)%c.length;for(;l!==E;){let f=c[E],h=iu.get(f);u=so.get(h.url);let T=u?.get(i.database);if(!T){E=(E+1)%c.length;continue}let{worker:m,nodes:g}=T,S=!1;for(let y of d.nodes){if(g.some(I=>I.name===y.name)){_t.info(`Disconnected node is already failing over to ${f} for ${i.database}`);continue}g.push(y),S=!0}if(!S){_t.info(`Disconnected node ${i.name} has no nodes to fail over to ${f}`);return}d.redirectingTo=T,_t.info(`Failing over ${i.database} from ${i.name} to ${f}`),m?m.postMessage({type:"subscribe-to-node",database:i.database,nodes:g}):ou({database:i.database,nodes:g});return}_t.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){_t.error("Error failing over node",o)}},"disconnectedFromNode"),Tc=a(function(i){let o=so.get(i.url),c=o?.get(i.database);if(!c){_t.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.catchingUpFrom=i.lastSendTime,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(_=>_.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):ou({database:i.database,nodes:u}))}},"connectedToNode"),(0,Ni.onMessageByType)("disconnected-from-node",au),(0,Ni.onMessageByType)("connected-to-node",Tc),(0,Ni.onMessageByType)("request-cluster-status",S0)}function S0(e,t){let r=[];for(let[n,s]of iu)try{let i=so.get(s.url);_t.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:_,latency:E,catchingUpFrom:f}]of i)o.push({database:l,connected:d,latency:E,catching_up_from:f?new Date(f).toISOString():"up-to-date",thread_id:u?.threadId,nodes:_.map(h=>h.name)});let c=(0,XR.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){_t.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function io(e,t){let r=pr();e=e??js(t.url),t.name=e;try{if(t.ca){let s=new m0.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){_t.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(_t.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!h0.default.get(p0.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,XR.cloneDeep)(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}_t.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Ni,Sp,_t,XR,h0,p0,m0,J7,so,au,Tc,iu,mp,H_=Ie(()=>{De();Ni=L(dt());ls();Sp=require("worker_threads");su();_t=L(j()),XR=require("lodash"),h0=L(se()),p0=L(M()),m0=require("crypto"),J7=200,so=new Map,iu=new Map,mp=new Map;a(ZR,"startOnMainThread");a(S0,"requestClusterStatus");Sp.parentPort&&(au=a(e=>{Sp.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Tc=a(e=>{Sp.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ni.onMessageByType)("subscribe-to-node",e=>{ou(e)}),(0,Ni.onMessageByType)("unsubscribe-from-node",e=>{Tp(e)}));a(io,"ensureNode")});var gp=N((WOe,g0)=>{"use strict";var X7=M().OPERATIONS_ENUM,ey=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=X7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};g0.exports=ey});var R0=N((zOe,A0)=>{"use strict";var Z7={OPERATION:"operation",REFRESH:"refresh"},ty=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},ry=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};A0.exports={JWTTokens:ty,TOKEN_TYPE_ENUM:Z7,JWTRSAKeys:ry}});var cu=N((JOe,N0)=>{"use strict";var k_=require("jsonwebtoken"),ny=require("fs-extra"),sy=re(),us=M(),{handleHDBError:fn,hdb_errors:eee}=_e(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hn}=eee,x_=j(),y0=Bh(),ay=xn(),tee=cn().update,ree=gp(),nee=eo(),{UserEventMsg:see}=qs(),ta=se();ta.initSync();var iy=require("path"),{JWTTokens:iee,JWTRSAKeys:oee,TOKEN_TYPE_ENUM:Ap}=R0(),aee=ta.get(us.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ta.get(us.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",cee=ta.get(us.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ta.get(us.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Rp="RS256",oy;N0.exports={createTokens:lee,validateOperationToken:dee,refreshOperationToken:uee,validateRefreshToken:O0,getJWTRSAKeys:F_};async function lee(e){if(sy.isEmpty(e)||typeof e!="object")throw fn(new Error,hn.INVALID_AUTH_OBJECT,En.BAD_REQUEST,void 0,void 0,!0);if(sy.isEmpty(e.username))throw fn(new Error,hn.USERNAME_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);if(sy.isEmpty(e.password))throw fn(new Error,hn.PASSWORD_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ay.findAndValidateUser(e.username,e.password),!t)throw fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw x_.error(E),fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}let r=await F_(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await b0(i,r.private_key,r.passphrase),c=await k_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:cee,algorithm:Rp,subject:Ap.REFRESH}),l=y0.hash(c),u=new ree(us.SYSTEM_SCHEMA_NAME,us.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await tee(u)}catch(E){x_.error(E),_=E}if(_!==void 0||d.skipped_hashes.length>0)throw fn(new Error,hn.REFRESH_TOKEN_SAVE_FAILED,En.INTERNAL_SERVER_ERROR);return nee.signalUserChange(new see(process.pid)),new iee(o,c)}a(lee,"createTokens");async function b0(e,t,r){return await k_.sign(e,{key:t,passphrase:r},{expiresIn:aee,algorithm:Rp,subject:Ap.OPERATION})}a(b0,"signOperationToken");async function F_(){if(oy===void 0)try{let e=iy.join(ta.getHdbBasePath(),us.LICENSE_KEY_DIR_NAME,us.JWT_ENUM.JWT_PASSPHRASE_NAME),t=iy.join(ta.getHdbBasePath(),us.LICENSE_KEY_DIR_NAME,us.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=iy.join(ta.getHdbBasePath(),us.LICENSE_KEY_DIR_NAME,us.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await ny.readFile(e)).toString(),s=(await ny.readFile(t)).toString(),i=(await ny.readFile(r)).toString();oy=new oee(i,s,n)}catch(e){throw x_.error(e),fn(new Error,hn.NO_ENCRYPTION_KEYS,En.INTERNAL_SERVER_ERROR)}return oy}a(F_,"getJWTRSAKeys");async function uee(e){if(!e)throw fn(new Error,hn.INVALID_BODY,En.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fn(new Error,hn.REFRESH_TOKEN_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);await O0(e.refresh_token);let t=await F_(),r=await k_.decode(e.refresh_token);return{operation_token:await b0({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(uee,"refreshOperationToken");async function dee(e){try{let t=await F_(),r=await k_.verify(e,t.public_key,{algorithms:Rp,subject:Ap.OPERATION});return await ay.findAndValidateUser(r.username,void 0,!1)}catch(t){throw x_.warn(t),t.name&&t.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}}a(dee,"validateOperationToken");async function O0(e){let t;try{let r=await F_(),n=await k_.verify(e,r.public_key,{algorithms:Rp,subject:Ap.REFRESH});t=await ay.findAndValidateUser(n.username,void 0,!1)}catch(r){throw x_.warn(r),r.name&&r.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}if(!y0.validate(t.refresh_token,e))throw fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED);return t}a(O0,"validateRefreshToken")});var Js=N(J0=>{"use strict";var sr=require("path"),pn=require("fs-extra"),lu=require("node-forge"),M0=require("net"),{generateKeyPair:ly,X509Certificate:oo,createPrivateKey:U0}=require("crypto"),_ee=require("util");ly=_ee.promisify(ly);var yt=lu.pki,zs=require("joi"),{v4:v0}=require("uuid"),{validateBySchema:fy}=gt(),pt=j(),ds=se(),_s=M(),{CONFIG_PARAMS:uu}=_s,Qs=bA(),{ClientError:na}=_e(),Ac=require("node:tls"),{relative:B0,join:fee}=require("node:path"),{CERT_PREFERENCE_APP:ZOe,CERTIFICATE_VALUES:I0}=Qs,Eee=Wa(),uy=Ct(),w0=parseInt(process.version.slice(1))<20,{table:hee,getDatabases:pee,databases:cy}=(De(),oe(lt)),{getJWTRSAKeys:C0}=cu();Object.assign(J0,{generateKeys:py,updateConfigCert:V0,createCsr:bee,signCertificate:Oee,setCertTable:du,loadCertificates:G0,reviewSelfSignedCert:Sy,createTLSSelector:W0,listCertificates:z0,addCertificate:Pee,removeCertificate:Mee,createNatsCerts:wee,generateCertsKeys:Iee,getReplicationCert:q_,getReplicationCertAuth:yee,renewSelfSigned:Cee,hostnamesFromCert:Q0,getKey:Uee});var{urlToNodeName:H0,getThisNodeUrl:mee,getThisNodeName:bp,clearThisNodeName:See}=(ls(),oe(oa)),{readFileSync:Tee,watchFile:gee,statSync:x0}=require("node:fs"),eNe=se(),{getTicketKeys:Aee,onMessageFromWorkers:Ree}=dt(),ra=j(),{isMainThread:k0}=require("worker_threads"),{TLSSocket:F0,createSecureContext:tNe}=require("node:tls"),Ey=3650,G_=["127.0.0.1","localhost","::1"],hy=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Ree(async e=>{e.type===_s.ITC_EVENT_TYPES.RESTART&&(ds.initSync(!0),await Sy())});var Dr;function ia(){return Dr||(Dr=pee().system.hdb_certificate,Dr||(Dr=hee({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__"}]}))),Dr}a(ia,"getCertTable");async function q_(){let e=W0("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(bp());if(!r)return;let n=new oo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(q_,"getReplicationCert");async function yee(){ia();let e=(await q_()).options.cert,r=new oo(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(yee,"getReplicationCertAuth");var D0,sa=new Map;function G0(){if(D0)return;D0=!0;let e=[{configKey:uu.TLS},{configKey:uu.OPERATIONSAPI_TLS}];ia();let t=sr.dirname(uy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=uy.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&B0(fee(t,"keys"),o);c&&P0(o,l=>{sa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&k0){let d;P0(u,_=>{if(I0.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=K0(u),h=new oo(f),T;try{T=Ty(h)}catch(y){pt.error("error extracting common name from certificate",y);return}if(T==null){pt.error("error extracting common name from certificate");return}if(h.checkIssued(new oo(I0.cert)))return;let m=Dr.primaryStore.get(T),g=x0(u).mtimeMs,S=!m||m.is_self_signed?1:m.file_timestamp??m.__updatedtime__;if(m&&g<=S){g<S&&pt.info(`Certificate ${T} at ${u} is older (${new Date(g)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Dr.put({name:T,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:f,private_key_name:c,is_authority:l,hostnames:E,file_timestamp:g,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(G0,"loadCertificates");function P0(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&k0&&pt.warn(`Reloading ${r}:`,e),n=c,t(K0(e)))}catch(c){pt.error(`Error loading ${r}:`,e,c)}},"loadFile");pn.existsSync(e)?s(x0(e)):pt.error(`${r} file not found:`,e),gee(e,{persistent:!1},s)}a(P0,"loadAndWatch");function dy(){let e=mee();if(e==null){let t=G_[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return H0(e)}a(dy,"getHost");function yp(){let e=bp();if(e==null){let t=G_[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(yp,"getCommonName");async function bee(){let e=await q_(),t=yt.certificateFromPem(e.options.cert),r=yt.privateKeyFromPem(e.options.key);pt.info("Creating CSR with cert named:",e.name);let n=yt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:yp()},...hy];pt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:q0()}];return pt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),lu.pki.certificationRequestToPem(n)}a(bee,"createCsr");function q0(){let e=G_.includes(yp())?G_:[...G_,yp()];return e.includes(dy())||e.push(dy()),[{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=>M0.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(q0,"certExtensions");async function Oee(e){let t={},r=sr.join(ds.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ia();for await(let d of Dr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(sa.has(d.private_key_name)){n=sa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await pn.exists(sr.join(r,d.private_key_name))){n=pn.readFile(sr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await _y();s=d.ca,n=d.private_key}n=yt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=yt.certificateFromPem(s.certificate);pt.info("Signing CSR with cert named",s.name);let o=yt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return pt.error(d),new Error("Error verifying CSR: "+d.message)}let c=lu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+Ey),pt.info("sign cert setting validity:",c.validity),pt.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),pt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;pt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,lu.md.sha256.create()),t.certificate=yt.certificateToPem(c)}else pt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Oee,"signCertificate");async function Nee(e,t){await du({name:bp(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await du({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:yt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Nee,"createCertificateTable");async function du(e){let t=new oo(e.certificate);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},ia(),await Dr.patch(e)}a(du,"setCertTable");async function py(){let e=await ly("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:yt.publicKeyFromPem(e.publicKey),private_key:yt.privateKeyFromPem(e.privateKey)}}a(py,"generateKeys");async function my(e,t,r){let n=yt.createCertificate();if(!t){let o=await q_();t=yt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Ey);let i=[{name:"commonName",value:yp()},...hy];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(q0()),n.sign(e,lu.md.sha256.create()),yt.certificateToPem(n)}a(my,"generateCertificates");async function _y(){let e=await z0(),t;for(let r of e){if(!r.is_authority)continue;let n=await j0(r.private_key_name);if(r.private_key_name&&n&&new oo(r.certificate).checkPrivateKey(U0(n))){pt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;pt.trace("No CA found with matching private key")}a(_y,"getCertAuthority");async function $0(e,t,r=!0){let n=yt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Ey);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ds.get(uu.REPLICATION_HOSTNAME)??H0(ds.get(uu.REPLICATION_URL))??v0().split("-")[0]}`},...hy];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,lu.md.sha256.create());let o=sr.join(ds.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),c=sr.join(o,Qs.PRIVATEKEY_PEM_NAME);return r&&await pn.writeFile(c,yt.privateKeyToPem(e)),n}a($0,"generateCertAuthority");async function Iee(){let{private_key:e,public_key:t}=await py(),r=await $0(e,t),n=await my(e,t,r);await Nee(n,r),V0()}a(Iee,"generateCertsKeys");async function wee(){let e=await my(yt.privateKeyFromPem(Qs.CERTIFICATE_VALUES.key),void 0,yt.certificateFromPem(Qs.CERTIFICATE_VALUES.cert)),t=sr.join(ds.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),r=sr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME);await pn.exists(r)||await pn.writeFile(r,e);let n=sr.join(t,Qs.NATS_CA_PEM_NAME);await pn.exists(n)||await pn.writeFile(n,Qs.CERTIFICATE_VALUES.cert)}a(wee,"createNatsCerts");async function Cee(){ia();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await Sy()}a(Cee,"renewSelfSigned");async function Sy(){See(),await G0(),ia();let e=await _y();if(!e){pt.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=ds.get(uu.TLS_PRIVATEKEY),n=sr.join(ds.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),s,i=B0(n,r);try{s=yt.privateKeyFromPem(await pn.readFile(r))}catch(c){pt.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await py(),await pn.exists(sr.join(n,Qs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${v0().split("-")[0]}.pem`),await pn.writeFile(sr.join(n,i),yt.privateKeyToPem(s))}let o=await $0(s,yt.setRsaPublicKey(s.n,s.e),!1);await du({name:o.subject.getField("CN").value,uses:["https"],certificate:yt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await q_()){let r=bp();pt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await _y();let n=yt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await my(yt.privateKeyFromPem(e.private_key),s,n);await du({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(Sy,"reviewSelfSignedCert");function V0(){let e=Eee(Object.keys(_s.CONFIG_PARAM_MAP),!0),t=sr.join(ds.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME),r=sr.join(t,Qs.PRIVATEKEY_PEM_NAME),n=sr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME),s=sr.join(t,Qs.NATS_CA_PEM_NAME),i=_s.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),uy.updateConfigValue(void 0,void 0,o,!1,!0)}a(V0,"updateConfigCert");function K0(e){return e.startsWith("-----BEGIN")?e:Tee(e,"utf8")}a(K0,"readPEM");var L0=Ac.createSecureContext;Ac.createSecureContext=function(e){if(!e.cert||!e.key)return L0(e);let t={...e};delete t.key,delete t.cert;let r=L0(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Y0=Ac.Server;Ac.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),Y0.call(this,e,t)};Ac.Server.prototype=Y0.prototype;var Dee=F0.prototype._init;F0.prototype._init=function(e,t){Dee.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 gc=new Map;function W0(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(),gc.clear();let d=0;for await(let _ of cy.system.hdb_certificate.search([])){let E=_.certificate,f=new oo(E);_.is_authority&&(f.asString=E,gc.set(f.subject,E))}for await(let _ of cy.system.hdb_certificate.search([]))try{if(_.is_authority)continue;let E=e==="operations-api",f=_.is_self_signed?1:2;E&&_.uses?.includes?.("operations")&&(f+=1);let h=await j0(_.private_key_name),T=_.certificate,m=new oo(T);if(gc.has(m.issuer)&&(T+=`
12
- `+gc.get(m.issuer)),!h||!T)throw new Error("Missing private key or certificate for secure server");let g={ciphers:_.ciphers,ticketKeys:Aee(),availableCAs:gc,ca:t&&Array.from(gc.values()),cert:T,key:h,key_file:_.private_key_name,is_self_signed:_.is_self_signed};o&&(g.sessionIdContext=o.sessionIdContext);let S=Ac.createSecureContext(g);S.name=_.name,S.options=g,S.quality=f,S.certificateAuthorities=Array.from(gc),S.certStart=T.toString().slice(0,100);let y=_.hostnames??Q0(m);Array.isArray(y)||(y=[y]);let I;for(let U of y)if(U){U[0]==="*"&&(s=!0,U=U.slice(1)),U===dy()&&(f+=2),M0.isIP(U)&&(I=!0);let H=r.get(U)?.quality??0;f>H&&r.set(U,S)}else ra.error("No hostname found for certificate at",Ac.certificate);ra.trace("Adding TLS",S.name,"for",o.ports||"client","cert named",_.name,"hostnames",y,"quality",f,"best quality",d),f>d&&(i.defaultContext=n=S,d=f,o&&(o.defaultContext=S))}catch(E){ra.error("Error applying TLS for",_.name,E)}o?.secureContextsListeners.forEach(_=>_()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),cy.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){ra.info("TLS requested for",o||"(no SNI)",this.isReplicationConnection);let l=o;for(;;){let d=r.get(l);if(d)return ra.debug("Found certificate for",o,d.certStart),d.replicationContext&&(this.isReplicationConnection||w0)&&(d=d.replicationContext),c(null,d);if(s&&l){let _=l.indexOf(".",1);_<0?l="":l=l.slice(_)}else break}o?ra.debug("No certificate found to match",o,"using the default certificate"):ra.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.replicationContext&&(this.isReplicationConnection||w0)&&(u=u.replicationContext):ra.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(W0,"createTLSSelector");async function j0(e){let t=sa.get(e);return!t&&e?await pn.readFile(sr.join(ds.get(uu.ROOTPATH),_s.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(j0,"getPrivateKeyByName");async function z0(){ia();let e=[];for await(let t of Dr.search([]))e.push(t);return e}a(z0,"listCertificates");async function Pee(e){let t=fy(e,zs.object({name:zs.string().required(),certificate:zs.string().required(),is_authority:zs.boolean().required(),private_key:zs.string(),hosts:zs.array(),uses:zs.array()}));if(t)throw new na(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new oo(n),c=!1,l=!1,u;for(let[f,h]of sa)!s&&!c&&o.checkPrivateKey(U0(h))&&(c=!0,u=f),s&&s===h&&(l=!0,u=f);if(!i&&!s&&!c)throw new na("A suitable private key was not found for this certificate");let d;if(!r){try{d=Ty(o)}catch(f){pt.error(f)}if(d==null)throw new na("Error extracting certificate common name, please provide a name parameter")}let _=Lee(r??d);s&&!c&&!l&&(await pn.writeFile(sr.join(ds.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,_+".pem"),s),sa.set(_,s));let E={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(E.private_key_name=u??_+".pem"),await du(E),"Successfully added certificate: "+_}a(Pee,"addCertificate");function Lee(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Lee,"sanitizeName");async function Mee(e){let t=fy(e,zs.object({name:zs.string().required()}));if(t)throw new na(t.message);let{name:r}=e;ia();let n=await Dr.get(r);if(!n)throw new na(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Dr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(pt.info("Removing private key named",s),await pn.remove(sr.join(ds.getHdbBasePath(),_s.LICENSE_KEY_DIR_NAME,s)))}return await Dr.delete(r),"Successfully removed "+r}a(Mee,"removeCertificate");function Ty(e){return e.subject.match(/CN=(.*)/)?.[1]}a(Ty,"extractCommonName");function Q0(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[Ty(e)]}a(Q0,"hostnamesFromCert");async function Uee(e){if(e.bypass_auth!==!0)throw new na("Unauthorized","401");let t=fy(e,zs.object({name:zs.string().required()}));if(t)throw new na(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await C0()).private_key;if(r===".jwtPublic")return(await C0()).public_key;if(sa.get(r))return sa.get(e.name);throw new na("Key not found")}a(Uee,"getKey")});var W_={};je(W_,{addAnalyticsListener:()=>Y_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>vee});function vee(e){oB=e}function mr(e,t,r,n,s){if(!oB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Ip.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Ip.set(i,o)}Op||Bee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function Y_(e){lB.push(e)}function Bee(){Op=performance.now(),setTimeout(async()=>{let e=performance.now()-Op;Op=0;let t=[],r={time:Date.now(),period:e,threadId:Rc.threadId,metrics:t};for(let[s,i]of Ip){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of uB){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await dB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Rc.threadId,byThread:!0,...n});for(let s of lB)s(t);Ip=new Map,Rc.parentPort?Rc.parentPort.postMessage({type:cB,report:r}):EB({report:r})},aB).unref()}async function Hee(e,t=6e4){let r=Ry(),n=_B(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,$_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,$_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:Y,total:V,distribution:ne,threads:Q,...de}=y;Y||(Y=1);let W=X+(I?"-"+I:"");U!==void 0&&(W+="-"+U),H!==void 0&&(W+="-"+H);let ae=c.get(W);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*Y)/(Oe+Y))}ae.count+=Y,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(W,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(ne){ne=ne.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(W);Oe?Oe.push(...ne):l.set(W,ne)}}await dB()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...Y}=T;X=X.filter(V=>V);for(let V in Y){if(typeof T[V]!="number")continue;let ne=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(ne+=de)}T[V]=ne}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of uB){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,Y,V,ne,Q,de,W,ae,Oe]=y;Object.assign(g,{p1:X,p10:Y,p25:V,median:ne,p75:Q,p90:de,p95:W,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Np.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Np.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-X0,active:h-Z0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}X0=f,Z0=h}async function eB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Ry(){return tB||(tB=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function _B(){return rB||(rB=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Fee(){fB=!0;let e=(0,K_.get)(Ay.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Hee(aB,e),await eB(Ry(),xee),await eB(_B(),kee)},Math.min(e/2,2147483647)).unref()}function EB(e,t){let r=e.report;r.threadId=t?.threadId||Rc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(nB+=n.mean*n.count);r.totalBytesProcessed=nB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(sB.get(t))}),sB.set(t,t.performance.eventLoopUtilization())),r.id=(0,Np.getNextMonotonicTime)(),Ry().primaryStore.put(r.id,r),fB||Fee(),Gee&&(hB=$ee(r))}async function $ee(e){if(await hB,!aa){let r=(0,V_.dirname)((0,$_.getLogFilePath)());try{aa=await(0,gy.open)((0,V_.join)(r,"analytics.log"),"r+")}catch{aa=await(0,gy.open)((0,V_.join)(r,"analytics.log"),"w+")}}let t=(await aa.stat()).size;if(t>qee){let r=Buffer.alloc(t);await aa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await aa.write(r,{position:0}),await aa.truncate(r.length),t=r.length}await aa.write(JSON.stringify(e)+`
13
- `,t)}var Rc,iB,$_,V_,gy,Np,K_,Ay,Ip,oB,Op,aB,cB,lB,uB,X0,Z0,dB,xee,kee,tB,rB,fB,nB,sB,Gee,hB,aa,qee,Ii=Ie(()=>{Rc=require("worker_threads"),iB=L(dt());De();$_=L(j()),V_=require("path"),gy=require("fs/promises"),Np=L(sn()),K_=L(se()),Ay=L(M());qr();(0,K_.initSync)();Ip=new Map,oB=(0,K_.get)(Ay.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(vee,"setAnalyticsEnabled");a(mr,"recordAction");it.recordAnalytics=mr;a(qn,"recordActionBinary");Op=0,aB=1e3,cB="analytics-report",lB=[];a(Y_,"addAnalyticsListener");uB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Bee,"sendAnalytics");a(Hee,"aggregation");X0=0,Z0=0,dB=a(()=>new Promise(setImmediate),"rest");a(eB,"cleanup");xee=36e5,kee=31536e6;a(Ry,"getRawAnalyticsTable");a(_B,"getAnalyticsTable");(0,iB.setChildListenerByType)(cB,EB);a(Fee,"startScheduledTasks");nB=0,sB=new Map,Gee=!1;a(EB,"recordAnalytics");qee=1e6;a($ee,"logAnalytics")});async function wy(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=ot(),i;if(e.includes("wss://")){if(!by){let l=(0,LB.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),by=u.secureContexts}if(i=by.get(s),i&&fe.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,UB.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,ALPNProtocols:["http/1.1","harperdb-replication"],rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=MB.createSecureContext({...i.options,ca:Array.from(bc)})),new DB.WebSocket(e,"harperdb-replication-v1",c)}function Lp(e,t,r){let n=t.port||t.securePort,s=Iy.pid%1e3+"-"+PB.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||yc,_,E,f=!1,h=t.subscription;h?.then&&h.then(ie=>h=ie);let T=t.tables||u&&ut()[u];if(!r){fe.error?.("No authorization provided"),ss(1008,"Unauthorized");return}let m=new Map,g=[],S=r.name;S&&t.connection&&(t.connection.nodeName=S);let y,I,U,H,X,Y,V=1e3,ne,Q=0,de=0,W=0,ae=0;if(t.url){let ie=a(()=>{X&&W===e._socket?.bytesRead&&ae===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),W=e._socket?.bytesRead,ae=e._socket?.bytesWritten)},"send_ping");U=setInterval(ie,NB).unref(),ie()}else Oe();function Oe(){clearTimeout(H),W=e._socket?.bytesRead,ae=e._socket?.bytesWritten,H=setTimeout(()=>{W===e._socket?.bytesRead&&ae===e._socket?.bytesWritten&&(fe.warn?.(`Timeout waiting for ping from ${S}, terminating connection and reconnecting`),e.terminate())},NB*2).unref()}a(Oe,"resetPingTimer"),u&&Va(u);let Ne,Me,Gr=[],wd=[],ka,wn=[],Cd=[],Ol=[],Lw=150,KE=0,vt=0,Fa,Ga,Us,vs,YE;e.on("message",ie=>{Q=performance.now();try{let Se=ie.dataView=new Oc(ie.buffer,ie.byteOffset,ie.byteLength);if(ie[0]>127){let A=(0,ct.decode)(ie),[w,R,b]=A;switch(w){case mB:{if(R){if(S){if(S!==R){fe.error?.(s,`Node name mismatch, expecting to connect to ${S}, but peer reported name as ${R}, disconnecting`),e.send((0,ct.encode)([_u])),ss(1008,"Node name mismatch");return}}else if(S=R,t.connection?.tentativeNode){let x=t.connection.tentativeNode;x.name=S,t.connection.tentativeNode=null,io(S,x)}if(t.connection&&(t.connection.nodeName=S),fe.debug?.(s,"received node name:",S,"db:",u),!u)try{Va(u=A[2]),u==="system"&&(Ne=Zo(t,(x,q)=>{$a(q)&&Ir(q)}),e.on("close",()=>{Ne?.remove()}))}catch(x){fe.warn?.(s,"Error setting database",x),e.send((0,ct.encode)([_u])),ss(1008,x.message);return}qa()}break}case bB:{fe.debug?.(s,"Received table definitions for",R.map(x=>x.table));for(let x of R){let q=A[2];x.database=q;let ee;$a(q)&&(q==="system"?We[q]?.[x.table]||(ee=Oy(x,We[q]?.[x.table])):ee=Oy(x,We[q]?.[x.table]),_||(_=ee?.auditStore),T||(T=ut()?.[q]))}break}case _u:ss();break;case AB:try{let x=r?.replicates||r?.subscribers||r?.name;server.operation(R,{user:r},!x).then(q=>{Array.isArray(q)&&(q={results:q}),q.requestId=R.requestId,e.send((0,ct.encode)([Cp,q]))},q=>{e.send((0,ct.encode)([Cp,{requestId:R.requestId,error:q instanceof Error?q.toString():q}]))})}catch(x){e.send((0,ct.encode)([Cp,{requestId:R.requestId,error:x instanceof Error?x.toString():x}]))}break;case Cp:let{resolve:D,reject:O}=m.get(R.requestId);R.error?O(new Error(R.error)):D(R),m.delete(R.requestId);break;case yy:let B=A[3];T||(u?fe.error?.(s,"No tables found for",u):fe.error?.(s,"Database name never received"));let k=T[B];k=Oy({table:B,database:u,attributes:R.attributes,schemaDefined:R.schemaDefined},k),Gr[b]={name:B,decoder:new ct.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:R.typedStructs,structures:R.structures}),getEntry(x){return k.primaryStore.getEntry(x)},rootStore:k.primaryStore.rootStore};break;case SB:YE=_?e0(S,R,_):new Map,ka=A[2],fe.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${ka}`);break;case TB:let C=b;Ol[C]=R;break;case yB:let F=["replicated",u,S];E||(E=new Float64Array(_.getUserSharedBuffer(F,new ArrayBuffer(8)))),E[0]=R,fe.trace?.(s,"received and broadcasting committed update",R),E.buffer.notify();break;case RB:y=R,h.send({type:"end_txn",localTime:y,remoteNodeIds:g});break;case gB:{let x=R,q;try{let ee=A[3],G=wd[b]||(wd[b]=T[A[4]]);if(!G)return fe.warn?.("Unknown table id trying to handle record request",b);let Re=G.primaryStore.getBinaryFast(Symbol.for("structures")),Ee=Re.length;if(Ee!==vt){vt=Ee;let te=(0,ct.decode)(Re);e.send((0,ct.encode)([yy,{typedStructs:te.typed,structures:te.named},b,G.tableName]))}let Ae=G.primaryStore.getBinaryFast(ee);if(Ae){let te=G.primaryStore.decoder.decode(Ae,{valueAsBuffer:!0});q=(0,ct.encode)([wp,x,{value:te.value,expiresAt:te.expiresAt,version:te.version,residencyId:te.residencyId,nodeId:te.nodeId,user:te.user}])}else q=(0,ct.encode)([wp,x])}catch(ee){q=(0,ct.encode)([wp,x,{error:ee.message}])}e.send(q);break}case wp:{let{resolve:x,reject:q,tableId:ee,key:G}=m.get(A[1]),Re=A[2];if(Re?.error)q(new Error(Re.error));else if(Re){let Ee=Gr[ee].decoder.decode(Re.value);Re.value=Ee,Re.key=G,x(Re)}else x();m.delete(A[1]);break}case pB:{vs=R;let x,q,ee=!1;if(h){if(u!==h.databaseName&&!h.then){fe.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(fe.debug?.(s,"received subscription request for",u,"at",vs),!h){let ce;h=new Promise(Ye=>{fe.debug?.("Waiting for subscription to database "+u),ce=Ye}),h.ready=ce,yc.set(u,h)}if(r.name)q=pr().subscribe(r.name),q.then(async ce=>{x=ce;for await(let Ye of x){let rt=Ye.value;if(!(rt?.replicates===!0||rt?.replicates?.receives||rt?.subscriptions?.some(Ze=>(Ze.database||Ze.schema)===u&&Ze.publish!==!1))){ee=!0,e.send((0,ct.encode)([_u])),ss(1008,`Unauthorized database subscription to ${u}`);return}}},ce=>{fe.error?.(s,"Error subscribing to HDB nodes",ce)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ct.encode)([_u])),ss(1008,`Unauthorized database subscription to ${u}`);return}if(Us&&(fe.debug?.(s,"stopping previous subscription",u),Us.emit("close")),vs.length===0)return;let G=vs[0],Re=a(ce=>{if(ce&&(G.replicateByDefault?!G.tables.includes(ce.tableName):G.tables.includes(ce.tableName)))return{table:ce}},"tableToTableEntry"),Ee={txnTime:0},Ae,te,K=1/0,ge,Be=a((ce,Ye)=>{if(K=Ye,ce.type==="end_txn"){Ee.txnTime&&(o[i]!==66&&fe.error?.("Invalid encoding of message"),ui(9),ui(Pp),Ka(ge=Ye),we()),i=c,Ee.txnTime=0;return}let rt=ce.nodeId,Ze=ce.tableId,st=te[Ze];if(!st&&(st=te[Ze]=Re(h.tableById[Ze]),!st))return fe.debug?.("Not subscribed to table",Ze);let Bt=st.table,xo=Bt.primaryStore,Yt=xo.encoder;(ce.extendedType&ph||!Yt.typedStructs)&&(Yt._mergeStructures(Yt.getStructures()),Yt.typedStructs&&(Yt.lastTypedStructuresLength=Yt.typedStructs.length));let WE=Ae[rt];if(!(WE&&WE.startTime<Ye&&(!WE.endTime||WE.endTime>Ye)))return j_&&fe.trace?.(s,"skipping replication update",ce.recordId,"to:",S,"from:",rt,"subscribed:",Ae),Mw();j_&&fe.trace?.(s,"sending replication update",ce.recordId,"to:",S,"from:",rt,"subscribed:",Ae);let XT=ce.version;Ee.txnTime!==XT&&(Ee.txnTime&&(j_&&fe.trace?.(s,"new txn time, sending queued txn",Ee.txnTime),o[i]!==66&&fe.error?.("Invalid encoding of message"),we()),Ee.txnTime=XT,i=c,Ka(XT));let Ya=ce.residencyId,ZT=Yi(Ya,Bt),jE;if(ZT&&!ZT.includes(S)){let Il=Yi(ce.previousResidencyId,Bt);if(Il&&!Il.includes(S)&&(ce.type==="put"||ce.type==="patch")||Bt.getResidencyById)return Mw();let Md=ce.recordId;fe.trace?.(s,"sending invalidation",Md,S,"from",rt);let rg=0;Ya&&(rg|=Ja),ce.previousResidencyId&&(rg|=Xa);let ng,zE=null;for(let Uw in Bt.indices){if(!zE){if(ng=ce.getValue(xo,!0),!ng)break;zE={}}zE[Uw]=ng[Uw]}jE=Pl(ce.version,Ze,Md,null,rt,ce.user,ce.type==="put"||ce.type==="patch"?"invalidate":ce.type,Yt.encode(zE),rg,Ya,ce.previousResidencyId,ce.expiresAt)}function Mw(){fe.trace?.(s,"skipping audit record",ce.recordId),Y||(Y=setTimeout(()=>{Y=null,(ge||0)+OB/2<K&&(j_&&fe.trace?.(s,"sending skipped sequence update",K),e.send((0,ct.encode)([RB,K])))},OB).unref())}a(Mw,"skipAuditRecord");let eg=Yt.typedStructs,tg=Yt.structures;if((eg?.length!=st.typed_length||tg?.length!=st.structure_length)&&(st.typed_length=eg?.length,st.structure_length=tg.length,fe.debug?.(s,"send table struct",st.typed_length,st.structure_length),st.sentName||(st.sentName=!0),e.send((0,ct.encode)([yy,{typedStructs:eg,structures:tg,attributes:Bt.attributes,schemaDefined:Bt.schemaDefined},Ze,st.table.tableName]))),Ya&&!Cd[Ya]&&(e.send((0,ct.encode)([TB,ZT,Ya])),Cd[Ya]=!0),jE)ui(jE.length),Ld(jE);else{let Il=ce.encoded,Md=Il[0]===66?8:0;ui(Il.length-Md),Ld(Il,Md)}},"sendAuditRecord"),we=a(()=>{c-i>8?(e.send(o.subarray(i,c)),fe.debug?.(s,"Sent message, size:",c-i)):fe.debug?.(s,"skipping empty transaction")},"sendQueuedData");Us=new Ny.EventEmitter,Us.once("close",()=>{ee=!0,x?.end()});for(let{startTime:ce}of vs)ce<K&&(K=ce);(q||Promise.resolve()).then(async()=>{h=await h,_=h.auditStore,te=h.tableById.map(Re),Ae=[];for(let{name:Ye,startTime:rt,endTime:Ze}of vs){let st=hp(Ye,_);fe.debug?.("subscription to",Ye,"using local id",st,"starting",rt),Ae[st]={startTime:rt,endTime:Ze}}Ir(u),Ne||(Ne=Nc(Ye=>{Ye.databaseName===u&&Ir(u)}),Me=z_(Ye=>{Ye===u&&(e.send((0,ct.encode)([_u])),ss())}),e.on("close",()=>{Ne?.remove(),Me?.remove()})),e.send((0,ct.encode)([SB,M_(h.auditStore),vs.map(({name:Ye})=>Ye)]));let ce=!0;do{isFinite(K)||(fe.warn?.("Invalid sequence id "+K),ss(1008,"Invalid sequence id"+K));let Ye;if(ce&&!ee&&(ce=!1,!(Cy(_)<=K)&&wB.default.get(CB.CONFIG_PARAMS.REPLICATION_COPYTABLESTOCATCHUP)!==!1&&server.nodes[0]?.name===S)){fe.info?.("Replicating all tables to",S);let Ze=K,st=Mp(_);for(let Bt in T){if(!Re(Bt))continue;let xo=T[Bt];for(let Yt of xo.primaryStore.getRange({snapshot:!1})){if(ee)return;Yt.localTime>=K&&(fe.trace?.(s,"Copying record from",u,Bt,Yt.key,Yt.localTime),Ze=Math.max(Yt.localTime,Ze),Ye=!0,Be({recordId:Yt.key,tableId:xo.tableId,type:"put",getValue(){return Yt.value},encoded:xo.primaryStore.getBinary(Yt.key),version:Yt.version,residencyId:Yt.residencyId,nodeId:st},Yt.localTime))}}K=Ze}for(let{key:rt,value:Ze}of _.getRange({start:K||1,exclusiveStart:!0,snapshot:!1})){if(ee)return;de=rt;let st=xt(Ze);Be(st,rt),e._socket.writableNeedDrain?await new Promise(Bt=>e._socket.once("drain",Bt)):await new Promise(setImmediate),Us.startTime=rt,Ye=!0}Ye&&Be({type:"end_txn"},K),de=0,await c0(_)}while(!ee)}).catch(ce=>{fe.error?.(s,"Error handling subscription to node",ce),ss(1008,"Error handling subscription to node")});break}}return}Se.position=8;let tt=!0,v,p;do{let A=Se.readInt();if(A===9&&Se.getUint8(Se.position)==Pp){Se.position++,y=p=Se.readFloat64(),fe.trace?.("received remote sequence update",y,u);break}let w=Se.position,R=xt(ie,w,w+A),b=Gr[R.tableId];b||fe.error?.(`No table found with an id of ${R.tableId}`);let D;R.residencyId&&(D=Ol[R.residencyId],fe.trace?.(s,"received residency list",D,R.type,R.recordId));try{v={table:b.name,id:R.recordId,type:R.type,nodeId:YE.get(R.nodeId),residencyList:D,timestamp:R.version,value:R.getValue(b),user:R.user,beginTxn:tt,expiresAt:R.expiresAt}}catch(O){throw O.message+="typed structures for current decoder"+JSON.stringify(b.decoder.typedStructs),O}tt=!1,j_&&fe.trace?.(s,"received replication message",R.type,"id",v.id,"version",R.version,"nodeId",v.nodeId,"value",v.value),h.send(v),Se.position=w+A}while(Se.position<ie.byteLength);KE++,mr(ie.byteLength,"bytes-received",S+"."+u+"."+v.table,"replication","ingest"),KE>Lw&&!Fa&&(Fa=!0,e.pause()),h.send({type:"end_txn",localTime:y,remoteNodeIds:g,onCommit(){if(v){let A=Date.now()-v.timestamp;mr(A,"replication-latency",S+"."+u+"."+v.table,v.type,"ingest")}KE--,Fa&&(Fa=!1,e.resume()),!I&&p&&(fe.trace?.(s,"queuing confirmation of a commit at",p),setTimeout(()=>{e.send((0,ct.encode)([yB,I])),fe.trace?.(s,"sent confirmation of a commit at",I),I=null},Vee)),I=p}})}catch(Se){fe.error?.(s,"Error handling incoming replication message",Se)}}),e.on("ping",Oe),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-X,Tc({name:S,database:u,url:t.url,lastSendTime:de,latency:t.connection.latency})),X=null}),e.on("close",(ie,Se)=>{clearInterval(U),clearTimeout(H),Us&&Us.emit("close"),Ga&&Ga.end();for(let[tt,{reject:v}]of m)v(new Error(`Connection closed ${Se?.toString()} ${ie}`));fe.debug?.(s,"closed",ie,Se?.toString())});function Ve(){}a(Ve,"recordRemoteNodeSequence");function ss(ie,Se){e.isFinished=!0,e.close(ie,Se)}a(ss,"close");function qa(){if(f||(f=!0,t.connection?.on("subscriptions-updated",qa)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let ie=new Map;try{for(let v of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let p of v.value.nodes||[])p.lastTxnTime>(ie.get(p.id)??0)&&ie.set(p.id,p.lastTxnTime)}catch(v){if(!v.message.includes("Can not re"))throw v}let Se=t.connection?.nodeSubscriptions?.[0];g=[];let tt=t.connection?.nodeSubscriptions.map((v,p)=>{let A=[],{replicateByDefault:w}=v;if(v.subscriptions){for(let O of v.subscriptions)if(O.subscribe&&(O.schema||O.database)===u){let B=O.table;T?.[B]?.replicate!==!1&&A.push(B)}w=!1}else for(let O in T)(w?T[O].replicate===!1:T[O].replicate)&&A.push(O);let R=_&&hp(v.name,_),b=h?.dbisDB?.get([Symbol.for("seq"),R])??1,D=Math.max(b?.seqId??1,(typeof v.start_time=="string"?new Date(v.start_time).getTime():v.start_time)??1);if(fe.debug?.("Starting time recorded in db",v.name,R,u,b?.seqId,"start time:",D),Se!==v){D>5e3&&(D-=5e3);let O=_&&hp(Se.name,_),B=h?.dbisDB?.get([Symbol.for("seq"),O])??1;for(let k of B?.nodes||[])k.name===v.name&&(D=k.seqId,fe.debug?.("Using sequence id from proxy node",Se.name,D))}return g.push(R),ie.get(R)>D&&(D=ie.get(R),fe.debug?.("Updating start time from more recent txn recorded",Se.name,D)),{name:v.name,replicateByDefault:w,tables:A,startTime:D,endTime:v.end_time}});if(tt)if(fe.debug?.(s,"sending subscription request",tt,h?.dbisDB?.path),clearTimeout(ne),tt.length>0)e.send((0,ct.encode)([pB,tt]));else{let v=a(()=>{let p=performance.now();ne=setTimeout(()=>{Q<=p?ss(1008,"No nodes to subscribe to"):v()},V)},"schedule_close");v()}}a(qa,"sendSubscriptionRequestUpdate");function Yi(ie,Se){if(!ie)return;let tt=wn[ie];return tt||(tt=Se.getResidencyRecord(ie),wn[ie]=tt),tt}a(Yi,"getResidence");function $a(ie){return!(ca&&ca!="*"&&!ca[ie]&&!ca.includes?.(ie)&&!ca.some?.(Se=>Se.name===ie))}a($a,"checkDatabaseAccess");function Va(ie){if(h=h||d.get(ie),!$a(ie))throw new Error(`Access to database "${ie}" is not permitted`);h||fe.warn?.(`No database named "${ie}" was declared and registered`),_=h?.auditStore,T||(T=ut()?.[ie]);let Se=ot();if(Se===S)throw Se?new Error("Should not connect to self",Se):new Error("Node name not defined");return Dd(Se,ie),!0}a(Va,"setDatabase");function Dd(ie,Se){let tt=ut()?.[Se],v=[];for(let p in tt){let A=tt[p];v.push({table:p,schemaDefined:A.schemaDefined,attributes:A.attributes.map(w=>({name:w.name,type:w.type,isPrimaryKey:w.isPrimaryKey}))})}fe.trace?.("Sending database info for node",ie,"database name",Se),e.send((0,ct.encode)([mB,ie,Se,v]))}a(Dd,"sendNodeDBName");function Ir(ie){let Se=ut()?.[ie],tt=[];for(let v in Se){if(vs&&!vs.some(A=>A.replicateByDefault?!A.tables.includes(v):A.tables.includes(v)))continue;let p=Se[v];tt.push({table:v,schemaDefined:p.schemaDefined,attributes:p.attributes.map(A=>({name:A.name,type:A.type,isPrimaryKey:A.isPrimaryKey}))})}e.send((0,ct.encode)([bB,tt,ie]))}a(Ir,"sendDBSchema");let Nl=1,Pd=[];return{end(){Ga&&Ga.end(),Us&&Us.emit("close")},getRecord(ie){let Se=Nl++;return new Promise((tt,v)=>{let p=[gB,Se,ie.table.tableId,ie.id];Pd[ie.table.tableId]||(p.push(ie.table.tableName),Pd[ie.table.tableId]=!0),e.send((0,ct.encode)(p)),m.set(Se,{tableId:ie.table.tableId,key:ie.id,resolve(A){let{table:w,entry:R}=ie;tt(A),A&&w._recordRelocate(R,A)},reject:v})})},sendOperation(ie){let Se=Nl++;return ie.requestId=Se,e.send((0,ct.encode)([AB,ie])),new Promise((tt,v)=>{m.set(Se,{resolve:tt,reject:v})})}};function ui(ie){Ho(5),ie<128?o[c++]=ie:ie<16384?(l.setUint16(c,ie|32768),c+=2):ie<1056964608?(l.setUint32(c,ie|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,ie),c+=5)}function Ld(ie,Se=0,tt=ie.length){let v=tt-Se;Ho(v),ie.copy(o,c,Se,tt),c+=v}function Ka(ie){Ho(8),l.setFloat64(c,ie),c+=8}function Ho(ie){if(ie+16>o.length-c){let Se=Buffer.allocUnsafeSlow(c+ie-i+65536>>10<<11);o.copy(Se,0,i,c),c=c-i,i=0,o=Se,l=new DataView(o.buffer,0,o.length)}}}function Oy(e,t){let r=e.database??"data";if(r!=="data"&&!We[r]){fe.warn?.("Database not found",e.database);return}t||(t={});let n=!1,s=e.schemaDefined,i=t.attributes||[];for(let o=0;o<e.attributes?.length;o++){let c=e.attributes[o],l=i[o];(!l||l.name!==c.name||l.type!==c.type)&&(n=!0,s||(c.indexed=!0),i[o]=c)}return n?(fe.debug?.("(Re)creating",e),Et({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var wB,CB,ct,DB,PB,fe,Ny,LB,MB,Iy,UB,pB,mB,SB,_u,TB,yy,gB,wp,AB,Cp,RB,yB,bB,vB,yc,j_,OB,Vee,NB,by,IB,Dp,BB=Ie(()=>{De();ji();YR();JR();ls();wB=L(se()),CB=L(M());Ll();ct=require("msgpackr"),DB=require("ws"),PB=require("worker_threads"),fe=L(Sc());H_();Ny=require("events"),LB=L(Js()),MB=L(require("node:tls"));su();Iy=L(require("node:process")),UB=require("node:net");Ii();pB=129,mB=140,SB=141,_u=142,TB=130,yy=132,gB=133,wp=134,AB=136,Cp=137,RB=143,yB=144,bB=145,vB=new Map,yc=new Map,j_=!0,OB=300,Vee=2,NB=3e4;a(wy,"createWebSocket");IB=1e3,Dp=class extends Ny.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??js(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=IB;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await wy(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;fe.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Iy.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),fe.info?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=IB,Tc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=Lp(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(fe.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?fe.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`):fe.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(au({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();fe.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(Lp,"replicateOverWS");a(Oy,"ensureTableIfChanged")});var oa={};je(oa,{clearThisNodeName:()=>Xee,disableReplication:()=>jee,enabled_databases:()=>ca,forEachReplicatedDatabase:()=>Zo,getThisNodeId:()=>Mp,getThisNodeName:()=>ot,getThisNodeUrl:()=>ea,hostnameToUrl:()=>Hp,lastTimeInAuditStore:()=>U_,monitorNodeCAs:()=>VB,replicateOperation:()=>ete,replication_certificate_authorities:()=>bc,sendOperationToNode:()=>J_,servers:()=>Yee,setReplicator:()=>YB,start:()=>Wee,startOnMainThread:()=>ZR,subscribeToNode:()=>ou,unsubscribeFromNode:()=>Tp,urlToNodeName:()=>js});function Wee(e){if(e.port||(e.port=Es.default.get(Ic.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=Es.default.get(Ic.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),!ot())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of B_(e))t.set(js(n.url),n);zee(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=it.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),Lp(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&Sr.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,it.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&Sr.error(`Incoming client connection from ${n.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`,n._nodeRequest.socket.authorizationError);let i=pr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));c?n.user=c:Sr.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:Sr.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(bc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.replicationContext=Bp.createSecureContext(l)}catch(c){Sr.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),VB(s),Es.default.get(Ic.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function VB(e){let t=0;nu(r=>{r?.ca&&(bc.add(r.ca),bc.size!==t&&(t=bc.size,e?.()))})}function jee(e=!0){$B=e}function zee(e){$B||(ut(),ca=e.databases,Zo(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||yc;for(let[s,i]of Q_){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];YB(r,s,e),vB.get(s)?.forEach(i=>i(s))}}))}function YB(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 KB extends Pr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||yc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(Sr.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Pn,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;for(let E of c){let f=Qee(E,KB.subscription,e);f?.isConnected&&!u.has(f)&&(!d||f.latency<d.latency)&&(d=f)}if(!d)throw l||new GB.ServerError("No connection to any other nodes are available",502);let _={requestId:Kee++,table:t,entry:i,id:i.key};u.add(d);try{return await d.getRecord(_)}catch(E){if(d.isConnected)throw E;Sr.warn("Error in load from node",vp,E),l||(l=E)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function WB(e,t,r,n,s){let i=Q_.get(e);i||Q_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new Dp(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function Qee(e,t,r){let n=HB.get(e)?.get(r);if(n)return n;let s=pr().primaryStore.get(e);return s?.url&&(n=WB(s.url,t,r,e,s.authorization),HB.set(e,Q_.get(s.url))),n}async function J_(e,t,r){r||(r={}),r.serverName=e.name;let n=await wy(e.url,r),s=Lp(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{Sr.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function ou(e){try{qB.isMainThread&&Sr.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=yc.get(e.database);if(!t){let n;t=new Promise(s=>{Sr.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,yc.set(e.database,t)}let r=WB(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>v_(n,e.database)),e.replicateByDefault)}catch(t){Sr.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function Tp({name:e,url:t,database:r}){Sr.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(pr().primaryStore.getRange({})));let n=Q_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Jee(){if(Dy!==void 0)return Dy;let e=Es.default.get(Ic.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE)||Es.default.get(Ic.CONFIG_PARAMS.TLS_CERTIFICATE);if(e)return Dy=new kB.X509Certificate((0,FB.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function ot(){return vp||(vp=Es.default.get("replication_hostname")??js(Es.default.get("replication_url"))??Jee()??xB("operationsapi_network_secureport")??xB("operationsapi_network_port")??"127.0.0.1")}function Xee(){vp=void 0}function xB(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function Up(e){let t=Es.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function Mp(e){return M_(e)?.[ot()]}function ea(){let e=Es.default.get("replication_url");return e||Hp(ot())}function Hp(e){let t=Up("replication_port");if(t)return`ws://${e}:${t}`;if(t=Up("replication_secureport"),t)return`wss://${e}:${t}`;if(t=Up("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=Up("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function js(e){if(e)return new URL(e).hostname}function Zo(e,t){for(let n of Object.getOwnPropertyNames(We))r(n);return z_(n=>{r(n)}),Nc((n,s)=>{r(n.databaseName)});function r(n){let s=We[n];Sr.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):Zee(n)&&t(s,n,!1)}a(r,"forDatabase")}function Zee(e){let t=We[e];for(let r in t)if(t[r].replicate)return!0}function U_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function ete(e){let t={message:""};if(e.replicated){e.replicated=!1,Sr.trace?.("Replicating operation",e.operation,"to nodes",it.nodes.map(n=>n.name));let r=await Promise.allSettled(it.nodes.map(n=>J_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=it.nodes[s]?.name,i})}return t}var Es,Sr,kB,FB,Ic,Bp,GB,qB,$B,Kee,Yee,bc,ca,Q_,HB,Dy,vp,ls=Ie(()=>{De();Vs();Cl();BB();qr();Es=L(se()),Sr=L(j()),kB=require("crypto"),FB=require("fs");H_();su();Ic=L(M());YR();Bp=L(require("node:tls")),GB=L(_e()),qB=require("worker_threads"),Kee=1,Yee=[],bc=Es.default.get(Ic.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1?new Set(Bp.rootCertificates):new Set;a(Wee,"start");a(VB,"monitorNodeCAs");a(jee,"disableReplication");a(zee,"assignReplicationSource");a(YB,"setReplicator");Q_=new Map;a(WB,"getConnection");HB=new Map;a(Qee,"getConnectionByName");a(J_,"sendOperationToNode");a(ou,"subscribeToNode");a(Tp,"unsubscribeFromNode");a(Jee,"getCommonNameFromCert");a(ot,"getThisNodeName");a(Xee,"clearThisNodeName");Object.defineProperty(it,"hostname",{get(){return ot()}});a(xB,"getHostFromListeningPort");a(Up,"getPortFromListeningPort");a(Mp,"getThisNodeId");it.replication={getThisNodeId:Mp,exportIdMapping:M_};a(ea,"getThisNodeUrl");a(Hp,"hostnameToUrl");a(js,"urlToNodeName");a(Zo,"forEachReplicatedDatabase");a(Zee,"hasExplicitlyReplicatedTable");a(U_,"lastTimeInAuditStore");a(ete,"replicateOperation")});var Gp=N((kNe,XB)=>{"use strict";var fu=Oh(),Eu=Xv(),tte=j(),rte=require("uuid").v4,xNe=require("clone"),kp=eo(),hu=M(),nte=require("util"),la=Un(),{handleHDBError:mn,hdb_errors:ste}=_e(),{HDB_ERROR_MSGS:xp,HTTP_STATUS_CODES:Sn}=ste,{SchemaEventMsg:Fp}=qs(),jB=Tr(),{getDatabases:ite}=(De(),oe(lt)),{transformReq:pu}=re(),{replicateOperation:zB}=(ls(),oe(oa));XB.exports={createSchema:ote,createSchemaStructure:QB,createTable:ate,createTableStructure:JB,createAttribute:_te,dropSchema:cte,dropTable:lte,dropAttribute:ute,getBackup:fte};async function ote(e){let t=await QB(e);return kp.signalSchemaChange(new Fp(process.pid,e.operation,e.schema)),t}a(ote,"createSchema");async function QB(e){let t=fu.schema_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(pu(e),!await Eu.checkSchemaExists(e.schema))throw mn(new Error,xp.SCHEMA_EXISTS_ERR(e.schema),Sn.BAD_REQUEST,hu.LOG_LEVELS.ERROR,xp.SCHEMA_EXISTS_ERR(e.schema),!0);return await la.createSchema(e),`database '${e.schema}' successfully created`}a(QB,"createSchemaStructure");async function ate(e){return pu(e),e.hash_attribute=e.primary_key??e.hash_attribute,await JB(e)}a(ate,"createTable");async function JB(e){let t=fu.create_table_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(fu.validateTableResidence(e.residence),!await Eu.checkSchemaTableExists(e.schema,e.table))throw mn(new Error,xp.TABLE_EXISTS_ERR(e.schema,e.table),Sn.BAD_REQUEST,hu.LOG_LEVELS.ERROR,xp.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:rte(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await la.createTable(n,e);else throw mn(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sn.BAD_REQUEST);else await la.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(JB,"createTableStructure");async function cte(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=fu.schema_object(e),n=t??r;if(n)throw mn(n,n.message,Sn.BAD_REQUEST,void 0,void 0,!0);pu(e);let s=await Eu.checkSchemaExists(e.schema);if(s)throw mn(new Error,s,Sn.NOT_FOUND,hu.LOG_LEVELS.ERROR,s,!0);let i=await Eu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await la.dropSchema(e),kp.signalSchemaChange(new Fp(process.pid,e.operation,e.schema)),await jB.purgeSchemaTableStreams(e.schema,o);let c=await zB(e);return c.message=`successfully deleted '${e.schema}'`,c}a(cte,"dropSchema");async function lte(e){let t=fu.table_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);pu(e);let r=await Eu.checkSchemaTableExists(e.schema,e.table);if(r)throw mn(new Error,r,Sn.NOT_FOUND,hu.LOG_LEVELS.ERROR,r,!0);await la.dropTable(e),await jB.purgeTableStream(e.schema,e.table);let n=await zB(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(lte,"dropTable");async function ute(e){let t=fu.attribute_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);pu(e);let r=await Eu.checkSchemaTableExists(e.schema,e.table);if(r)throw mn(new Error,r,Sn.NOT_FOUND,hu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw mn(new Error,"You cannot drop a hash attribute",Sn.BAD_REQUEST,void 0,void 0,!0);if(hu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw mn(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sn.BAD_REQUEST,void 0,void 0,!0);try{return await la.dropAttribute(e),dte(e),kp.signalSchemaChange(new Fp(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw tte.error(`Got an error deleting attribute ${nte.inspect(e)}.`),n}}a(ute,"dropAttribute");function dte(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(dte,"dropAttributeFromGlobal");async function _te(e){pu(e);let t=ite()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw mn(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sn.BAD_REQUEST,void 0,void 0,!0);return await la.createAttribute(e),kp.signalSchemaChange(new Fp(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(_te,"createAttribute");function fte(e){return la.getBackup(e)}a(fte,"getBackup")});var eH=N((GNe,ZB)=>{"use strict";var{OPERATIONS_ENUM:Ete}=M(),Py=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ete.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};ZB.exports=Py});var Ly=N((VNe,iH)=>{"use strict";var hte=Un(),$Ne=eH(),qp=re(),$p=M(),pte=se(),{handleHDBError:tH,hdb_errors:mte}=_e(),{HDB_ERROR_MSGS:rH,HTTP_STATUS_CODES:nH}=mte,Ste=Object.values($p.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),sH="To use this operation audit log must be enabled in harperdb-config.yaml";iH.exports=Tte;async function Tte(e){if(qp.isEmpty(e.schema))throw new Error(rH.SCHEMA_REQUIRED_ERR);if(qp.isEmpty(e.table))throw new Error(rH.TABLE_REQUIRED_ERR);if(!pte.get($p.CONFIG_PARAMS.LOGGING_AUDITLOG))throw tH(new Error,sH,nH.BAD_REQUEST,$p.LOG_LEVELS.ERROR,sH,!0);let t=qp.checkSchemaTableExist(e.schema,e.table);if(t)throw tH(new Error,t,nH.NOT_FOUND,$p.LOG_LEVELS.ERROR,t,!0);if(!qp.isEmpty(e.search_type)&&Ste.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await hte.readAuditLog(e)}a(Tte,"readAuditLog")});var aH=N((YNe,oH)=>{"use strict";var{OPERATIONS_ENUM:gte}=M(),My=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=gte.GET_BACKUP,this.schema=t,this.table=r}};oH.exports=My});var uH=N((QNe,lH)=>{"use strict";var Ate=Un(),jNe=aH(),Uy=re(),Rte=M(),zNe=se(),{handleHDBError:yte,hdb_errors:bte}=_e(),{HDB_ERROR_MSGS:cH,HTTP_STATUS_CODES:Ote}=bte;lH.exports=Nte;async function Nte(e){if(Uy.isEmpty(e.schema))throw new Error(cH.SCHEMA_REQUIRED_ERR);if(Uy.isEmpty(e.table))throw new Error(cH.TABLE_REQUIRED_ERR);let t=Uy.checkSchemaTableExist(e.schema,e.table);if(t)throw yte(new Error,t,Ote.NOT_FOUND,Rte.LOG_LEVELS.ERROR,t,!0);return await Ate.getBackup(read_audit_log_object)}a(Nte,"getBackup")});var pH=N((XNe,hH)=>{var mu=require("validate.js"),_H=gt(),Su=M(),{handleHDBError:Ite,hdb_errors:wte}=_e(),{HDB_ERROR_MSGS:Qt,HTTP_STATUS_CODES:Cte}=wte,vy=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Dte={STRUCTURE_USER:"structure_user"},dH=Object.values(Su.ROLE_TYPES_ENUM),Pte="attribute_permissions",Lte="attribute_name",{PERMS_CRUD_ENUM:Tu}=Su,Mte=[Pte,...Object.values(Tu)],fH=[Tu.READ,Tu.INSERT,Tu.UPDATE],Ute=[Lte,...fH];function vte(e){let t=vy();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,EH(e,t)}a(vte,"addRoleValidation");function Bte(e){let t=vy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,EH(e,t)}a(Bte,"alterRoleValidation");function Hte(e){let t=vy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,_H.validateObject(e,t)}a(Hte,"dropRoleValidation");var xte=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function EH(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)xte.includes(n[o])||s.push(n[o]);s.length>0&&ir(Qt.INVALID_ROLE_JSON_KEYS(s),r);let i=_H.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ir(o,r)}),e.permission){let o=kte(e);o&&ir(o,r),dH.forEach(c=>{e.permission[c]&&!mu.isBoolean(e.permission[c])&&ir(Qt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(dH.indexOf(o)<0){if(o===Dte.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 _=l[u];global.hdb_schema[_]||ir(Qt.SCHEMA_NOT_FOUND(_),r)}continue}ir(Qt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ir(Qt.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]){ir(Qt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Mte.includes(d)||ir(Qt.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Tu).forEach(d=>{mu.isDefined(u[d])?mu.isBoolean(u[d])||ir(Qt.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):ir(Qt.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){ir(Qt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){ir(Qt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),_={read:!1,insert:!1,update:!1};for(let E in u.attribute_permissions){let f=u.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!Ute.includes(T)&&T!==Tu.DELETE&&ir(Qt.INVALID_ATTR_PERM_KEY(T),r,o,l)}),!mu.isDefined(f.attribute_name)){ir(Qt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!d.includes(h)){ir(Qt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}fH.forEach(T=>{mu.isDefined(f[T])?mu.isBoolean(f[T])||ir(Qt.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,l):ir(Qt.ATTR_PERM_MISSING(T,h),r,o,l)}),!_.read&&f.read===!0&&(_.read=!0),!_.insert&&f.insert===!0&&(_.insert=!0),!_.update&&f.update===!0&&(_.update=!0)}if(u.read===!1&&_.read===!0||u.insert===!1&&_.insert===!0||u.update===!1&&_.update===!0){let E=`${o}.${l}`;ir(Qt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return Fte(r)}a(EH,"customValidate");hH.exports={addRoleValidation:vte,alterRoleValidation:Bte,dropRoleValidation:Hte};function kte(e){let{operation:t,permission:r}=e;if(t===Su.OPERATIONS_ENUM.ADD_ROLE||t===Su.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 Qt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Su.ROLE_TYPES_ENUM.SUPER_USER:Su.ROLE_TYPES_ENUM.CLUSTER_USER;return Qt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(kte,"validateNoSUPerms");function Fte(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Qt.ROLE_PERMS_ERROR,...e};return Ite(new Error,n,Cte.BAD_REQUEST)}else return null}a(Fte,"generateRolePermResponse");function ir(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(ir,"addPermError")});var Z_=N((tIe,gH)=>{"use strict";var mH=cn(),SH=$r(),Gte=oc(),Hy=pH(),xy=eo(),eIe=require("uuid").v4,qte=require("util"),Vp=M(),$te=re(),ky=SH.searchByValue,Vte=SH.searchByHash,Kte=qte.promisify(Gte.delete),Yte=$s(),Wte=Wl(),{hdb_errors:jte,handleHDBError:wc}=_e(),{HDB_ERROR_MSGS:TH,HTTP_STATUS_CODES:X_}=jte,{UserEventMsg:Fy}=qs();gH.exports={addRole:zte,alterRole:Qte,dropRole:Jte,listRoles:Xte};function By(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(By,"scrubRoleDetails");async function zte(e){let t=Hy.addRoleValidation(e);if(t)throw t;e=By(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await ky(r)||[])}catch(i){throw wc(i)}if(n&&n.length>0)throw wc(new Error,TH.ROLE_ALREADY_EXISTS(e.role),X_.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 mH.insert(s),xy.signalUserChange(new Fy(process.pid)),e=By(e),e}a(zte,"addRole");async function Qte(e){let t=Hy.alterRoleValidation(e);if(t)throw t;e=By(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await mH.update(r)}catch(s){throw wc(s)}if(n&&n?.message==="updated 0 of 1 records")throw wc(new Error,"Invalid role id",X_.BAD_REQUEST,void 0,void 0,!0);return await xy.signalUserChange(new Fy(process.pid)),e}a(Qte,"alterRole");async function Jte(e){let t=Hy.dropRoleValidation(e);if(t)throw wc(new Error,t,X_.BAD_REQUEST,void 0,void 0,!0);let r=new Wte(Vp.SYSTEM_SCHEMA_NAME,Vp.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Vte(r));if(n.length===0)throw wc(new Error,TH.ROLE_NOT_FOUND,X_.NOT_FOUND,void 0,void 0,!0);let s=new Yte(Vp.SYSTEM_SCHEMA_NAME,Vp.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await ky(s)),o=!1;if($te.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw wc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,X_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Kte(c),xy.signalUserChange(new Fy(process.pid)),`${n[0].role} successfully deleted`}a(Jte,"dropRole");async function Xte(){return ky({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Xte,"listRoles")});var bH=N((nIe,yH)=>{"use strict";var Zte=se(),ua=require("joi"),ere=gt(),AH=require("moment"),tre=require("fs-extra"),Gy=require("path"),rre=require("lodash"),ef=M(),{LOG_LEVELS:Cc}=M(),nre="YYYY-MM-DD hh:mm:ss",sre=Gy.resolve(__dirname,"../logs");yH.exports=function(e){return ere.validateBySchema(e,ire)};var ire=ua.object({from:ua.custom(RH),until:ua.custom(RH),level:ua.valid(Cc.NOTIFY,Cc.FATAL,Cc.ERROR,Cc.WARN,Cc.INFO,Cc.DEBUG,Cc.TRACE),order:ua.valid("asc","desc"),limit:ua.number().min(1),start:ua.number().min(0),log_name:ua.custom(ore)});function RH(e,t){if(AH(e,AH.ISO_8601).format(nre)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(RH,"validateDatetime");function ore(e,t){if(rre.invert(ef.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Zte.get(ef.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?ef.LOG_NAMES.HDB:e,i=s===ef.LOG_NAMES.INSTALL?Gy.join(sre,ef.LOG_NAMES.INSTALL):Gy.join(n,s);return tre.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(ore,"validateReadLogPath")});var $y=N((iIe,NH)=>{"use strict";var Kp=M(),are=j(),cre=se(),lre=bH(),qy=require("path"),OH=require("fs-extra"),{once:ure}=require("events"),{handleHDBError:dre,hdb_errors:_re}=_e(),{PACKAGE_ROOT:fre}=M(),Ere=qy.join(fre,"logs"),hre=1e3,pre=200;NH.exports=mre;async function mre(e){let t=lre(e);if(t)throw dre(t,t.message,_re.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=cre.get(Kp.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Kp.LOG_NAMES.HDB:e.log_name,s=n===Kp.LOG_NAMES.INSTALL?qy.join(Ere,Kp.LOG_NAMES.INSTALL):qy.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,d=u?new Date(e.until):void 0,_=e.limit===void 0?hre:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+_,T=0;E==="desc"&&!l&&!d&&(T=Math.max(OH.statSync(s).size-(h+5)*pre,0));let m=OH.createReadStream(s,{start:T});m.on("error",H=>{are.error(H)});let g=0,S=[],y="",I;m.on("data",H=>{let X=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=y+H;let Y=0,V;for(;(V=X.exec(H))&&!m.destroyed;){I&&(I.message=H.slice(Y,V.index),U(I));let[ne,Q,de]=V,W=de.split("] ["),ae=W[0],Oe=W[1];W.splice(0,2),I={timestamp:Q,thread:ae,level:Oe,tags:W,message:""},Y=V.index+ne.length}y=H.slice(Y)}),m.on("end",H=>{m.destroyed||I&&(I.message=y.trim(),U(I))}),m.resume();function U(H){let X,Y,V;switch(!0){case(i&&c&&u):X=new Date(H.timestamp),Y=new Date(l),V=new Date(d),H.level===o&&X>=Y&&X<=V&&g<f?g++:H.level===o&&X>=Y&&X<=V&&(da(H,E,S),g++,g===h&&m.destroy());break;case(i&&c):X=new Date(H.timestamp),Y=new Date(l),H.level===o&&X>=Y&&g<f?g++:H.level===o&&X>=Y&&(da(H,E,S),g++,g===h&&m.destroy());break;case(i&&u):X=new Date(H.timestamp),V=new Date(d),H.level===o&&X<=V&&g<f?g++:H.level===o&&X<=V&&(da(H,E,S),g++,g===h&&m.destroy());break;case(c&&u):X=new Date(H.timestamp),Y=new Date(l),V=new Date(d),X>=Y&&X<=V&&g<f?g++:X>=Y&&X<=V&&(da(H,E,S),g++,g===h&&m.destroy());break;case i:H.level===o&&g<f?g++:H.level===o&&(da(H,E,S),g++,g===h&&m.destroy());break;case c:X=new Date(H.timestamp),Y=new Date(l),X>=Y&&g<f?g++:X>=Y&&g>=f&&(da(H,E,S),g++,g===h&&m.destroy());break;case u:X=new Date(H.timestamp),V=new Date(d),X<=V&&g<f?g++:X<=V&&g>=f&&(da(H,E,S),g++,g===h&&m.destroy());break;default:g<f?g++:(da(H,E,S),g++,g===h&&m.destroy())}}return a(U,"onLogMessage"),await ure(m,"close"),S}a(mre,"readLog");function da(e,t,r){t==="desc"?Sre(e,r):t==="asc"?Tre(e,r):r.push(e)}a(da,"pushLineToResult");function Sre(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(Sre,"insertDescending");function Tre(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(Tre,"insertAscending")});var Yp=N((dIe,DH)=>{"use strict";var Vy=require("joi"),{string:gu,boolean:IH,date:gre}=Vy.types(),Are=gt(),{validateSchemaExists:aIe,validateTableExists:cIe,validateSchemaName:lIe}=mi(),Rre=M(),yre=It(),wH=se();wH.initSync();var uIe=gu.invalid(wH.get(Rre.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(yre.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),CH={operation:gu.valid("add_node","update_node","set_node_replication"),node_name:gu.optional(),subscriptions:Vy.array().items({table:gu.optional(),schema:gu.optional(),database:gu.optional(),subscribe:IH.required(),publish:IH.required().custom(Ore),start_time:gre.iso()})};function bre(e){return Are.validateBySchema(e,Vy.object(CH))}a(bre,"addUpdateNodeValidator");function Ore(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(Ore,"checkForFalsy");DH.exports={addUpdateNodeValidator:bre,validation_schema:CH}});var LH=N((fIe,PH)=>{var Nre=gt(),Ire={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};PH.exports=function(e){return Nre.validateObject(e,Ire)}});var Ky=N((hIe,vH)=>{"use strict";var wre=LH(),Au=require("passport"),Cre=require("passport-local").Strategy,Dre=require("passport-http").BasicStrategy,Pre=require("util"),Lre=xn(),UH=Pre.callbackify(Lre.findAndValidateUser),EIe=Dn(),Mre=M(),MH=cu();Au.use(new Cre(function(e,t,r){UH(e,t,r)}));Au.use(new Dre(function(e,t,r){UH(e,t,r)}));Au.serializeUser(function(e,t){t(null,e)});Au.deserializeUser(function(e,t){t(null,e)});function Ure(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":Au.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Mre.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?MH.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):MH.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Au.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Ure,"authorize");function vre(e,t){let r=wre(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(vre,"checkPermissions");vH.exports={authorize:Ure,checkPermissions:vre}});var Ru=N((mIe,BH)=>{"use strict";var Yy=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},Wy=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};BH.exports={Node:Yy,NodeSubscription:Wy}});var xH=N((TIe,HH)=>{"use strict";var Bre=M().OPERATIONS_ENUM,jy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Bre.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};HH.exports=jy});var tf=N((AIe,kH)=>{"use strict";var zy=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},Qy=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)}};kH.exports={RemotePayloadObject:zy,RemotePayloadSubscription:Qy}});var GH=N((yIe,FH)=>{"use strict";var Jy=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}};FH.exports=Jy});var $H=N((CIe,qH)=>{"use strict";var Hre=GH(),OIe=Ht(),NIe=ht(),xre=j(),{getSchemaPath:IIe,getTransactionAuditStorePath:wIe}=Tt(),{getDatabases:kre}=(De(),oe(lt));qH.exports=Fre;async function Fre(e){let t=new Hre;try{let r=kre()[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){xre.warn(`unable to stat table dbi due to ${r}`)}return t}a(Fre,"lmdbGetTableSize")});var KH=N((PIe,VH)=>{"use strict";var Xy=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}};VH.exports=Xy});var bu=N((HIe,zH)=>{"use strict";var Gre=require("fs-extra"),qre=require("path"),jr=require("systeminformation"),_a=j(),YH=Tr(),MIe=It(),yu=M(),$re=$H(),Vre=Zi(),{getThreadInfo:WH}=dt(),rf=se();rf.initSync();var Kre=KH(),{openEnvironment:UIe}=ht(),{getSchemaPath:vIe}=Tt(),{database:BIe,databases:Zy}=(De(),oe(lt)),Wp;zH.exports={getHDBProcessInfo:nb,getNetworkInfo:ib,getDiskInfo:sb,getMemoryInfo:rb,getCPUInfo:tb,getTimeInfo:eb,getSystemInformation:ob,systemInformation:Yre,getTableSize:ab,getMetrics:cb};function eb(){return jr.time()}a(eb,"getTimeInfo");async function tb(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await jr.cpu();d.cpu_speed=await jr.cpuCurrentSpeed();let{raw_currentload:_,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:m,cpus:g,...S}=await jr.currentLoad();return S.cpus=[],g.forEach(y=>{let{raw_load:I,raw_load_idle:U,raw_load_irq:H,raw_load_nice:X,raw_load_system:Y,raw_load_user:V,...ne}=y;S.cpus.push(ne)}),d.current_load=S,d}catch(e){return _a.error(`error in getCPUInfo: ${e}`),{}}}a(tb,"getCPUInfo");async function rb(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return _a.error(`error in getMemoryInfo: ${e}`),{}}}a(rb,"getMemoryInfo");async function nb(){let e={core:[],clustering:[]};try{let t=await jr.processes(),r;try{r=Number.parseInt(await Gre.readFile(qre.join(rf.get(yu.CONFIG_PARAMS.ROOTPATH),yu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===yu.NODE_ERROR_CODES.ENOENT)_a.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 _a.error(`error in getHDBProcessInfo: ${t}`),e}}a(nb,"getHDBProcessInfo");async function sb(){let e={};try{if(!rf.get(yu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await jr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await jr.fsStats();return e.read_write=u,e.size=await jr.fsSize(),e}catch(t){return _a.error(`error in getDiskInfo: ${t}`),e}}a(sb,"getDiskInfo");async function ib(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return rf.get(yu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await jr.networkInterfaceDefault(),e.latency=await jr.inetChecksite("google.com"),(await jr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrier_changes:_,...E}=n;e.interfaces.push(E)}),(await jr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return _a.error(`error in getNetworkInfo: ${t}`),e}}a(ib,"getNetworkInfo");async function ob(){if(Wp!==void 0)return Wp;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await jr.osInfo();e=c;let l=await jr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,Wp=e,Wp}catch(t){return _a.error(`error in getSystemInformation: ${t}`),e}}a(ob,"getSystemInformation");async function ab(){let e=[],t=await Vre.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await $re(n));return e}a(ab,"getTableSize");async function cb(){let e={};for(let t in Zy){let r=e[t]={},n=r.tables={};for(let s in Zy[t])try{let i=Zy[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,_]=l.trim().split(" ");return{pid:u,thread:d,txnid:_}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:_,overflowPages:E}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:_,overflowPages:E}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){_a.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(cb,"getMetrics");async function jH(){if(rf.get(yu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await YH.getNATSReferences(),t=await YH.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(jH,"getNatsStreamInfo");async function Yre(e){let t=new Kre;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await ob(),t.time=eb(),t.cpu=await tb(),t.memory=await rb(),t.disk=await sb(),t.network=await ib(),t.harperdb_processes=await nb(),t.table_size=await ab(),t.metrics=await cb(),t.threads=await WH(),t.replication=await jH(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await ob();break;case"time":t.time=eb();break;case"cpu":t.cpu=await tb();break;case"memory":t.memory=await rb();break;case"disk":t.disk=await sb();break;case"network":t.network=await ib();break;case"harperdb_processes":t.harperdb_processes=await nb();break;case"table_size":t.table_size=await ab();break;case"database_metrics":case"metrics":t.metrics=await cb();break;case"threads":t.threads=await WH();break;case"replication":t.replication=await jH();break;default:break}return t}a(Yre,"systemInformation")});var Ou=N((kIe,Wre)=>{Wre.exports={name:"harperdb",version:"4.4.21",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var Dc=N((FIe,QH)=>{"use strict";QH.exports={version:jre,printVersion:zre};var jp=Ou();function jre(){if(jp)return jp.version}a(jre,"version");function zre(){jp&&console.log(`HarperDB Version ${jp.version}`)}a(zre,"printVersion")});var ao=N((VIe,ex)=>{"use strict";var Qre=cn(),lb=re(),Jre=require("util"),Pc=M(),JH=se();JH.initSync();var Xre=Ky(),XH=$r(),{Node:qIe,NodeSubscription:$Ie}=Ru(),Zre=Wl(),ene=xH(),{RemotePayloadObject:tne,RemotePayloadSubscription:rne}=tf(),{handleHDBError:nne,hdb_errors:sne}=_e(),{HTTP_STATUS_CODES:ine,HDB_ERROR_MSGS:one}=sne,ane=$s(),cne=bu(),lne=Dc(),{getDatabases:une}=(De(),oe(lt)),dne=Jre.promisify(Xre.authorize),_ne=XH.searchByHash,fne=XH.searchByValue;ex.exports={authHeaderToUser:Ene,isEmpty:hne,getNodeRecord:pne,upsertNodeRecord:mne,buildNodePayloads:Sne,checkClusteringEnabled:Tne,getAllNodeRecords:gne,getSystemInfo:Ane,reverseSubscription:ZH};async function Ene(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await dne(t,null),e}a(Ene,"authHeaderToUser");function hne(e){return e==null}a(hne,"isEmpty");async function pne(e){let t=new Zre(Pc.SYSTEM_SCHEMA_NAME,Pc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return _ne(t)}a(pne,"getNodeRecord");async function mne(e){let t=new ene(Pc.SYSTEM_SCHEMA_NAME,Pc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Qre.upsert(t)}a(mne,"upsertNodeRecord");function ZH(e){if(lb.isEmpty(e.subscribe)||lb.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(ZH,"reverseSubscription");function Sne(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=lb.getTableHashAttribute(l,u),{subscribe:_,publish:E}=ZH(c),f=une()[l]?.[u],h=new rne(l,u,d,E,_,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new tne(r,t,s,n)}a(Sne,"buildNodePayloads");function Tne(){if(!JH.get(Pc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw nne(new Error,one.CLUSTERING_NOT_ENABLED,ine.BAD_REQUEST,void 0,void 0,!0)}a(Tne,"checkClusteringEnabled");async function gne(){let e=new ane(Pc.SYSTEM_SCHEMA_NAME,Pc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await fne(e))}a(gne,"getAllNodeRecords");async function Ane(){let e=await cne.getSystemInformation();return{hdb_version:lne.version(),node_version:e.node_version,platform:e.platform}}a(Ane,"getSystemInfo")});var ub=N((YIe,cx)=>{"use strict";var zp=Tr(),tx=re(),rx=It(),nx=M(),Qp=j(),sx=Gp(),Rne=O_(),{RemotePayloadObject:yne}=tf(),{handleHDBError:ix,hdb_errors:bne}=_e(),{HTTP_STATUS_CODES:ox}=bne,{NodeSubscription:ax}=Ru();cx.exports=One;async function One(e,t){let r;try{r=await zp.request(`${t}.${rx.REQUEST_SUFFIX}`,new yne(nx.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Qp.trace("Response from remote describe all request:",r)}catch(o){Qp.error(`addNode received error from describe all request to remote node: ${o}`);let c=zp.requestErrorHandler(o,"add_node",t);throw ix(new Error,c,ox.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===rx.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw ix(new Error,o,ox.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===nx.SYSTEM_SCHEMA_NAME){await zp.createLocalTableStream(l,c);let h=new ax(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=tx.doesSchemaExist(l),d=n[l]!==void 0,_=c?tx.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!_&&!E){s.push(o);continue}if(!u&&d&&(Qp.trace(`addNode creating schema: ${l}`),await sx.createSchema({operation:"create_schema",schema:l})),!_&&E){Qp.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Rne(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await sx.createTable(h)}await zp.createLocalTableStream(l,c);let f=new ax(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(One,"reviewSubscriptions")});var Lc={};je(Lc,{addNodeBack:()=>Dne,removeNodeBack:()=>Pne,setNode:()=>Cne});async function Cne(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=js(t)):t=Hp(r);let n=(0,ux.validateBySchema)(e,wne);if(n)throw(0,co.handleHDBError)(n,n.message,Ine.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new co.ClientError("url or hostname is required for remove_node operation");let f=r,h=pr(),T=await h.get(f);if(!T)throw new co.ClientError(f+" does not exist");try{await J_({url:T.url},{operation:nf.OPERATIONS_ENUM.REMOVE_NODE_BACK,name:T?.subscriptions?.length>0?ot():f},void 0)}catch(m){$n.warn(`Error removing node from target node ${f}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,m)}return await h.delete(f),`Successfully removed '${f}' from cluster`}if(!t)throw new co.ClientError("url required for this operation");let s=ea();if(s==null)throw new co.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,hs.getReplicationCert)();let f=await(0,hs.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,hs.createCsr)(),$n.info("Sending CSR to target node:",t)):f&&(c=f.certificate,$n.info("Sending CA named",f.name,"to target node",t))}let l={operation:nf.OPERATIONS_ENUM.ADD_NODE_BACK,hostname:(0,dx.get)(nf.CONFIG_PARAMS.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if(e.subscriptions?l.subscriptions=e.subscriptions.map(lx):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let f=lx(e);l.subscribe=f.subscribe,l.publish=f.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 J_({url:t},l,e)}catch(f){f.message=`Error returned from ${t}: `+f.message,$n.warn("Error adding node:",t,"to cluster:",f),d=f}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&&($n.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,hs.setCertTable)({name:Nne.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,hs.setCertTable)({name:ot(),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 _={url:t,ca:u?.usingCA};if(e.hostname&&(_.name=e.hostname),e.subscriptions?_.subscriptions=e.subscriptions:_.replicates=!0,e.start_time&&(_.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(_.authorization=e.authorization),_.replicates){let f={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(f.authorization=e.authorization),e.start_time&&(f.start_time=e.start_time),await io(ot(),f)}await io(u?u.nodeName:_.name??js(t),_);let E;return e.operation==="update_node"?E=`Successfully updated '${t}'`:E=`Successfully added '${t}' to cluster`,d&&(E+=" but there was an error updating target node: "+d.message),E}async function Dne(e){$n.trace("addNodeBack received request:",e);let t=await(0,hs.signCertificate)(e),r;e.csr?(r=t.signingCA,$n.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,$n.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);let s=await(0,hs.getReplicationCertAuth)();if(n.replicates){let i={url:ea(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await io(ot(),i)}return await io(e.hostname,n),t.nodeName=ot(),t.usingCA=s?.certificate,$n.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function Pne(e){$n.trace("removeNodeBack received request:",e),await pr().delete(e.name)}function lx(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var hs,ux,Nu,dx,nf,$n,co,Nne,Ine,wne,Mc=Ie(()=>{hs=L(Js()),ux=L(gt()),Nu=L(require("joi")),dx=L(se()),nf=L(M());H_();su();ls();$n=L(j()),co=L(_e()),{pki:Nne}=require("node-forge"),{HTTP_STATUS_CODES:Ine}=co.hdb_errors,wne=Nu.default.object({hostname:Nu.default.string(),verify_tls:Nu.default.boolean(),replicates:Nu.default.boolean(),subscriptions:Nu.default.array()});a(Cne,"setNode");a(Dne,"addNodeBack");a(Pne,"removeNodeBack");a(lx,"reverseSubscription")});var tm=N((ewe,fx)=>{"use strict";var{handleHDBError:Jp,hdb_errors:Lne}=_e(),{HTTP_STATUS_CODES:Xp}=Lne,{addUpdateNodeValidator:Mne}=Yp(),Zp=j(),em=M(),_x=It(),Une=re(),sf=Tr(),of=ao(),db=se(),vne=ub(),{Node:Bne,NodeSubscription:Hne}=Ru(),{broadcast:xne}=dt(),{setNode:kne}=(Mc(),oe(Lc)),XIe=se(),ZIe=M(),Fne="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Gne="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",qne=db.get(em.CONFIG_PARAMS.CLUSTERING_NODENAME);fx.exports=$ne;async function $ne(e,t=!1){if(Zp.trace("addNode called with:",e),db.get(em.CONFIG_PARAMS.REPLICATION_URL)||db.get(em.CONFIG_PARAMS.REPLICATION_HOSTNAME))return kne(e);of.checkClusteringEnabled();let r=Mne(e);if(r)throw Jp(r,r.message,Xp.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let _=await of.getNodeRecord(n);if(!Une.isEmptyOrZeroLength(_))throw Jp(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Xp.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await vne(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Fne,o;let c=of.buildNodePayloads(s,qne,em.OPERATIONS_ENUM.ADD_NODE,await of.getSystemInfo()),l=[];for(let _=0,E=s.length;_<E;_++){let f=s[_];s[_].start_time===void 0&&delete s[_].start_time,l.push(new Hne(f.schema,f.table,f.publish,f.subscribe))}Zp.trace("addNode sending remote payload:",c);let u;try{u=await sf.request(`${n}.${_x.REQUEST_SUFFIX}`,c)}catch(_){Zp.error(`addNode received error from request: ${_}`);for(let f=0,h=s.length;f<h;f++){let T=s[f];T.publish=!1,T.subscribe=!1,await sf.updateRemoteConsumer(T,n)}let E=sf.requestErrorHandler(_,"add_node",n);throw Jp(new Error,E,Xp.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===_x.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${n}: ${u.message}`;throw Jp(new Error,_,Xp.INTERNAL_SERVER_ERROR,"error",_)}Zp.trace(u);for(let _=0,E=s.length;_<E;_++){let f=s[_];await sf.updateRemoteConsumer(f,n),f.subscribe===!0&&await sf.updateConsumerIterator(f.schema,f.table,n,"start")}let d=new Bne(n,l,u.system_info);return await of.upsertNodeRecord(d),xne({type:"nats_update"}),i.length>0?o.message=Gne:o.message=`Successfully added '${n}' to manifest`,o}a($ne,"addNode")});var hb=N((nwe,hx)=>{"use strict";var{handleHDBError:_b,hdb_errors:Vne}=_e(),{HTTP_STATUS_CODES:fb}=Vne,{addUpdateNodeValidator:Kne}=Yp(),af=j(),rm=M(),Ex=It(),rwe=re(),cf=Tr(),lf=ao(),Eb=se(),{cloneDeep:Yne}=require("lodash"),Wne=ub(),{Node:jne,NodeSubscription:zne}=Ru(),{broadcast:Qne}=dt(),{setNode:Jne}=(Mc(),oe(Lc)),Xne="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Zne="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ese=Eb.get(rm.CONFIG_PARAMS.CLUSTERING_NODENAME);hx.exports=tse;async function tse(e){if(af.trace("updateNode called with:",e),Eb.get(rm.CONFIG_PARAMS.REPLICATION_URL)??Eb.get(rm.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Jne(e);lf.checkClusteringEnabled();let t=Kne(e);if(t)throw _b(t,t.message,fb.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await lf.getNodeRecord(r);s.length>0&&(n=Yne(s));let{added:i,skipped:o}=await Wne(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Xne,c;let l=lf.buildNodePayloads(i,ese,rm.OPERATIONS_ENUM.UPDATE_NODE,await lf.getSystemInfo());for(let d=0,_=i.length;d<_;d++){let E=i[d];af.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[d].start_time===void 0&&delete i[d].start_time}af.trace("updateNode sending remote payload:",l);let u;try{u=await cf.request(`${r}.${Ex.REQUEST_SUFFIX}`,l)}catch(d){af.error(`updateNode received error from request: ${d}`);let _=cf.requestErrorHandler(d,"update_node",r);throw _b(new Error,_,fb.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===Ex.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw _b(new Error,d,fb.INTERNAL_SERVER_ERROR,"error",d)}af.trace(u);for(let d=0,_=i.length;d<_;d++){let E=i[d];await cf.updateRemoteConsumer(E,r),E.subscribe===!0?await cf.updateConsumerIterator(E.schema,E.table,r,"start"):await cf.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new jne(r,[],u.system_info)]),await rse(n[0],i,u.system_info),o.length>0?c.message=Zne:c.message=`Successfully updated '${r}'`,c}a(tse,"updateNode");async function rse(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 zne(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await lf.upsertNodeRecord(n),Qne({type:"nats_update"})}a(rse,"updateNodeTable")});var gx=N((iwe,Tx)=>{"use strict";var Sx=require("joi"),{string:px}=Sx.types(),nse=gt(),mx=M(),sse=se(),ise=It();Tx.exports=ose;function ose(e){let t=px.invalid(sse.get(mx.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ise.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=Sx.object({operation:px.valid(mx.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return nse.validateBySchema(e,r)}a(ose,"removeNodeValidator")});var nm=N((awe,Ox)=>{"use strict";var{handleHDBError:Ax,hdb_errors:ase}=_e(),{HTTP_STATUS_CODES:Rx}=ase,cse=gx(),uf=j(),yx=ao(),lse=re(),Iu=M(),bx=It(),pb=Tr(),mb=se(),{RemotePayloadObject:use}=tf(),{NodeSubscription:dse}=Ru(),_se=b_(),fse=oc(),{broadcast:Ese}=dt(),{setNode:hse}=(Mc(),oe(Lc)),pse=mb.get(Iu.CONFIG_PARAMS.CLUSTERING_NODENAME);Ox.exports=mse;async function mse(e){if(uf.trace("removeNode called with:",e),mb.get(Iu.CONFIG_PARAMS.REPLICATION_URL)??mb.get(Iu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return hse(e);yx.checkClusteringEnabled();let t=cse(e);if(t)throw Ax(t,t.message,Rx.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await yx.getNodeRecord(r);if(lse.isEmptyOrZeroLength(n))throw Ax(new Error,`Node '${r}' was not found.`,Rx.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new use(Iu.OPERATIONS_ENUM.REMOVE_NODE,pse,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await pb.updateConsumerIterator(d.schema,d.table,r,"stop");try{await pb.updateRemoteConsumer(new dse(d.schema,d.table,!1,!1),r)}catch(_){uf.error(_)}}try{i=await pb.request(`${r}.${bx.REQUEST_SUFFIX}`,s),uf.trace("Remove node reply from remote node:",r,i)}catch(l){uf.error("removeNode received error from request:",l),o=!0}let c=new _se(Iu.SYSTEM_SCHEMA_NAME,Iu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await fse.deleteRecord(c),Ese({type:"nats_update"}),i?.status===bx.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(uf.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(mse,"removeNode")});var wx=N((lwe,Ix)=>{"use strict";var Nx=require("joi"),{string:Sse,array:Tse}=Nx.types(),gse=gt(),Ase=Yp();Ix.exports=Rse;function Rse(e){let t=Nx.object({operation:Sse.valid("configure_cluster").required(),connections:Tse.items(Ase.validation_schema).required()});return gse.validateBySchema(e,t)}a(Rse,"configureClusterValidator")});var Sb=N((dwe,Mx)=>{"use strict";var Cx=M(),sm=j(),yse=re(),bse=se(),Ose=nm(),Nse=tm(),Ise=ao(),wse=wx(),{handleHDBError:Dx,hdb_errors:Cse}=_e(),{HTTP_STATUS_CODES:Px}=Cse,Dse="Configure cluster complete.",Pse="Failed to configure the cluster. Check the logs for more details.",Lse="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";Mx.exports=Mse;async function Mse(e){sm.trace("configure cluster called with:",e);let t=wse(e);if(t)throw Dx(t,t.message,Px.BAD_REQUEST,void 0,void 0,!0);let r=await Ise.getAllNodeRecords(),n=[];if(bse.get(Cx.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,_=r.length;d<_;d++){let E=await Lx(Ose,{operation:Cx.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(E)}sm.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let _=e.connections[d],E=await Lx(Nse,_,_.node_name);s.push(E)}sm.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,_=u.length;d<_;d++){let E=u[d];E.status==="rejected"&&(sm.error(E.node_name,E?.error?.message,E?.error?.stack),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,response:E?.result})}if(yse.isEmptyOrZeroLength(o))return{message:Dse,connections:c};if(l)return{message:Lse,failed_nodes:o,connections:c};throw Dx(new Error,Pse,Px.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Mse,"configureCluster");async function Lx(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(Lx,"functionWrapper")});var Hx=N((fwe,Bx)=>{"use strict";var df=require("joi"),Use=gt(),{validateSchemaExists:Ux,validateTableExists:vse,validateSchemaName:vx}=mi(),Bse=df.object({operation:df.string().valid("purge_stream"),schema:df.string().custom(Ux).custom(vx).optional(),database:df.string().custom(Ux).custom(vx).optional(),table:df.string().custom(vse).required()});function Hse(e){return Use.validateBySchema(e,Bse)}a(Hse,"purgeStreamValidator");Bx.exports=Hse});var Tb=N((hwe,xx)=>{"use strict";var{handleHDBError:xse,hdb_errors:kse}=_e(),{HTTP_STATUS_CODES:Fse}=kse,Gse=Hx(),qse=Tr(),$se=ao();xx.exports=Vse;async function Vse(e){e.schema=e.schema??e.database;let t=Gse(e);if(t)throw xse(t,t.message,Fse.BAD_REQUEST,void 0,void 0,!0);$se.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await qse.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Vse,"purgeStream")});var Rb=N((mwe,Kx)=>{"use strict";var Ab=ao(),Kse=Tr(),im=se(),wu=M(),Uc=It(),Yse=re(),gb=j(),{RemotePayloadObject:Wse}=tf(),{ErrorCode:kx}=require("nats"),{parentPort:Fx}=require("worker_threads"),{onMessageByType:jse}=dt(),{getThisNodeName:zse}=(ls(),oe(oa)),{requestClusterStatus:Qse}=(H_(),oe(T0)),Gx=im.get(wu.CONFIG_PARAMS.CLUSTERING_ENABLED),qx=im.get(wu.CONFIG_PARAMS.CLUSTERING_NODENAME);Kx.exports={clusterStatus:Jse,buildNodeStatus:Vx};var $x;jse("cluster-status",async e=>{$x(e)});async function Jse(){if(im.get(wu.CONFIG_PARAMS.REPLICATION_URL)||im.get(wu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;return Fx?(Fx.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{$x=s})):n=Qse(),n.node_name=zse(),n.is_enabled=!0,n}let e={node_name:qx,is_enabled:Gx,connections:[]};if(!Gx)return e;let t=await Ab.getAllNodeRecords();if(Yse.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(Vx(t[n],e.connections));return await Promise.allSettled(r),e}a(Jse,"clusterStatus");async function Vx(e,t){let r=e.name,n=new Wse(wu.OPERATIONS_ENUM.CLUSTER_STATUS,qx,void 0,await Ab.getSystemInfo()),s,i,o=Uc.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Kse.request(Uc.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Uc.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Uc.CLUSTER_STATUS_STATUSES.CLOSED,gb.error(`Error getting node status from ${r} `,s))}catch(l){gb.warn(`Error getting node status from ${r}`,l),l.code===kx.NoResponders?o=Uc.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===kx.Timeout?o=Uc.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Uc.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Xse(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!==wu.PRE_4_0_0_VERSION&&await Ab.upsertNodeRecord(l)}catch(l){gb.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(Vx,"buildNodeStatus");function Xse(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(Xse,"NodeStatusObject")});var bb=N((Twe,Yx)=>{"use strict";var{handleHDBError:Zse,hdb_errors:eie}=_e(),{HTTP_STATUS_CODES:tie}=eie,rie=Tr(),nie=ao(),yb=re(),om=require("joi"),sie=gt(),iie=2e3,oie=om.object({timeout:om.number().min(1),connected_nodes:om.boolean(),routes:om.boolean()});Yx.exports=aie;async function aie(e){nie.checkClusteringEnabled();let t=sie.validateBySchema(e,oie);if(t)throw Zse(t,t.message,tie.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||yb.autoCastBoolean(n),o=s===void 0||yb.autoCastBoolean(s),c={nodes:[]},l=await rie.getServerList(r??iie),u={};if(i)for(let d=0,_=l.length;d<_;d++){let E=l[d].statsz;E&&(u[l[d].server.name]=E.routes)}for(let d=0,_=l.length;d<_;d++){if(l[d].statsz)continue;let E=l[d].server,f=l[d].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[E.name]&&u[E.name].forEach(T=>{h.connected_nodes.includes(T.name.slice(0,-4))||h.connected_nodes.push(T.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:yb.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(aie,"clusterNetwork")});var Qx=N((Awe,zx)=>{"use strict";var Ob=require("joi"),Wx=gt(),{route_constraints:jx}=NA();zx.exports={setRoutesValidator:cie,deleteRoutesValidator:lie};function cie(e){let t=Ob.object({server:Ob.valid("hub","leaf"),routes:jx.required()});return Wx.validateBySchema(e,t)}a(cie,"setRoutesValidator");function lie(e){let t=Ob.object({routes:jx.required()});return Wx.validateBySchema(e,t)}a(lie,"deleteRoutesValidator")});var am=N((ywe,nk)=>{"use strict";var lo=Ct(),Nb=re(),ps=M(),Cu=se(),Jx=Qx(),{handleHDBError:Xx,hdb_errors:uie}=_e(),{HTTP_STATUS_CODES:Zx}=uie,ek="cluster routes successfully set",tk="cluster routes successfully deleted";nk.exports={setRoutes:_ie,getRoutes:fie,deleteRoutes:Eie};function die(e){let t=lo.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=Nb.autoCast(l.port);let u=r.some(_=>_.host===l.host&&_.port===l.port),d=n.some(_=>_.host===l.host&&_.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?lo.updateConfigValue(ps.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):lo.updateConfigValue(ps.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:ek,set:i,skipped:s}}a(die,"setRoutesNats");function _ie(e){let t=Jx.setRoutesValidator(e);if(t)throw Xx(t,t.message,Zx.BAD_REQUEST,void 0,void 0,!0);if(Cu.get(ps.CONFIG_PARAMS.CLUSTERING_ENABLED))return die(e);let r=[],n=[],s=Cu.get(ps.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{rk(s,i)?n.push(i):(s.push(i),r.push(i))}),lo.updateConfigValue(ps.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:ek,set:r,skipped:n}}a(_ie,"setRoutes");function rk(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(rk,"existsInArray");function fie(){if(Cu.get(ps.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=lo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Cu.get(ps.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(fie,"getRoutes");function Eie(e){let t=Jx.deleteRoutesValidator(e);if(t)throw Xx(t,t.message,Zx.BAD_REQUEST,void 0,void 0,!0);if(Cu.get(ps.CONFIG_PARAMS.CLUSTERING_ENABLED))return hie(e);let r=[],n=[],s=Cu.get(ps.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{rk(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),lo.updateConfigValue(ps.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:tk,deleted:r,skipped:n}}a(Eie,"deleteRoutes");function hie(e){let t=lo.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],_=!1;for(let E=0,f=r.length;E<f;E++){let h=r[E];if(d.host===h.host&&d.port===h.port){r.splice(E,1),_=!0,o=!0,s.push(d);break}}if(!_){let E=!0;for(let f=0,h=n.length;f<h;f++){let T=n[f];if(d.host===T.host&&d.port===T.port){n.splice(f,1),c=!0,E=!1,s.push(d);break}}E&&i.push(d)}}return o&&(r=Nb.isEmptyOrZeroLength(r)?null:r,lo.updateConfigValue(ps.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=Nb.isEmptyOrZeroLength(n)?null:n,lo.updateConfigValue(ps.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:tk,deleted:s,skipped:i}}a(hie,"deleteRoutesNats")});var ik=N((Owe,sk)=>{"use strict";var _f=require("alasql"),vc=require("recursive-iterator"),Xs=j(),pie=re(),ff=M(),Ib=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Sie(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>ff.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!ff.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][ff.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=mie(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!ff.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new _f.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function mie(e){return e.filter(t=>t[ff.PERMS_CRUD_ENUM.READ])}a(mie,"filterReadRestrictedAttrs");function Sie(e,t,r,n,s){Tie(e,t,r,n,s)}a(Sie,"interpretAST");function Ef(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Ef,"addSchemaTableToMap");function Tie(e,t,r,n,s){if(!e){Xs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof _f.yy.Insert?yie(e,t,r):e instanceof _f.yy.Select?gie(e,t,r,n,s):e instanceof _f.yy.Update?Aie(e,t,r):e instanceof _f.yy.Delete?Rie(e,t,r):Xs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Tie,"getRecordAttributesAST");function gie(e,t,r,n,s){if(!e){Xs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(pie.isEmptyOrZeroLength(i)){Xs.error("No schema specified");return}e.from.forEach(c=>{Ef(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ef(c.table,t,r,n,s)});let o=new vc(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Xs.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new vc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Xs.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new vc(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,_=s.get(d);if(!t.get(_).has(d))if(r.has(d))d=r.get(d);else{Xs.info(`table specified as ${d} not found.`);continue}t.get(_).get(d).indexOf(u.columnid)<0&&t.get(_).get(d).push(u.columnid)}}),e.order){let c=new vc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Xs.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(gie,"getSelectAttributes");function Aie(e,t,r){if(!e){Xs.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new vc(e.columns),s=e.table.databaseid;Ef(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wb(e.table.tableid,s,i.columnid,t,r)}a(Aie,"getUpdateAttributes");function Rie(e,t,r){if(!e){Xs.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new vc(e.where),s=e.table.databaseid;Ef(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wb(e.table.tableid,s,i.columnid,t,r)}a(Rie,"getDeleteAttributes");function yie(e,t,r){if(!e){Xs.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new vc(e.columns),s=e.into.databaseid;Ef(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wb(e.into.tableid,s,i.columnid,t,r)}a(yie,"getInsertAttributes");function wb(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(wb,"pushAttribute");sk.exports=Ib});var Pb=N((Iwe,lk)=>{var cm=uc(),ok=require("chalk"),Vn=j(),ak=require("prompt"),{promisify:bie}=require("util"),Cb=M(),Oie=require("fs-extra"),Nie=require("path"),Iie=re(),wie=Dc(),ck=se();ck.initSync();var Cie=require("moment"),Die=bie(ak.get),Pie=Nie.join(ck.getHdbBasePath(),Cb.LICENSE_KEY_DIR_NAME,Cb.LICENSE_FILE_NAME,Cb.LICENSE_FILE_NAME);lk.exports={getFingerprint:Mie,setLicense:Lie,parseLicense:Db,register:Uie,getRegistrationInfo:Bie};async function Lie(e){if(e&&e.key&&e.company){try{Vn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await Db(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Vn.error(r),Vn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Lie,"setLicense");async function Mie(){let e={};try{e=await cm.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Vn.error(r),Vn.error(t),new Error(r)}return e}a(Mie,"getFingerprint");async function Db(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Vn.info("Validating license input...");let r=cm.validateLicense(e,t);if(Vn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Vn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Vn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Vn.info("writing license to disk"),await Oie.writeFile(Pie,JSON.stringify({license_key:e,company:t}))}catch(n){throw Vn.error("Failed to write License"),n}return"Registration successful."}a(Db,"parseLicense");async function Uie(){let e=await vie();return Db(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Uie,"register");async function vie(){let e=await cm.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:ok.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:ok.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{ak.start()}catch(n){Vn.error(n)}let r;try{r=await Die(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(vie,"promptForRegistration");async function Bie(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await cm.getLicense()}catch(r){throw Vn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Iie.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=wie.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Cie.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Bie,"getRegistrationInfo")});var dk=N((Cwe,uk)=>{"use strict";var Hie=It(),Lb=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,_,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Hie.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:_,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};uk.exports=Lb});var Ek=N((Pwe,fk)=>{"use strict";var _k=It(),Mb=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,_){this.port=t,_===null&&(_=void 0),this.server_name=r+_k.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+_k.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:_,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:_,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:_,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};fk.exports=Mb});var pk=N((Mwe,hk)=>{"use strict";var Ub=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};hk.exports=Ub});var Sk=N((vwe,mk)=>{"use strict";var xie=It(),vb=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+xie.SERVER_SUFFIX.ADMIN,this.password=r}};mk.exports=vb});var _m=N((Hwe,Ak)=>{"use strict";var Bc=require("path"),Hc=require("fs-extra"),kie=dk(),Fie=Ek(),Gie=pk(),qie=Sk(),Bb=xn(),Pu=re(),Tn=Ct(),um=M(),hf=It(),{CONFIG_PARAMS:Jt}=um,Lu=j(),pf=se(),Tk=Xi(),Hb=Tr(),$ie=Js(),Du="clustering",Vie=1e4,gk=50;Ak.exports={generateNatsConfig:Yie,removeNatsConfig:Wie,getHubConfigPath:Kie};function Kie(){let e=pf.get(Jt.ROOTPATH);return Bc.join(e,Du,hf.NATS_CONFIG_FILES.HUB_SERVER)}a(Kie,"getHubConfigPath");async function Yie(e=!1,t=void 0){let r=pf.get(Jt.ROOTPATH);Hc.ensureDirSync(Bc.join(r,"clustering","leaf")),pf.initSync();let n=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_CERT_AUTH),s=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_PRIVATEKEY),i=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_CERTIFICATE);!await Hc.exists(i)&&!await Hc.exists(!n)&&await $ie.createNatsCerts();let o=Bc.join(r,Du,hf.PID_FILES.HUB),c=Bc.join(r,Du,hf.PID_FILES.LEAF),l=Tn.getConfigFromFile(Jt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Bc.join(r,Du,hf.NATS_CONFIG_FILES.HUB_SERVER),d=Bc.join(r,Du,hf.NATS_CONFIG_FILES.LEAF_SERVER),_=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_INSECURE),E=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_VERIFY),f=Tn.getConfigFromFile(Jt.CLUSTERING_NODENAME),h=Tn.getConfigFromFile(Jt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Hb.checkNATSServerInstalled()||dm("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await Bb.listUsers(),m=Tn.getConfigFromFile(Jt.CLUSTERING_USER),g=await Bb.getClusterUser();(Pu.isEmpty(g)||g.active!==!0)&&dm(`Invalid cluster user '${m}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await lm(Jt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await lm(Jt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await lm(Jt.CLUSTERING_HUBSERVER_NETWORK_PORT),await lm(Jt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[ne,Q]of T.entries())Q.role?.role===um.ROLE_TYPES_ENUM.CLUSTER_USER&&Q.active&&(S.push(new qie(Q.username,Tk.decrypt(Q.hash))),y.push(new Gie(Q.username,Tk.decrypt(Q.hash))));let I=[],{hub_routes:U}=Tn.getClusteringRoutes();if(!Pu.isEmptyOrZeroLength(U))for(let ne of U)I.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${ne.host}:${ne.port}`);let H=new kie(Tn.getConfigFromFile(Jt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,o,i,s,n,_,E,h,Tn.getConfigFromFile(Jt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Tn.getConfigFromFile(Jt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,S,y);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=Pu.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===um.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Hc.writeJson(u,H),Lu.trace(`Hub server config written to ${u}`));let X=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new Fie(Tn.getConfigFromFile(Jt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,c,l,[X],[Y],S,y,i,s,n,_);n==null&&delete V.tls.ca_file,(t===void 0||t===um.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Hc.writeJson(d,V),Lu.trace(`Leaf server config written to ${d}`))}a(Yie,"generateNatsConfig");async function lm(e){let t=pf.get(e);return Pu.isEmpty(t)&&dm(`port undefined for '${e}'`),await Pu.isPortTaken(t)&&dm(`'${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(lm,"isPortAvailable");function dm(e){let t=`Error generating clustering config: ${e}`;Lu.error(t),console.error(t),process.exit(1)}a(dm,"generateNatsConfigError");async function Wie(e){let{port:t,config_file:r}=Hb.getServerConfig(e),{username:n,decrypt_hash:s}=await Bb.getClusterUser(),i=0,o=2e3;for(;i<gk;){try{let d=await Hb.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Lu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=gk)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Lu.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Pu.async_set_timeout(u)}let c="0".repeat(Vie),l=Bc.join(pf.get(Jt.ROOTPATH),Du,r);await Hc.writeFile(l,c),await Hc.remove(l),Lu.notify(e,"started.")}a(Wie,"removeNatsConfig")});var Ik=N((kwe,Nk)=>{"use strict";var Kn=se(),jie=uc(),Ge=M(),mf=It(),uo=require("path"),{PACKAGE_ROOT:Em}=M(),Rk=se(),fm=re(),Mu="/dev/null",zie=uo.join(Em,"launchServiceScripts"),yk=uo.join(Em,"utility/scripts"),Qie=uo.join(yk,Ge.HDB_RESTART_SCRIPT),bk=uo.resolve(Em,"dependencies",`${process.platform}-${process.arch}`,mf.NATS_BINARY_NAME);function Ok(){let t=jie.licenseSearch().ram_allocation||Ge.RAM_ALLOCATION_ENUM.DEFAULT,r=Ge.MEM_SETTING_KEY+t,n={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return fm.noBootFile()&&(n[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=fm.getEnvCliRootPath()),{name:Ge.PROCESS_DESCRIPTORS.HDB,script:Ge.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Em}}a(Ok,"generateMainServerConfig");var Jie=9930;function Xie(){Kn.initSync(!0);let e=Kn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=uo.join(e,"clustering",mf.NATS_CONFIG_FILES.HUB_SERVER),r=uo.join(Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=Rk.get(Ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=mf.LOG_LEVEL_FLAGS[Kn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Jie?"-"+n:""),script:bk,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mu,i.error_file=Mu),i}a(Xie,"generateNatsHubServerConfig");var Zie=9940;function eoe(){Kn.initSync(!0);let e=Kn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=uo.join(e,"clustering",mf.NATS_CONFIG_FILES.LEAF_SERVER),r=uo.join(Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=Rk.get(Ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=mf.LOG_LEVEL_FLAGS[Kn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Zie?"-"+n:""),script:bk,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mu,i.error_file=Mu),i}a(eoe,"generateNatsLeafServerConfig");function toe(){Kn.initSync();let e=uo.join(Kn.get(Ge.CONFIG_PARAMS.LOGGING_ROOT),Ge.LOG_NAMES.HDB),t={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:zie,autorestart:!1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Mu,t.error_file=Mu),t}a(toe,"generateClusteringUpgradeV4ServiceConfig");function roe(){let e={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.RESTART_HDB};return fm.noBootFile()&&(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=fm.getEnvCliRootPath()),{...{name:Ge.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:yk},script:Qie}}a(roe,"generateRestart");function noe(){return{apps:[Ok()]}}a(noe,"generateAllServiceConfigs");Nk.exports={generateAllServiceConfigs:noe,generateMainServerConfig:Ok,generateRestart:roe,generateNatsHubServerConfig:Xie,generateNatsLeafServerConfig:eoe,generateClusteringUpgradeV4ServiceConfig:toe}});var Tf=N((qwe,Gk)=>{"use strict";var at=M(),soe=re(),fo=_m(),hm=Tr(),_o=It(),fa=Ik(),pm=se(),xc=j(),ioe=ao(),{startWorker:wk,onMessageFromWorkers:ooe}=dt(),aoe=bu(),Gwe=require("util"),coe=require("child_process"),loe=require("fs"),{execFile:uoe}=coe,Qe;Gk.exports={enterPM2Mode:doe,start:Ea,stop:xb,reload:Dk,restart:Pk,list:kb,describe:Uk,connect:Eo,kill:poe,startAllServices:moe,startService:Fb,getUniqueServicesList:vk,restartAllServices:Soe,isServiceRegistered:Bk,reloadStopStart:Hk,restartHdb:Mk,deleteProcess:Eoe,startClusteringProcesses:kk,startClusteringThreads:Fk,isHdbRestartRunning:hoe,isClusteringRunning:goe,stopClustering:Toe,reloadClustering:Aoe,expectedRestartOfChildren:Lk};var Sf=!1;ooe(e=>{e.type==="restart"&&pm.initSync(!0)});function doe(){Sf=!0}a(doe,"enterPM2Mode");function Eo(){return Qe||(Qe=require("pm2")),new Promise((e,t)=>{Qe.connect((r,n)=>{r&&t(r),e(n)})})}a(Eo,"connect");var zr,_oe=10,Ck;function Ea(e,t=!1){if(Sf)return foe(e);let r=uoe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=zr.indexOf(r);o>-1&&zr.splice(o,1),!Ck&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<_oe&&(loe.existsSync(fo.getHubConfigPath())?Ea(e):(await fo.generateNatsConfig(!0),Ea(e),await new Promise(c=>setTimeout(c,3e3)),await fo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await fo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=pm.get(at.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&_o.LOG_LEVEL_HIERARCHY[o]>=_o.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===_o.LOG_LEVELS.ERR||d===_o.LOG_LEVELS.WRN?xc.OUTPUTS.STDERR:xc.OUTPUTS.STDOUT;xc.logCustomLevel(d||"info",f,n,i.slice(u,l.index).trim())}let[_,E]=l;u=l.index+_.length,d=_o.LOG_LEVELS[E]}if(_o.LOG_LEVEL_HIERARCHY[o]>=_o.LOG_LEVEL_HIERARCHY[d||"info"]){let _=d===_o.LOG_LEVELS.ERR||d===_o.LOG_LEVELS.WRN?xc.OUTPUTS.STDERR:xc.OUTPUTS.STDOUT;xc.logCustomLevel(d||"info",_,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!zr&&(zr=[],!t)){let i=a(()=>{Ck=!0,zr&&(zr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}zr.push(r)}a(Ea,"start");function foe(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.start(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(foe,"startWithPM2");function xb(e){if(!Sf){for(let t of zr||[])t.name===e&&(zr.splice(zr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.stop(e,async(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.delete(e,(i,o)=>{i&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(o)})})})}a(xb,"stop");function Dk(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.reload(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(Dk,"reload");function Pk(e){if(!Sf){Lk();for(let t of zr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.restart(e,(n,s)=>{Qe.disconnect(),t(s)})})}a(Pk,"restart");function Lk(){for(let e of zr||[])e.config&&(e.config.restarts=0)}a(Lk,"expectedRestartOfChildren");function Eoe(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.delete(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(Eoe,"deleteProcess");async function Mk(){await Ea(fa.generateRestart())}a(Mk,"restartHdb");async function hoe(){let e=await kb();for(let t in e)if(e[t].name===at.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(hoe,"isHdbRestartRunning");function kb(){return new Promise(async(e,t)=>{try{await Eo()}catch(r){t(r)}Qe.list((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(kb,"list");function Uk(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.describe(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(Uk,"describe");function poe(){if(!Sf){for(let e of zr||[])e.kill();zr=[];return}return new Promise(async(e,t)=>{try{await Eo()}catch(r){t(r)}Qe.killDaemon((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(poe,"kill");async function moe(){try{await kk(),await Fk(),await Ea(fa.generateAllServiceConfigs())}catch(e){throw Qe?.disconnect(),e}}a(moe,"startAllServices");async function Fb(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case at.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=fa.generateMainServerConfig();break;case at.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=fa.generateNatsIngestServiceConfig();break;case at.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=fa.generateNatsReplyServiceConfig();break;case at.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=fa.generateNatsHubServerConfig(),await Ea(r,t),await fo.removeNatsConfig(e);return;case at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=fa.generateNatsLeafServerConfig(),await Ea(r,t),await fo.removeNatsConfig(e);return;case at.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=fa.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ea(r)}catch(r){throw Qe?.disconnect(),r}}a(Fb,"startService");async function vk(){try{let e=await kb(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Qe?.disconnect(),e}}a(vk,"getUniqueServicesList");async function Soe(e=[]){try{let t=!1,r=await vk();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===at.PROCESS_DESCRIPTORS.HDB?t=!0:await Pk(o))}t&&await Hk(at.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Qe?.disconnect(),t}}a(Soe,"restartAllServices");async function Bk(e){if(zr?.find(r=>r.name===e))return!0;let t=await aoe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Bk,"isServiceRegistered");async function Hk(e){let t=pm.get(at.CONFIG_PARAMS.THREADS_COUNT)??pm.get(at.CONFIG_PARAMS.THREADS),r=await Uk(e),n=soe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await xb(e),await Fb(e)):e===at.PROCESS_DESCRIPTORS.HDB?await Mk():await Dk(e)}a(Hk,"reloadStopStart");var xk;async function kk(e=!1){for(let t in at.CLUSTERING_PROCESSES){let r=at.CLUSTERING_PROCESSES[t];await Fb(r,e)}}a(kk,"startClusteringProcesses");async function Fk(){xk=wk(at.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:at.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await hm.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await hm.updateLocalStreams();let e=await ioe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===at.PRE_4_0_0_VERSION){xc.info("Starting clustering upgrade 4.0.0 process"),wk(at.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Fk,"startClusteringThreads");async function Toe(){for(let e in at.CLUSTERING_PROCESSES)if(e!==at.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===at.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await xk.terminate();else{let t=at.CLUSTERING_PROCESSES[e];await xb(t)}}a(Toe,"stopClustering");async function goe(){for(let e in at.CLUSTERING_PROCESSES){let t=at.CLUSTERING_PROCESSES[e];if(await Bk(t)===!1)return!1}return!0}a(goe,"isClusteringRunning");async function Aoe(){await fo.generateNatsConfig(!0),await hm.reloadNATSHub(),await hm.reloadNATSLeaf(),await fo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await fo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Aoe,"reloadClustering")});var $b={};je($b,{compactOnStart:()=>Roe,copyDb:()=>Wk});async function Roe(){ha.notify("Running compact on start"),console.log("Running compact on start");let e=(0,Gb.get)(pa.CONFIG_PARAMS.ROOTPATH),t=new Map,r=ut();(0,qb.updateConfigValue)(pa.CONFIG_PARAMS.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,mm.join)(e,"backup",n+".mdb"),o=(0,mm.join)(e,pa.DATABASES_DIR_NAME,n+"-copy.mdb"),c=0;try{c=await qk(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){ha.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Wk(n,o),console.log("Backing up",n,"to",i),await(0,kc.move)(s,i,{overwrite:!0})}try{Uu()}catch(n){ha.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,kc.move)(i,s,{overwrite:!0}),await(0,kc.remove)((0,mm.join)(e,pa.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{Uu()}catch(n){ha.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){ha.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,qb.updateConfigValue)(pa.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,kc.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Uu(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await qk(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}.
10
+ `)},E3="certificate.pem",h3="privateKey.pem",p3="caCertificate.pem",m3="natsCertificate.pem",S3="natsCaCertificate.pem",Rt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},T3={tls_certificate:Rt.SERVER,tls_certificateAuthority:Rt.CA,customFunctions_tls_certificate:Rt.SERVER,customFunctions_tls_certificateAuthority:Rt.CA,operationsApi_tls_certificate:Rt["OPERATIONS-API"],operationsApi_tls_certificateAuthority:Rt["OPERATIONS-CA"]},g3={[Rt.SERVER]:2,[Rt.DEFAULT]:1},A3={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},R3={[Rt["OPERATIONS-API"]]:3,[Rt.SERVER]:2,[Rt.DEFAULT]:1},y3={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},b3={[Rt["OPERATIONS-CA"]]:3,[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1},O3={[Rt.CA]:2,[Rt["DEFAULT-CA"]]:1};Object.assign(tL,{CERTIFICATE_PEM_NAME:E3,PRIVATEKEY_PEM_NAME:h3,CA_PEM_NAME:p3,CERT_NAME:Rt,CERT_CONFIG_NAME_MAP:T3,CERT_PREFERENCE_APP:g3,CERT_PREFERENCE_OPS:A3,CERT_PREFERENCE_REP:R3,CA_CERT_PREFERENCE_REP:y3,CA_CERT_PREFERENCE_OPS:b3,CA_CERT_PREFERENCE_APP:O3,CERTIFICATE_VALUES:f3,NATS_CERTIFICATE_PEM_NAME:m3,NATS_CA_PEM_NAME:S3})});var NA=N((lRe,aL)=>{"use strict";var iL=require("fs-extra"),me=require("joi"),N3=require("os"),{boolean:He,string:wt,number:rr,array:cc}=me.types(),{totalmem:rL}=require("os"),ac=require("path"),I3=j(),OA=re(),cRe=bA(),nL=M(),w3=gt(),sL="log",C3="components",D3="Invalid logging.rotation.maxSize unit. Available units are G, M or K",P3="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",L3="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",M3="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",U3="rootPath config parameter is undefined",ln=me.alternatives([rr.min(0),wt]).optional().empty(null),Hh=me.alternatives([cc.items(wt,{host:wt.required(),port:ln},{hostname:wt.required(),port:ln}).empty(null),cc.items(wt)]),Ti,oL=!1;aL.exports={configValidator:v3,routesValidator:G3,route_constraints:Hh};function v3(e,t=!1){if(oL=t,Ti=e.rootPath,OA.isEmpty(Ti))throw U3;let r=He.optional(),n=rr.min(0).max(1e3).empty(null).default(F3),s=wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(u_),i=wt.optional().empty(null),o=wt.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=me.string().empty(null).default(u_),l=me.custom(H3).empty(null).default(u_),u=e.clustering?.enabled,d=me.object({certificate:i,certificateAuthority:i,privateKey:i}),_;return u===!0?_=me.object({enabled:r,hubServer:me.object({cluster:me.object({name:me.required().empty(null),network:me.object({port:ln,routes:Hh}).required()}).required(),leafNodes:me.object({network:me.object({port:ln}).required()}).required(),network:me.object({port:ln}).required()}).required(),leafServer:me.object({network:me.object({port:ln,routes:Hh}).required(),streams:me.object({maxAge:rr.min(120).allow(null).optional(),maxBytes:rr.min(1).allow(null).optional(),maxMsgs:rr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:me.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:He.optional(),databaseLevel:He.optional(),tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.required(),verify:He.optional()}),user:wt.optional().empty(null)}).optional():_=me.object({enabled:r,tls:me.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:He.optional()})}).optional(),me.object({authentication:me.alternatives(me.object({authorizeLocal:He,cacheTTL:rr.required(),enableSessions:He}),He).optional(),analytics:me.object({aggregatePeriod:rr}),replication:me.object({hostname:me.alternatives(wt,rr).optional().empty(null),url:wt.optional().empty(null),port:ln,securePort:ln,routes:cc.optional().empty(null),databases:me.alternatives(wt,cc),enableRootCAs:He.optional(),copyTablesToCatchUp:He.optional()}).optional(),componentsRoot:s.optional(),clustering:_,localStudio:me.object({enabled:r}).required(),logging:me.object({auditAuthEvents:me.object({logFailed:He,logSuccessful:He}),file:He.required(),level:me.valid("notify","fatal","error","warn","info","debug","trace"),rotation:me.object({enabled:He.optional(),compress:He.optional(),interval:wt.custom(k3).optional().empty(null),maxSize:wt.custom(x3).optional().empty(null),path:wt.optional().empty(null).default(u_)}).required(),root:s,stdStreams:He.required(),auditLog:He.required()}).required(),operationsApi:me.object({network:me.object({cors:He.optional(),corsAccessList:cc.optional(),headersTimeout:rr.min(1).optional(),keepAliveTimeout:rr.min(1).optional(),port:ln,domainSocket:me.optional().empty("hdb/operations-server").default(u_),securePort:ln,timeout:rr.min(1).optional()}).optional(),tls:me.alternatives([me.array().items(d),d])}).required(),rootPath:wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:me.object({network:me.object({port:ln,securePort:ln,mtls:me.alternatives([He.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:He.optional()})])}).required(),webSocket:He.optional(),requireAuthentication:He.optional()}),http:me.object({compressionThreshold:rr.optional(),cors:He.optional(),corsAccessList:cc.optional(),headersTimeout:rr.min(1).optional(),port:ln,securePort:ln,maxHeaderSize:rr.optional(),mtls:me.alternatives([He.optional(),me.object({user:wt.optional(),certificateAuthority:i,required:He.optional()})]),threadRange:me.alternatives([cc.optional(),wt.optional()])}).required(),threads:me.alternatives(n.optional(),me.object({count:n.optional(),debug:me.alternatives(He.optional(),me.object({startingPort:rr.min(1).optional(),host:wt.optional(),waitForDebugger:He.optional()})),maxHeapMemory:rr.min(0).optional()})),storage:me.object({writeAsync:He.required(),overlappingSync:He.optional(),caching:He.optional(),compression:me.alternatives([He.optional(),me.object({dictionary:wt.optional(),threshold:rr.optional()})]),compactOnStart:He.optional(),compactOnStartKeepBackup:He.optional(),noReadAhead:He.optional(),path:l,prefetchWrites:He.optional(),maxFreeSpaceToLoad:rr.optional(),maxFreeSpaceToRetain:rr.optional()}).required(),ignoreScripts:He.optional(),tls:me.alternatives([me.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(v3,"configValidator");function B3(e){return oL||iL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(B3,"doesPathExist");function H3(e,t){me.assert(e,wt.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=B3(e);if(r)return t.message(r)}a(H3,"validatePath");function x3(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(D3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(L3):e}a(x3,"validateRotationMaxSize");function k3(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(P3);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(M3):e}a(k3,"validateRotationInterval");function F3(e,t){let r=t.state.path.join("."),n=N3.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||rL();return i=Math.round(Math.min(i,rL())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),I3.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(F3,"setDefaultThreads");function u_(e,t){let r=t.state.path.join(".");if(!OA.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(OA.isEmpty(Ti))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ac.join(Ti,C3);case"logging.root":return ac.join(Ti,sL);case"clustering.leafServer.streams.path":return ac.join(Ti,"clustering","leaf");case"storage.path":let n=ac.join(Ti,nL.LEGACY_DATABASES_DIR_NAME);return iL.existsSync(n)?n:ac.join(Ti,nL.DATABASES_DIR_NAME);case"logging.rotation.path":return ac.join(Ti,sL);case"operationsApi.network.domainSocket":return r==null?null:ac.join(Ti,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(u_,"setDefaultRoot");function G3(e){let t=me.object({routes:Hh});return w3.validateBySchema({routes:e},t)}a(G3,"routesValidator")});var Ct=N(mL=>{"use strict";var un=M(),Er=re(),hr=j(),{configValidator:q3,routesValidator:cL}=NA(),Kr=require("fs-extra"),uL=require("yaml"),Bn=require("path"),$3=require("is-number"),dL=require("properties-reader"),V3=require("lodash"),{handleHDBError:K3}=_e(),{HTTP_STATUS_CODES:Y3,HDB_ERROR_MSGS:vl}=Dn(),{server:W3}=(qr(),oe(ja)),{DATABASES_PARAM_CONFIG:d_,CONFIG_PARAMS:vn,CONFIG_PARAM_MAP:Gs}=un,j3="Unable to get config value because config is uninitialized",z3="Config successfully initialized",Q3="Error backing up config file",J3="Empty parameter sent to getConfigValue",_L=Bn.join(un.PACKAGE_ROOT,"config","yaml",un.HDB_DEFAULT_CONFIG_FILE),X3=Bn.join(un.PACKAGE_ROOT,"config","yaml","defaultNatsConfig.yaml"),Z3="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",lL={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},xh,jt,kh;Object.assign(mL,{createConfigFile:eX,getDefaultConfig:tX,getConfigValue:EL,initConfig:Fh,flattenConfig:Bl,updateConfigValue:hL,updateConfigObject:nX,getConfiguration:oX,setConfiguration:aX,readConfigFile:DA,getClusteringRoutes:cX,initOldConfig:pL,getConfigFromFile:lX,getConfigFilePath:lc,addConfig:uX,deleteConfigFromFile:dX,getConfigObj:_X,resolvePath:IA,getFlatConfigObj:fX});function IA(e){if(e?.startsWith("~/"))return Bn.join(Er.getHomeDir(),e.slice(1));let t=se();return Bn.resolve(t.getHdbBasePath(),e)}a(IA,"resolvePath");function eX(e,t=!1){let r=jo(_L);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=uL.parseDocument(Kr.readFileSync(X3,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}xh=Bl(r.toJSON());let n;for(let c in e){let l=Gs[c.toLowerCase()];if(l===vn.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(u=>({[u]:e[c][u]}));continue}if(!l&&(c.endsWith("_package")||c.endsWith("_port"))&&(l=c),l!==void 0){let u=l.split("_"),d=wA(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(_){hr.error(_)}}}n&&fL(r,n),CA(r,t);let s=r.toJSON();jt=Bl(s);let i=r.getIn(["rootPath"]),o=Bn.join(i,un.HDB_CONFIG_FILE);Kr.createFileSync(o),Kr.writeFileSync(o,String(r)),hr.trace(`Config file written to ${o}`)}a(eX,"createConfigFile");function fL(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Er.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(d_.TABLES))for(let i in n[s][d_.TABLES])for(let o in n[s][d_.TABLES][i]){let c=n[s][d_.TABLES][i][o],l=[vn.DATABASES,s,d_.TABLES,i,o];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let o=n[s][i],c=[vn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){hr.error("Error parsing schemas CLI/env config arguments",n)}}a(fL,"setSchemasConfig");function tX(e){if(xh===void 0){let r=jo(_L);xh=Bl(r.toJSON())}let t=Gs[e.toLowerCase()];if(t!==void 0)return xh[t.toLowerCase()]}a(tX,"getDefaultConfig");function EL(e){if(e==null){hr.info(J3);return}if(jt===void 0){hr.trace(j3);return}let t=Gs[e.toLowerCase()];if(t!==void 0)return jt[t.toLowerCase()]}a(EL,"getConfigValue");function lc(e=Er.getPropsFilePath()){let t=Er.getEnvCliRootPath();if(t)return IA(Bn.join(t,un.HDB_CONFIG_FILE));let r=dL(e);return IA(r.get(un.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(lc,"getConfigFilePath");function Fh(e=!1){if(jt===void 0||e){let t;if(!Er.noBootFile()){t=Er.getPropsFilePath();try{Kr.accessSync(t,Kr.constants.F_OK|Kr.constants.R_OK)}catch(i){throw hr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=lc(t),n;if(r.includes("config/settings.js"))try{pL(r);return}catch(i){if(i.code!==un.NODE_ERROR_CODES.ENOENT)throw i}try{n=jo(r)}catch(i){if(i.code===un.NODE_ERROR_CODES.ENOENT){hr.trace(`HarperDB config file not found at ${r}.
11
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw hr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}rX(n,r),CA(n);let s=n.toJSON();if(W3.config=s,jt=Bl(s),jt.logging_rotation_rotate)for(let i in lL)jt[i]&&hr.error(`Config ${lL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);hr.trace(z3)}}a(Fh,"initConfig");function rX(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Bn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Bn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(hr.trace("Updating config file with missing config params"),Kr.writeFileSync(t,String(e)))}a(rX,"checkForUpdatedConfig");function CA(e,t=!1){let r=e.toJSON();if(r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads),r.http?.port&&r.http?.port===r.http?.securePort)throw vl.CONFIG_VALIDATION("http.port and http.securePort cannot be the same value");if(r.operationsApi?.network?.port&&r.operationsApi?.network?.port===r.operationsApi?.network?.securePort)throw vl.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=q3(r,t);if(n.error)throw vl.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}a(CA,"validateConfig");function nX(e,t){jt===void 0&&(jt={});let r=Gs[e.toLowerCase()];if(r===void 0){hr.trace(`Unable to update config object because config param '${e}' does not exist`);return}jt[r.toLowerCase()]=t}a(nX,"updateConfigObject");function hL(e,t,r=void 0,n=!1,s=!1,i=!1){jt===void 0&&Fh();let o=EL(Gs.hdb_root),c=Bn.join(o,un.HDB_CONFIG_FILE),l=jo(c),u;if(r===void 0&&e.toLowerCase()===vn.DATABASES)u=t;else if(r===void 0){let E;if(i)E=e;else if(E=Gs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=wA(E,t);l.setIn([...f],h)}else for(let E in r){let f=Gs[E.toLowerCase()];if(f===vn.HTTP_SECUREPORT&&r[E]===jt[vn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),f===vn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===jt[vn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),f===vn.DATABASES){u=r[E];continue}if(f?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),T=un.LEGACY_CONFIG_PARAMS[E.toUpperCase()];T&&T.startsWith("customFunctions")&&l.hasIn(T.split("_"))&&(f=T,h=T.split("_"));let m=wA(f,r[E]);f==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],m)}catch(g){hr.error(g)}}}u&&fL(l,u),CA(l);let d=l.getIn(["rootPath"]),_=Bn.join(d,un.HDB_CONFIG_FILE);n===!0&&sX(c,d),Kr.writeFileSync(_,String(l)),s&&(jt=Bl(l.toJSON())),hr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(hL,"updateConfigValue");function sX(e,t){try{let r=Bn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${un.HDB_CONFIG_FILE}.bak`);Kr.copySync(e,r),hr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){hr.error(Q3),hr.error(r)}}a(sX,"backupConfigFile");var iX=["databases"];function Bl(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network={...e.http,...e.operationsApi.network}),e?.operationsApi&&(e.operationsApi.tls={...e.tls,...e.operationsApi.tls}),kh=e,r(e);function r(n){let s={};for(let i in n)if(n.hasOwnProperty(i)){if(typeof n[i]=="object"&&n[i]!==null&&!Array.isArray(n[i])&&!iX.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!vn[l.toUpperCase()]&&Gs[l]&&(s[Gs[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(Bl,"flattenConfig");function wA(e,t){if(e===vn.CLUSTERING_NODENAME||e===vn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if($3(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Er.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return Er.autoCast(t)}a(wA,"castConfigValue");function oX(){let e=Er.getPropsFilePath(),t=lc(e);return jo(t).toJSON()}a(oX,"getConfiguration");async function aX(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return hL(void 0,void 0,s,!0),Z3}catch(i){throw typeof i=="string"||i instanceof String?K3(i,i,Y3.BAD_REQUEST,void 0,void 0,!0):i}}a(aX,"setConfiguration");function DA(){let e=Er.getPropsFilePath();try{Kr.accessSync(e,Kr.constants.F_OK|Kr.constants.R_OK)}catch(n){if(!Er.noBootFile())throw hr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=lc(e);return jo(t).toJSON()}a(DA,"readConfigFile");function jo(e){return uL.parseDocument(Kr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(jo,"parseYamlDoc");function cX(){let e=DA(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Er.isEmptyOrZeroLength(t)?[]:t;let r=cL(t);if(r)throw vl.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Er.isEmptyOrZeroLength(n)?[]:n;let s=cL(n);if(s)throw vl.CONFIG_VALIDATION(s.message);if(!Er.isEmptyOrZeroLength(n)&&!Er.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Er.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw vl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(cX,"getClusteringRoutes");function pL(e){let t=dL(e);jt={};for(let r in Gs){let n=t.get(r.toUpperCase());if(Er.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Gs[r].toLowerCase();s===vn.LOGGING_ROOT?jt[s]=Bn.dirname(n):jt[s]=n}return jt}a(pL,"initOldConfig");function lX(e){let t=DA();return V3.get(t,e.replaceAll("_","."))}a(lX,"getConfigFromFile");async function uX(e,t){let r=jo(lc());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kr.writeFile(lc(),String(r))}a(uX,"addConfig");function dX(e){let t=lc(Er.getPropsFilePath()),r=jo(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Bn.join(n,un.HDB_CONFIG_FILE);Kr.writeFileSync(s,String(r))}a(dX,"deleteConfigFromFile");function _X(){return kh||(Fh(),kh)}a(_X,"getConfigObj");function fX(){return jt||Fh(),jt}a(fX,"getFlatConfigObj")});var TL=N((fRe,SL)=>{"use strict";var Gh=M(),qh=class{static{a(this,"BaseLicense")}constructor(t=0,r=Gh.RAM_ALLOCATION_ENUM.DEFAULT,n=Gh.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},PA=class extends qh{static{a(this,"ExtendedLicense")}constructor(t=0,r=Gh.RAM_ALLOCATION_ENUM.DEFAULT,n=Gh.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};SL.exports={BaseLicense:qh,ExtendedLicense:PA}});var uc=N((hRe,NL)=>{"use strict";var xl=require("fs-extra"),AL=Bh(),RL=require("crypto"),EX=require("moment"),hX=require("uuid").v4,Yr=j(),MA=require("path"),pX=re(),zo=M(),{totalmem:gL}=require("os"),mX=TL().ExtendedLicense,Hl="invalid license key format",SX="061183",TX="mofi25",gX="aes-256-cbc",AX=16,RX=32,yL=se(),{resolvePath:bL}=Ct();yL.initSync();var LA;NL.exports={validateLicense:OL,generateFingerPrint:bX,licenseSearch:BA,getLicense:IX,checkMemoryLimit:wX};function UA(){return MA.join(yL.getHdbBasePath(),zo.LICENSE_KEY_DIR_NAME,zo.LICENSE_FILE_NAME)}a(UA,"getLicenseDirPath");function yX(){let e=UA();return bL(MA.join(e,zo.LICENSE_FILE_NAME))}a(yX,"getLicenseFilePath");function vA(){let e=UA();return bL(MA.join(e,zo.REG_KEY_FILE_NAME))}a(vA,"getFingerPrintFilePath");async function bX(){let e=vA();try{return await xl.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await OX();throw Yr.error(`Error writing fingerprint file to ${e}`),Yr.error(t),new Error("There was an error generating the fingerprint")}}a(bX,"generateFingerPrint");async function OX(){let e=hX(),t=AL.hash(e),r=vA();try{await xl.mkdirp(UA()),await xl.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw Yr.error(`Error writing fingerprint file to ${r}`),Yr.error(n),new Error("There was an error generating the fingerprint")}return t}a(OX,"writeFingerprint");function OL(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:zo.RAM_ALLOCATION_ENUM.DEFAULT,version:zo.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Yr.error("empty license key passed to validate."),r;let n=vA(),s=!1;try{s=xl.statSync(n)}catch(i){Yr.error(i)}if(s){let i;try{i=xl.readFileSync(n,"utf8")}catch{Yr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(TX),c=o[1];c=Buffer.concat([Buffer.from(c)],AX);let l=Buffer.concat([Buffer.from(i)],RX),u=RL.createDecipheriv(gX,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(o[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let f=NX(o[0],i);if(f)d=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Hl),Yr.error(Hl),new Error(Hl)}let _;if(isNaN(d))try{_=JSON.parse(d),r.version=_.version,r.exp_date=_.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),_.ram_allocation&&(r.ram_allocation=_.ram_allocation)}catch{throw console.error(Hl),Yr.error(Hl),new Error(Hl)}else r.exp_date=d;r.exp_date<EX().valueOf()&&(r.valid_date=!1),AL.validate(o[1],`${SX}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Yr.error("Invalid licence"),r}a(OL,"validateLicense");function NX(e,t){try{let r=RL.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{Yr.warn("Check old license failed")}}a(NX,"checkOldLicense");function BA(){let e=new mX,t=[];try{t=xl.readFileSync(yX(),"utf-8").split(zo.NEW_LINE)}catch(r){r.code==="ENOENT"?Yr.debug("no license file found"):Yr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(pX.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=OL(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){Yr.error("There was an error parsing the license string."),Yr.error(s),e.ram_allocation=zo.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return LA=e,e}a(BA,"licenseSearch");async function IX(){return LA||await BA(),LA}a(IX,"getLicense");function wX(){let e=BA().ram_allocation,t=process.constrainedMemory?.()||gL();if(t=Math.round(Math.min(t,gL())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(wX,"checkMemoryLimit")});var xn=N((gRe,qL)=>{"use strict";var DL="username is required",PL="nothing to update, must supply active, role or password to update",LL="password cannot be an empty string",ML="If role is specified, it cannot be empty.",UL="active must be true or false";qL.exports={addUser:HX,alterUser:xX,dropUser:FX,getSuperUser:VX,userInfo:GX,listUsers:Vh,listUsersExternal:qX,setUsersToGlobal:Fl,findAndValidateUser:FL,getClusterUser:KX,USERNAME_REQUIRED:DL,ALTERUSER_NOTHING_TO_UPDATE:PL,EMPTY_PASSWORD:LL,EMPTY_ROLE:ML,ACTIVE_BOOLEAN:UL};var vL=cn(),CX=oc(),kA=Bh(),BL=XP(),HL=$r(),FA=eo(),Hn=re(),xL=require("validate.js"),Ke=j(),{promisify:DX}=require("util"),GA=Xi(),IL=M(),wL=It(),PX=Ct(),mRe=se(),SRe=uc(),LX=Qi(),{table:TRe}=(De(),oe(lt)),{handleHDBError:gi,hdb_errors:MX}=_e(),{HTTP_STATUS_CODES:Ai,AUTHENTICATION_ERROR_MSGS:HA,HDB_ERROR_MSGS:kl}=MX,{UserEventMsg:qA}=qs(),xA=require("lodash"),{server:$A}=(qr(),oe(ja)),UX=j();$A.getUser=(e,t)=>FL(e,t,t!=null);var kL={username:!0,active:!0,role:!0,password:!0},CL=new Map,$h=HL.searchByValue,vX=HL.searchByHash,BX=DX(CX.delete);async function HX(e){let t=xL.cleanAttributes(e,kL),r=BL.addUserValidation(t);if(r)throw gi(new Error,r.message,Ai.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await $h(n),s=s&&Array.from(s)}catch(l){throw Ke.error("There was an error searching for a role in add user"),Ke.error(l),l}if(!s||s.length<1)throw gi(new Error,kl.ROLE_NAME_NOT_FOUND(t.role),Ai.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw gi(new Error,kl.DUP_ROLES_FOUND(t.role),Ai.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=GA.encrypt(t.password)),t.password=kA.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await vL.insert(i)}catch(l){throw Ke.error("There was an error searching for a user."),Ke.error(l),l}Ke.debug(o);try{await Fl()}catch(l){throw Ke.error("Got an error setting users to global"),Ke.error(l),l}if(o.skipped_hashes.length===1)throw gi(new Error,kl.USER_ALREADY_EXISTS(t.username),Ai.CONFLICT,void 0,void 0,!0);let c={...t};return c.role=s[0],FA.signalUserChange(new qA(process.pid)),`${c.username} successfully added`}a(HX,"addUser");async function xX(e){let t=xL.cleanAttributes(e,kL);if(Hn.isEmptyOrZeroLength(t.username))throw new Error(DL);if(Hn.isEmptyOrZeroLength(t.password)&&Hn.isEmptyOrZeroLength(t.role)&&Hn.isEmptyOrZeroLength(t.active))throw new Error(PL);if(!Hn.isEmpty(t.password)&&Hn.isEmptyOrZeroLength(t.password.trim()))throw new Error(LL);if(!Hn.isEmpty(t.active)&&!Hn.isBoolean(t.active))throw new Error(UL);let r=kX(t.username);if(!Hn.isEmpty(t.password)&&!Hn.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=GA.encrypt(t.password)),t.password=kA.hash(t.password)),t.role==="")throw new Error(ML);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await $h(i)||[])}catch(c){throw Ke.error("Got an error searching for a role."),Ke.error(c),c}if(!o||o.length===0){let c=kl.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ke.error(c),gi(new Error,c,Ai.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=kl.ALTER_USER_DUP_ROLES(t.role);throw Ke.error(c),gi(new Error,c,Ai.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await vL.update(n)}catch(i){throw Ke.error("Error during update."),Ke.error(i),i}try{await Fl()}catch(i){throw Ke.error("Got an error setting users to global"),Ke.error(i),i}return FA.signalUserChange(new qA(process.pid)),s}a(xX,"alterUser");function kX(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(kX,"isClusterUser");async function FX(e){try{let t=BL.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Hn.isEmpty(global.hdb_users.get(e.username)))throw gi(new Error,kl.USER_NOT_EXIST(e.username),Ai.NOT_FOUND,void 0,void 0,!0);let n;try{n=await BX(r)}catch(s){throw Ke.error("Got an error deleting a user."),Ke.error(s),s}Ke.debug(n);try{await Fl()}catch(s){throw Ke.error("Got an error setting users to global."),Ke.error(s),s}return FA.signalUserChange(new qA(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(FX,"dropUser");async function GX(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=xA.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await vX(r)}catch(s){throw Ke.error("Got an error searching for a role."),Ke.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ke.error(r),r}return t}a(GX,"userInfo");async function qX(){let e;try{e=await Vh()}catch(t){throw Ke.error("Got an error listing users."),Ke.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(qX,"listUsersExternal");async function Vh(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await $h(e)}catch(o){throw Ke.error("Got an error searching for roles."),Ke.error(o),o}let r={};for(let o of t)r[o.id]=xA.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await $h(n)}catch(o){throw Ke.error("Got an error searching for users."),Ke.error(o),o}let i=new Map;for(let o of s)o=xA.cloneDeep(o),o.role=r[o.role],$X(o.role),i.set(o.username,o);return i}catch(e){throw Ke.error("got an error listing users"),Ke.error(e),Hn.errorizeMessage(e)}return null}a(Vh,"listUsers");function $X(e){try{if(!e){Ke.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(LX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ke.error("Got an error trying to set system permissions."),Ke.error(t)}}a($X,"appendSystemTablesToRole");async function Fl(){try{let e=await Vh();global.hdb_users=e}catch(e){throw Ke.error(e),e}}a(Fl,"setUsersToGlobal");async function FL(e,t,r=!0){global.hdb_users||await Fl();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw gi(new Error,HA.GENERIC_AUTH_FAIL,Ai.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw gi(new Error,HA.USER_INACTIVE,Ai.UNAUTHORIZED,void 0,void 0,!0);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(CL.get(t)===n.password)return s;if(kA.validate(n.password,t))CL.set(t,n.password);else throw gi(new Error,HA.GENERIC_AUTH_FAIL,Ai.UNAUTHORIZED,void 0,void 0,!0)}return s}a(FL,"findAndValidateUser");async function VX(){global.hdb_users||await Fl();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(VX,"getSuperUser");async function KX(){let e=await Vh(),t=PX.getConfigFromFile(IL.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Hn.isEmpty(r)&&r?.role?.role===IL.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=GA.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+wL.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+wL.SERVER_SUFFIX.ADMIN,r}a(KX,"getClusterUser");var GL=[];$A.invalidateUser=function(e){for(let t of GL)try{t(e)}catch(r){UX.error("Error invalidating user",r)}};$A.onInvalidatedUser=function(e){GL.push(e)}});var f_=N((bRe,YL)=>{"use strict";var dc=j(),kn=M(),YX=TP(),RRe=Fs(),yRe=Zi(),WX=xn(),{validateEvent:$L}=qs(),__=Un(),jX=require("process"),{resetDatabases:zX}=(De(),oe(lt)),QX={[kn.ITC_EVENT_TYPES.SCHEMA]:JX,[kn.ITC_EVENT_TYPES.USER]:KL};async function JX(e){let t=$L(e);if(t){dc.error(t);return}dc.trace("ITC schemaHandler received schema event:",e),await YX(e.message),await XX(e.message)}a(JX,"schemaHandler");async function XX(e){try{__.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),__.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),__.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=zX();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){dc.error(t)}}a(XX,"syncSchemaMetadata");var VL=[];async function KL(e){try{try{__.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),__.resetReadTxn(kn.SYSTEM_SCHEMA_NAME,kn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){dc.warn(r)}let t=$L(e);if(t){dc.error(t);return}dc.trace(`ITC userHandler ${kn.HDB_ITC_CLIENT_PREFIX}${jX.pid} received user event:`,e),await WX.setUsersToGlobal();for(let r of VL)r()}catch(t){dc.error(t)}}a(KL,"userHandler");KL.addListener=function(e){VL.push(e)};YL.exports=QX});var qs=N((DRe,jL)=>{"use strict";var NRe=j(),VA=re(),ZX=M(),{ITC_ERRORS:E_}=Dn(),{parentPort:IRe,threadId:eZ,isMainThread:tZ,workerData:wRe}=require("worker_threads"),{onMessageFromWorkers:rZ,broadcast:CRe,broadcastWithAcknowledgement:nZ}=dt();jL.exports={sendItcEvent:sZ,validateEvent:WL,SchemaEventMsg:iZ,UserEventMsg:oZ};var Kh;rZ(async(e,t)=>{Kh=Kh||f_(),WL(e),Kh[e.type]&&await Kh[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function sZ(e){return!tZ&&e.message&&(e.message.originator=eZ),nZ(e)}a(sZ,"sendItcEvent");function WL(e){if(typeof e!="object")return E_.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||VA.isEmpty(e.type))return E_.MISSING_TYPE;if(!e.hasOwnProperty("message")||VA.isEmpty(e.message))return E_.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||VA.isEmpty(e.message.originator))return E_.MISSING_ORIGIN;if(ZX.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return E_.INVALID_EVENT(e.type)}a(WL,"validateEvent");function iZ(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(iZ,"SchemaEventMsg");function oZ(e){this.originator=e}a(oZ,"UserEventMsg")});var eo=N((MRe,XL)=>{"use strict";var zL=M(),LRe=re(),Yh=j(),QL=pP(),Gl,{sendItcEvent:JL}=qs();function aZ(e){try{Yh.info("signalSchemaChange called with message:",e),Gl=Gl||f_();let t=new QL(zL.ITC_EVENT_TYPES.SCHEMA,e);return Gl.schema(t),JL(t)}catch(t){Yh.error(t)}}a(aZ,"signalSchemaChange");function cZ(e){try{Yh.trace("signalUserChange called with message:",e),Gl=Gl||f_();let t=new QL(zL.ITC_EVENT_TYPES.USER,e);return Gl.user(t),JL(t)}catch(t){Yh.error(t)}}a(cZ,"signalUserChange");XL.exports={signalSchemaChange:aZ,signalUserChange:cZ}});var Wh=N((vRe,eM)=>{"use strict";var ZL=re(),lZ=M(),uZ=j(),dZ=Ih(),_Z=Nh(),fZ=eo(),{SchemaEventMsg:EZ}=qs(),hZ="already exists in";eM.exports=pZ;async function pZ(e,t,r){if(ZL.isEmptyOrZeroLength(r))return r;let n=[];ZL.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{n.push(i.attribute)});let s=r.filter(i=>n.indexOf(i)<0);return s.length===0||await Promise.all(s.map(async i=>{await mZ(e,t.schema,t.name,i)})),s}a(pZ,"lmdbCheckForNewAttributes");async function mZ(e,t,r,n){let s=new _Z(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await SZ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(hZ))uZ.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(mZ,"createNewAttribute");async function SZ(e){let t;return t=await dZ(e),fZ.signalSchemaChange(new EZ(process.pid,lZ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(SZ,"createAttribute")});var ql=N((HRe,tM)=>{"use strict";var KA=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};tM.exports=KA});var nM=N((kRe,rM)=>{"use strict";var TZ=ql(),gZ=M().OPERATIONS_ENUM,YA=class extends TZ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(gZ.INSERT,r,n,s,i),this.records=t}};rM.exports=YA});var iM=N((GRe,sM)=>{"use strict";var AZ=ql(),RZ=M().OPERATIONS_ENUM,WA=class extends AZ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(RZ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};sM.exports=WA});var aM=N(($Re,oM)=>{"use strict";var yZ=ql(),bZ=M().OPERATIONS_ENUM,jA=class extends yZ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(bZ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};oM.exports=jA});var lM=N((KRe,cM)=>{"use strict";var OZ=ql(),NZ=M().OPERATIONS_ENUM,zA=class extends OZ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(NZ.DELETE,n,s,t,i),this.original_records=r}};cM.exports=zA});var h_=N((jRe,fM)=>{"use strict";var WRe=require("path"),uM=ht(),IZ=nM(),wZ=iM(),CZ=aM(),DZ=lM(),$l=Ht(),dM=re(),{CONFIG_PARAMS:PZ}=M(),_M=se();_M.initSync();var jh=M().OPERATIONS_ENUM,{getTransactionAuditStorePath:LZ}=Tt();fM.exports=MZ;async function MZ(e,t){if(_M.get(PZ.LOGGING_AUDITLOG)===!1)return;let r=LZ(e.schema,e.table),n=await uM.openEnvironment(r,e.table,!0),s=UZ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){uM.initializeDBIs(n,$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,$l.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),dM.isEmpty(s.user_name)||n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[$l.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(MZ,"writeTransaction");function UZ(e,t){let r=dM.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===jh.INSERT)return new IZ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.UPDATE)return new wZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.UPSERT)return new CZ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===jh.DELETE)return new DZ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(UZ,"createTransactionObject")});var QA=N((JRe,EM)=>{"use strict";var vZ=a_(),QRe=Vd(),p_=M(),BZ=Kd(),HZ=ec().insertRecords,xZ=ht(),kZ=j(),FZ=Wh(),{getSchemaPath:GZ}=Tt(),qZ=h_();EM.exports=$Z;async function $Z(e){try{let{schema_table:t,attributes:r}=vZ(e);BZ(e,r,t.hash_attribute),e.schema!==p_.SYSTEM_SCHEMA_NAME&&(r.includes(p_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(p_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(p_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(p_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await FZ(e.hdb_auth_header,t,r),s=GZ(e.schema,e.table),i=await xZ.openEnvironment(s,e.table),o=await HZ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qZ(e,o)}catch(c){kZ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a($Z,"lmdbCreateRecords")});var mM=N((ZRe,pM)=>{"use strict";var hM=M(),VZ=QA(),KZ=Vd(),YZ=require("fs-extra"),{getSchemaPath:WZ}=Tt();pM.exports=jZ;async function jZ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new KZ(hM.SYSTEM_SCHEMA_NAME,hM.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await VZ(r),await YZ.mkdirp(WZ(e.schema))}a(jZ,"lmdbCreateSchema")});var TM=N((tye,SM)=>{"use strict";var JA=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};SM.exports=JA});var yM=N((oye,RM)=>{"use strict";var gM=ht(),XA=sn(),ZA=Dn().LMDB_ERRORS_ENUM,zZ=Ht(),AM=j(),nye=re(),QZ=require("lmdb"),JZ=TM(),XZ=M(),{OVERFLOW_MARKER:sye,MAX_SEARCH_KEY_LENGTH:iye}=zZ,ZZ=XZ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function e5(e,t,r,n){if(XA.validateEnv(e),t===void 0)throw new Error(ZA.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ZA.IDS_REQUIRED):new Error(ZA.IDS_MUST_BE_ITERABLE);try{let s=gM.listDBIs(e);gM.initializeDBIs(e,t,s);let i=new JZ,o,c=[],l=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[ZZ]>n){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,QZ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<s.length;m++){let g=s[m];if(!h.hasOwnProperty(g)||g===t)continue;let S=e.dbis[g],y=h[g];if(y!=null)try{let I=XA.getIndexedValues(y);if(I)for(let U=0,H=I.length;U<H;U++)S.remove(I[U],o)}catch{AM.warn(`cannot delete from attribute: ${g}, ${y}:${o}`)}}});c.push(T),l.push(o),i.original_records.push(h)}catch(h){AM.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let E=0,f=d.length;E<f;E++)d[E]===!0?i.deleted.push(l[E]):(i.skipped.push(l[E]),u.push(E));let _=0;for(let E=0;E<u.length;E++){let f=u[E];i.original_records.splice(f-_,1),_++}return i.txn_time=XA.getNextMonotonicTime(),i}catch(s){throw s}}a(e5,"deleteRecords");RM.exports={deleteRecords:e5}});var m_=N((cye,OM)=>{"use strict";var Vl=re(),t5=yM(),r5=ht(),{getSchemaPath:n5}=Tt(),s5=h_(),i5=j();OM.exports=o5;async function o5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(Vl.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Vl.isEmptyOrZeroLength(e.hash_values)&&!Vl.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];Vl.isEmpty(l)||e.hash_values.push(l)}}if(Vl.isEmptyOrZeroLength(e.hash_values))return bM([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Vl.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[n]:e.hash_values[c]}}let s=n5(e.schema,e.table),i=await r5.openEnvironment(s,e.table),o=await t5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await s5(e,o)}catch(c){i5.error(`unable to write transaction due to ${c.message}`)}return bM(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(o5,"lmdbDeleteRecords");function bM(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(bM,"createDeleteResponse")});var tR=N((dye,NM)=>{"use strict";var a5=M(),uye=sn();function eR(e,t){let r=Object.create(null);if(t.length===1&&a5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(eR,"parseRow");function c5(e,t,r,n){let s=eR(r,e);n.push(s)}a(c5,"searchAll");function l5(e,t,r,n){let s=eR(r,e);n[t]=s}a(l5,"searchAllToMap");function u5(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(u5,"iterateDBI");function _c(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(_c,"pushResults");function d5(e,t,r,n,s,i){t.toString().endsWith(e)&&_c(t,r,n,s,i)}a(d5,"endsWith");function _5(e,t,r,n,s,i){t.toString().includes(e)&&_c(t,r,n,s,i)}a(_5,"contains");function f5(e,t,r,n,s,i){t>e&&_c(t,r,n,s,i)}a(f5,"greaterThanCompare");function E5(e,t,r,n,s,i){t>=e&&_c(t,r,n,s,i)}a(E5,"greaterThanEqualCompare");function h5(e,t,r,n,s,i){t<e&&_c(t,r,n,s,i)}a(h5,"lessThanCompare");function p5(e,t,r,n,s,i){t<=e&&_c(t,r,n,s,i)}a(p5,"lessThanEqualCompare");NM.exports={parseRow:eR,searchAll:c5,searchAllToMap:l5,iterateDBI:u5,endsWith:d5,contains:_5,greaterThanCompare:f5,greaterThanEqualCompare:E5,lessThanCompare:h5,lessThanEqualCompare:p5,pushResults:_c}});var Kl=N((pye,MM)=>{"use strict";var Qo=ht(),fye=j(),Fn=sn(),zh=Ht(),zt=Dn().LMDB_ERRORS_ENUM,Eye=re(),m5=M(),Qh=tR(),{parseRow:S5}=Qh,hye=require("lmdb"),{OVERFLOW_MARKER:IM,MAX_SEARCH_KEY_LENGTH:T5}=zh;function wM(e,t,r,n=!1,s=void 0,i=void 0){return fc(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(wM,"iterateFullIndex");function S_(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return fc(e,t,r,(d,_,E,f)=>{let S={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return f===r?(S.values=!1,_.getRange(S).map(y=>({value:y}))):_.getRange(S)})}a(S_,"iterateRangeBetween");function fc(e,t,r,n){let s=e.database||e,i=Qo.openDBI(s,r);i[zh.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Qo.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(fc,"setupTransaction");function CM(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(IM)){if(!s)if(r)s=Qo.openDBI(e,r);else{let l=Qo.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Qo.openDBI(e,l[u]),!s[zh.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(CM,"getOverflowCheck");function g5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return fc(e,t,t,(o,c,l)=>(Jh(r),r=T_(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>S5(u.value,r))))}a(g5,"searchAll");function A5(e,t,r,n=!1,s=void 0,i=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);Jh(r),r=T_(e.database||e,r);let o=new Map;for(let{key:c,value:l}of wM(e,t,t,n,s,i))o.set(c,Qh.parseRow(l,r));return o}a(A5,"searchAllToMap");function R5(e,t,r=!1,n=void 0,s=void 0){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=wM(e,void 0,t,r,n,s),c=o.transaction,l=CM(c.database,c,void 0,t);for(let{key:u,value:d}of o){let _=l(u,d);i[_]===void 0&&(i[_]=[]),i[_].push(d)}return i}a(R5,"iterateDBI");function y5(e,t){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);return Qo.statDBI(e,t).entryCount}a(y5,"countAll");function b5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),fc(e,t,r,(c,l,u,d)=>(n=Fn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(_=>({key:n,value:_}))))}a(b5,"equals");function O5(e,t,r){return Jo(e,t,r),Qo.openDBI(e,t).getValuesCount(r)}a(O5,"count");function N5(e,t,r,n,s=!1,i=void 0,o=void 0){return Jo(e,r,n),fc(e,null,r,(c,l)=>{n=Fn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let _;for(let E of l.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){_=E;break}return _!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:_,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==_){if(f.toString().startsWith(n))return E;if(u===!0)return d.DONE}}),d.filter(E=>E)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(_=>{if(_.key.toString().startsWith(n))return _;if(u===!0)return d.DONE}),u?d:d.filter(_=>_)})}a(N5,"startsWith");function I5(e,t,r,n,s=!1,i=void 0,o=void 0){return DM(e,t,r,n,s,i,o,!0)}a(I5,"endsWith");function DM(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Jo(e,r,n),fc(e,null,r,(l,u,d,_)=>{let E=CM(d,l,_,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(IM)?u.getValues(f,{transaction:l}).map(T=>{let m=E(f,T);if(c?m.endsWith(n):m.includes(n))return{key:m,value:T}}).filter(T=>T):(c?h.endsWith(n):h.includes(n))?u[zh.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:u.getValues(f,{transaction:l}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(DM,"contains");function w5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),S_(e,t,r,n,l,s,i,o,!0,!1)}a(w5,"greaterThan");function C5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),S_(e,t,r,n,l,s,i,o,!1,!1)}a(C5,"greaterThanEqual");function D5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),S_(e,t,r,l,n,s,i,o,!1,!0)}a(D5,"lessThan");function P5(e,t,r,n,s=!1,i=void 0,o=void 0){Jo(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),S_(e,t,r,l,n,s,i,o,!1,!1)}a(P5,"lessThanEqual");function L5(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Fn.validateEnv(e),r===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(zt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(zt.END_VALUE_REQUIRED);if(n=Fn.convertKeyValueToWrite(n),s=Fn.convertKeyValueToWrite(s),n>s)throw new Error(zt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return S_(e,t,r,n,s,i,o,c)}a(L5,"between");function M5(e,t,r,n){Fn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(Jh(r),r=T_(s,r),n===void 0)throw new Error(zt.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Qh.parseRow(c,r)),o}a(M5,"searchByHash");function U5(e,t,r){Fn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(U5,"checkHashExists");function v5(e,t,r,n,s=[]){return LM(e,t,r,n,s),PM(e,t,r,n,s).map(i=>i[1])}a(v5,"batchSearchByHash");function B5(e,t,r,n,s=[]){LM(e,t,r,n,s);let i=new Map;for(let[o,c]of PM(e,t,r,n,s))i.set(o,c);return i}a(B5,"batchSearchByHashToMap");function PM(e,t,r,n,s=[]){return fc(e,t,t,(i,o,c)=>{r=T_(c,r);let l=r.length<3;return n.map(u=>{let d=c.dbis[t].get(u,{transaction:i,lazy:l});if(d)return[u,Qh.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(PM,"batchHashSearch");function LM(e,t,r,n,s){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.HASH_ATTRIBUTE_REQUIRED);if(Jh(r),n==null)throw new Error(zt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(zt.IDS_MUST_BE_ITERABLE)}a(LM,"initializeBatchSearchByHash");function Jh(e){if(!Array.isArray(e))throw e===void 0?new Error(zt.FETCH_ATTRIBUTES_REQUIRED):new Error(zt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Jh,"validateFetchAttributes");function Jo(e,t,r){if(Fn.validateEnv(e),t===void 0)throw new Error(zt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(zt.SEARCH_VALUE_REQUIRED);if(r?.length>T5)throw new Error(zt.SEARCH_VALUE_TOO_LARGE)}a(Jo,"validateComparisonFunctions");function T_(e,t){return t.length===1&&m5.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Qo.listDBIs(e)),t}a(T_,"setGetWholeRowAttributes");MM.exports={searchAll:g5,searchAllToMap:A5,count:O5,countAll:y5,equals:b5,startsWith:N5,endsWith:I5,contains:DM,searchByHash:M5,setGetWholeRowAttributes:T_,batchSearchByHash:v5,batchSearchByHashToMap:B5,checkHashExists:U5,iterateDBI:R5,greaterThan:w5,greaterThanEqual:C5,lessThan:D5,lessThanEqual:P5,between:L5}});var Yl=N((Sye,xM)=>{var UM=require("lodash"),vM=gt(),xe=require("joi"),H5=re(),{hdb_schema_table:g_,checkValidTable:BM,hdb_table:HM,hdb_database:Xh}=mi(),{handleHDBError:x5,hdb_errors:k5}=_e(),{getDatabases:F5}=(De(),oe(lt)),{HTTP_STATUS_CODES:G5}=k5,q5=xe.object({database:Xh,schema:Xh,table:HM,search_attribute:g_,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xe.alternatives(g_,xe.object())).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),$5=xe.object({database:Xh,schema:Xh,table:HM,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xe.alternatives(g_,xe.object())).optional(),sort:xe.object({attribute:xe.alternatives(g_,xe.array().min(1)),descending:xe.bool().optional()}).optional(),conditions:xe.array().min(1).items(xe.alternatives(xe.object({operator:xe.string().valid("and","or").default("and").lowercase(),conditions:xe.array()}),xe.object({search_attribute:xe.alternatives(g_,xe.array().min(1)),search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()}))).required()});xM.exports=function(e,t){let r=null;switch(t){case"value":r=vM.validateBySchema(e,q5);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(BM("database",e.schema)),i(BM("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=vM.validateBySchema(e,$5);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=H5.checkGlobalSchemaTable(e.schema,e.table);if(s)return x5(new Error,s,G5.NOT_FOUND);let o=F5()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=a(d=>{for(let _=0,E=d.conditions.length;_<E;_++){let f=d.conditions[_];f.conditions?l(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=UM.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!UM.some(o,_=>_===d||_.attribute===d||_.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var rR=N((gye,kM)=>{"use strict";var V5=ht(),K5=Yl(),{getSchemaPath:Y5}=Tt();kM.exports=W5;function W5(e){let t=K5(e,"hashes");if(t)throw t;let r=Y5(e.schema,e.table);return V5.openEnvironment(r,e.table)}a(W5,"initialize")});var nR=N((Rye,FM)=>{"use strict";var j5=Kl(),z5=rR();FM.exports=Q5;async function Q5(e){let t=await z5(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return j5.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Q5,"lmdbGetDataByHash")});var Wl=N((bye,GM)=>{"use strict";var sR=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};GM.exports=sR});var $M=N((Iye,qM)=>{"use strict";var Nye=Wl(),J5=Kl(),X5=rR();qM.exports=Z5;async function Z5(e){let t=await X5(e),r=global.hdb_schema[e.schema][e.table];return J5.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Z5,"lmdbSearchByHash")});var $s=N((Cye,VM)=>{"use strict";var iR=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};VM.exports=iR});var Zh=N((Pye,QM)=>{"use strict";var Wr=Kl(),e6=ht(),t6=re(),ke=Ht(),Ec=M(),r6=Qi(),KM=Dn().LMDB_ERRORS_ENUM,{getSchemaPath:n6}=Tt(),to=Ec.SEARCH_WILDCARDS;async function s6(e,t,r){let n;e.schema===Ec.SYSTEM_SCHEMA_NAME?n=r6[e.table]:n=global.hdb_schema[e.schema][e.table];let s=zM(e,n.hash_attribute,r,t);return WM(e,s,n.hash_attribute,r)}a(s6,"prepSearch");async function WM(e,t,r,n){let s=n6(e.schema,e.table),i=await e6.openEnvironment(s,e.table),o=jM(i,e,t,r),c=o.transaction||i;if([ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ke.SEARCH_TYPES.SEARCH_ALL,ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(i6(e,r)===!1){let d=e.search_attribute;if(d===r)return n?YM(o,()=>!0):o.map(E=>({[r]:E.key}));let _=a(E=>({[r]:E.value,[d]:E.key}),"toObject");return n?YM(o,_):o.map(_)}let u=e.search_attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?Wr.batchSearchByHashToMap(c,r,e.get_attributes,u):Wr.batchSearchByHash(c,r,e.get_attributes,u)}a(WM,"executeSearch");function jM(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:l}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case ke.SEARCH_TYPES.EQUALS:s=Wr.equals(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.CONTAINS:s=Wr.contains(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.ENDS_WITH:case ke.SEARCH_TYPES._ENDS_WITH:s=Wr.endsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.STARTS_WITH:case ke.SEARCH_TYPES._STARTS_WITH:s=Wr.startsWith(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ke.SEARCH_TYPES.SEARCH_ALL:return Wr.searchAll(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wr.searchAllToMap(e,n,t.get_attributes,o,c,l);case ke.SEARCH_TYPES.BETWEEN:s=Wr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN:case ke.SEARCH_TYPES._GREATER_THAN:s=Wr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.GREATER_THAN_EQUAL:case ke.SEARCH_TYPES._GREATER_THAN_EQUAL:s=Wr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN:case ke.SEARCH_TYPES._LESS_THAN:s=Wr.lessThan(e,i,t.search_attribute,t.search_value,o,c,l);break;case ke.SEARCH_TYPES.LESS_THAN_EQUAL:case ke.SEARCH_TYPES._LESS_THAN_EQUAL:s=Wr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,l);break;default:return Object.create(null)}return s}a(jM,"searchByType");function YM(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(YM,"createMapFromIterable");function i6(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(i6,"checkToFetchMore");function zM(e,t,r,n){if(t6.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),to.indexOf(s)>-1)return r===!0?ke.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ke.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(to[0])<0&&s.indexOf(to[1])<0)return c===!0?r===!0?ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ke.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ke.SEARCH_TYPES.EQUALS;if(to.indexOf(i)>=0&&to.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ke.SEARCH_TYPES.CONTAINS;if(to.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ke.SEARCH_TYPES.ENDS_WITH;if(to.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ke.SEARCH_TYPES.STARTS_WITH;if(s.includes(to[0])||s.includes(to[1]))return ke.SEARCH_TYPES.EQUALS;throw new Error(KM.UNKNOWN_SEARCH_TYPE)}else switch(n){case Ec.VALUE_SEARCH_COMPARATORS.BETWEEN:return ke.SEARCH_TYPES.BETWEEN;case Ec.VALUE_SEARCH_COMPARATORS.GREATER:return ke.SEARCH_TYPES.GREATER_THAN;case Ec.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ke.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ec.VALUE_SEARCH_COMPARATORS.LESS:return ke.SEARCH_TYPES.LESS_THAN;case Ec.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ke.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(KM.UNKNOWN_SEARCH_TYPE)}}a(zM,"createSearchTypeFromSearchObject");QM.exports={executeSearch:WM,createSearchTypeFromSearchObject:zM,prepSearch:s6,searchByType:jM}});var XM=N((Uye,JM)=>{"use strict";var Mye=$s(),o6=Yl(),a6=re(),c6=M(),l6=Zh();JM.exports=u6;function u6(e,t){if(!a6.isEmpty(t)&&c6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=o6(e,"value");if(n)throw n;return l6.prepSearch(e,t,!0)}a(u6,"lmdbGetDataByValue")});var A_=N((Hye,ZM)=>{"use strict";var Bye=$s(),d6=Yl(),_6=re(),f6=M(),E6=Zh();ZM.exports=h6;async function h6(e,t){if(!_6.isEmpty(t)&&f6.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=d6(e,"value");if(n)throw n;return E6.prepSearch(e,t,!1)}a(h6,"lmdbSearchByValue")});var tU=N((Fye,eU)=>{"use strict";var kye=Ht(),oR=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},aR=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},cR=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};eU.exports={SearchByConditionsObject:oR,SearchCondition:aR,SortAttribute:cR}});var oU=N((Vye,iU)=>{"use strict";var qye=tU().SearchByConditionsObject,p6=$s(),m6=Yl(),lR=Kl(),ep=Ht(),{Resource:$ye}=(Vs(),oe(uR)),sU=Zh(),S6=tR(),T6=require("lodash"),{getSchemaPath:g6}=Tt(),rU=ht(),{handleHDBError:A6,hdb_errors:R6}=_e(),{HTTP_STATUS_CODES:y6}=R6,b6=1e8;iU.exports=O6;async function O6(e){let t=m6(e,"conditions");if(t)throw A6(t,t.message,y6.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=g6(e.schema,e.table),n=await rU.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)rU.openDBI(n,u.search_attribute);let i=T6.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===ep.SEARCH_TYPES.EQUALS?u.estimated_count=lR.count(n,u.search_attribute,u.search_value):d===ep.SEARCH_TYPES.CONTAINS||d===ep.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=b6}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await nU(o,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(sU.filterByType),_=d.length,E=lR.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(f=>u.get(f,{transaction:o,lazy:!0})),_>0&&(l=l.filter(f=>{for(let h=0;h<_;h++)if(!d[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(f=>S6.parseRow(f,E))}else{for(let _=1;_<i.length;_++){let E=i[_],f=await nU(o,e,E,s.hash_attribute);c=c.concat(f)}let u=new Set,d=e.offset||0;c=c.filter(_=>u.has(_)?!1:(u.add(_),!0)).slice(d,e.limit&&e.limit+d),l=lR.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(O6,"lmdbSearchByConditions");async function nU(e,t,r,n){let s=new p6(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===ep.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,sU.searchByType(e,s,i,n).map(o=>o.value)}a(nU,"executeConditionSearch")});var R_=N((Yye,aU)=>{"use strict";var N6=M().OPERATIONS_ENUM,dR=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=N6.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};aU.exports=dR});var _R=N((jye,hU)=>{"use strict";var dU=$s(),_U=R_(),fU=A_(),EU=m_(),dn=M(),cU=re(),lU=ht(),{getTransactionAuditStorePath:I6,getSchemaPath:w6}=Tt(),uU=j();hU.exports=C6;async function C6(e){try{if(cU.isEmpty(global.hdb_schema[e.schema])||cU.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await D6(e),await P6(e);let t=w6(e.schema,e.table);try{await lU.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")uU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=I6(e.schema,e.table);await lU.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")uU.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(C6,"lmdbDropTable");async function D6(e){let t=new dU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await fU(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new _U(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await EU(s)}a(D6,"deleteAttributesFromSystem");async function P6(e){let t=new dU(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await fU(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new _U(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await EU(s)}catch(i){throw i}}a(P6,"dropTableFromSystem")});var mU=N((Qye,pU)=>{"use strict";var L6=require("fs-extra"),M6=$s(),U6=Wl(),v6=R_(),B6=_R(),H6=m_(),x6=nR(),k6=A_(),ro=M(),{getSchemaPath:F6}=Tt(),{handleHDBError:G6,hdb_errors:q6}=_e(),{HDB_ERROR_MSGS:$6,HTTP_STATUS_CODES:V6}=q6;pU.exports=K6;async function K6(e){let t;try{t=await Y6(e.schema);let r=new M6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await k6(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await B6(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new v6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await H6(s);let i=F6(t);await L6.remove(i)}catch(r){throw r}}a(K6,"lmdbDropSchema");async function Y6(e){let t=new U6(ro.SYSTEM_SCHEMA_NAME,ro.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ro.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await x6(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw G6(new Error,$6.SCHEMA_NOT_FOUND(e),V6.NOT_FOUND,void 0,void 0,!0);return n}a(Y6,"validateDropSchema")});var y_=N((Xye,SU)=>{"use strict";var fR=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};SU.exports=fR});var hR=N((tbe,TU)=>{"use strict";var W6=require("fs-extra"),tp=ht(),{getTransactionAuditStorePath:j6}=Tt(),ER=Ht(),ebe=y_();TU.exports=z6;async function z6(e){let t;try{let r=j6(e.schema,e.table);await W6.mkdirp(r),t=await tp.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{tp.createDBI(t,ER.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),tp.createDBI(t,ER.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),tp.createDBI(t,ER.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(z6,"createTransactionsAuditEnvironment")});var RU=N((sbe,AU)=>{"use strict";var pR=M(),gU=ht(),Q6=ec(),{getSystemSchemaPath:J6,getSchemaPath:X6}=Tt(),nbe=Qi(),Z6=Ih(),mR=Nh(),e8=j(),t8=hR();AU.exports=r8;async function r8(e,t){let r=X6(t.schema,t.table),n=new mR(t.schema,t.table,pR.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new mR(t.schema,t.table,pR.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new mR(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await gU.createEnvironment(r,t.table),e!==void 0){let o=await gU.openEnvironment(J6(),pR.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Q6.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdb_table_attributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await SR(n),await SR(s),await SR(i)}await t8(t)}catch(o){throw o}}a(r8,"lmdbCreateTable");async function SR(e){try{await Z6(e)}catch(t){e8.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(SR,"createAttribute")});var bU=N((obe,yU)=>{"use strict";var n8=a_(),s8=Kd(),i8=Wh(),b_=M(),o8=ec().updateRecords,a8=ht(),{getSchemaPath:c8}=Tt(),l8=h_(),u8=j();yU.exports=d8;async function d8(e){try{let{schema_table:t,attributes:r}=n8(e);s8(e,r,t.hash_attribute),e.schema!==b_.SYSTEM_SCHEMA_NAME&&(r.includes(b_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(b_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(b_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(b_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await i8(e.hdb_auth_header,t,r),s=c8(e.schema,e.table),i=await a8.openEnvironment(s,e.table),o=await o8(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await l8(e,o)}catch(c){u8.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(d8,"lmdbUpdateRecords")});var NU=N((cbe,OU)=>{"use strict";var _8=M().OPERATIONS_ENUM,TR=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=_8.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};OU.exports=TR});var wU=N((dbe,IU)=>{"use strict";var ube=NU(),f8=a_(),E8=Kd(),h8=Wh(),O_=M(),p8=ec().upsertRecords,m8=ht(),{getSchemaPath:S8}=Tt(),T8=h_(),g8=j(),{handleHDBError:A8,hdb_errors:R8}=_e();IU.exports=y8;async function y8(e){let t;try{t=f8(e)}catch(l){throw A8(l,l.message,R8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;E8(e,n,r.hash_attribute),e.schema!==O_.SYSTEM_SCHEMA_NAME&&(n.includes(O_.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(O_.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(O_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(O_.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await h8(e.hdb_auth_header,r,n),i=S8(e.schema,e.table),o=await m8.openEnvironment(i,e.table),c=await p8(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await T8(e,c)}catch(l){g8.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(y8,"lmdbUpsertRecords")});var DU=N((fbe,CU)=>{"use strict";var gR=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};CU.exports=gR});var LU=N((hbe,PU)=>{"use strict";var AR=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};PU.exports=AR});var vU=N((Sbe,UU)=>{"use strict";var RR=ht(),{getTransactionAuditStorePath:b8}=Tt(),mbe=DU(),N_=Ht(),O8=re(),MU=LU(),N8=require("util").promisify,I8=N8(setTimeout),w8=1e4,C8=100;UU.exports=D8;async function D8(e){let t=b8(e.schema,e.table),r=await RR.openEnvironment(t,e.table,!0),n=RR.listDBIs(r);RR.initializeDBIs(r,N_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new MU;do s=await P8(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=s.start_timestamp),s.end_timestamp!==void 0&&(i.end_timestamp=s.end_timestamp),i.transactions_deleted+=s.transactions_deleted,await I8(C8);while(s.transactions_deleted>0);return i}a(D8,"deleteAuditLogsBefore");async function P8(e,t){let r=new MU;try{let n=e.dbis[N_.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[N_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];O8.isEmpty(c)||(s=e.dbis[N_.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[N_.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>w8)break}return await s,r}catch(n){throw n}}a(P8,"deleteTransactions")});var HU=N((gbe,BU)=>{"use strict";var yR=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};BU.exports=yR});var kU=N((ybe,xU)=>{"use strict";var L8=$s(),M8=R_(),Rbe=HU(),Ri=M(),U8=re(),bR=ht(),v8=Qi(),B8=A_(),H8=m_(),{getSchemaPath:x8}=Tt();xU.exports=k8;async function k8(e,t=!0){let r;e.schema===Ri.SYSTEM_SCHEMA_NAME?r=v8[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await G8(e),s=x8(e.schema,e.table),i=await bR.openEnvironment(s,e.table);return t===!0&&await F8(e,i,r.hash_attribute),bR.dropDBI(i,e.attribute),n}a(k8,"lmdbDropAttribute");async function F8(e,t,r){let n=bR.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(o,u,l)}await s}a(F8,"removeAttributeFromAllObjects");async function G8(e){let t=new L8(Ri.SYSTEM_SCHEMA_NAME,Ri.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await B8(t)).filter(o=>o[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(U8.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[Ri.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new M8(Ri.SYSTEM_SCHEMA_NAME,Ri.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return H8(i)}a(G8,"dropAttributeFromSystem")});var KU=N((Nbe,VU)=>{"use strict";var OR=ht(),jl=Ht(),Obe=sn(),NR=M(),FU=re(),{getTransactionAuditStorePath:q8}=Tt(),$8=Kl(),rp=ql(),V8=j();VU.exports=K8;async function K8(e){let t=q8(e.schema,e.table),r=await OR.openEnvironment(t,e.table,!0),n=OR.listDBIs(r);OR.initializeDBIs(r,jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case NR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return GU(r,e.search_values);case NR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,W8(r,e.search_values,s);case NR.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Y8(r,e.search_values);default:return GU(r)}}a(K8,"readAuditLog");function GU(e,t=[0,Date.now()]){FU.isEmpty(t[0])&&(t[0]=0),FU.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let s of r.getKeys({start:t[1]}))if(s!==t[1]){n=s;break}return r.getRange({start:t[0],end:n}).map(({value:s})=>Object.assign(new rp,s))}a(GU,"searchTransactionsByTimestamp");function Y8(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[jl.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,$U(e,i))}return Object.fromEntries(r)}a(Y8,"searchTransactionsByUsername");function W8(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=$8.equals(e,jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,jl.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:_}of d){let E=Number(_);n.has(E)?n.get(E).push(u.toString()):n.set(E,[u.toString()])}}let s=Array.from(n.keys()),i=$U(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);qU(l,"records",r,d,o),qU(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(W8,"searchTransactionsByHashValues");function qU(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let _=new rp(e.operation,e.user_name,i,void 0);_[t]=[c],u.push(_)}}else{let u=new rp(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(qU,"loopRecords");function $U(e,t){let r=[];try{let n=e.dbis[jl.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new rp,i);r.push(o)}}catch(i){V8.warn(i)}return r}catch(n){throw n}}a($U,"batchSearchTransactions")});var WU=N((Dbe,YU)=>{"use strict";var{getSchemaPath:wbe}=Tt(),Cbe=ht(),{database:j8}=(De(),oe(lt));YU.exports={writeTransaction:z8};async function z8(e,t,r){return j8({database:e,table:t}).transaction(r)}a(z8,"writeTransaction")});var JU=N((Lbe,QU)=>{"use strict";var{getSchemaPath:jU}=Tt(),zU=ht();QU.exports={flush:Q8,resetReadTxn:J8};async function Q8(e,t){return(await zU.openEnvironment(jU(e,t),t.toString())).flushed}a(Q8,"flush");async function J8(e,t){try{(await zU.openEnvironment(jU(e,t),t.toString())).resetReadTxn()}catch{}}a(J8,"resetReadTxn")});var tv=N((Ube,ev)=>{"use strict";var{Readable:X8}=require("stream"),{getDatabases:Z8}=(De(),oe(lt)),{readSync:e9,openSync:t9,createReadStream:XU}=require("fs"),{open:r9}=require("lmdb"),ZU=e_(),n9=t_(),{AUDIT_STORE_OPTIONS:s9}=(ji(),oe(rv)),{INTERNAL_DBIS_NAME:i9,AUDIT_STORE_NAME:o9}=Ht();ev.exports=c9;var IR=32768,a9=100;async function c9(e){let t=e.database||e.schema||"data",r=Z8()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,_=r9({noSync:!0,maxDbs:n9.MAX_DBS}),E,f=_.openDB(i9,new ZU(!1)),h=d.useReadTransaction(),T=0,m=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let I=_.openDB(S,y),U=d.openDB(S,y);for(let{key:H,version:X,value:Y}of U.getRange({start:null,transaction:h,versions:U.useVersions}))E=I.put(H,Y,X),T++%a9===0&&(await new Promise(V=>setTimeout(V,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(I=>S.startsWith?.(I+"/"))){f.put(S,y);let[,I]=S.split("/"),U=!I,H=new ZU(!U,U);await m(S,H)}e.include_audit&&await m(o9,{...s9}),await E;let g=XU(_.path);return g.headers=l(),g.on("close",()=>{h.done(),_.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=t9(o.path);return o.transaction(()=>{let u=Buffer.alloc(IR);e9(c,u,0,IR),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let _=XU(null,{fd:c,start:IR}),E=new X8.from(async function*(){yield u;for await(let f of _)d.openTimer&&(d.openTimer=0),yield f;d.done()}());return E.headers=l(),E});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(c9,"getBackup")});var iv=N((Bbe,sv)=>{"use strict";var l9=j(),{handleHDBError:u9}=_e(),d9=RD(),_9=Ih(),f9=QA(),E9=mM(),h9=m_(),p9=nR(),m9=$M(),S9=XM(),T9=A_(),g9=oU(),A9=mU(),R9=RU(),y9=bU(),b9=wU(),O9=vU(),N9=_R(),I9=kU(),w9=KU(),C9=WU(),nv=JU(),D9=tv(),wR=class extends d9{static{a(this,"LMDBBridge")}async searchByConditions(t){return g9(t)}async getDataByHash(t){return await p9(t)}async searchByHash(t){return await m9(t)}async getDataByValue(t,r){return await S9(t,r)}async searchByValue(t){return await T9(t)}async createSchema(t){return await E9(t)}async dropSchema(t){return await A9(t)}async createTable(t,r){return await R9(t,r)}async dropTable(t){return await N9(t)}async createAttribute(t){return await _9(t)}async createRecords(t){return await f9(t)}async updateRecords(t){return await y9(t)}async upsertRecords(t){try{return await b9(t)}catch(r){throw u9(r,null,null,l9.ERR,r)}}async deleteRecords(t){return await h9(t)}async dropAttribute(t){return await I9(t)}async deleteAuditLogsBefore(t){return await O9(t)}async readAuditLog(t){return await w9(t)}writeTransaction(t,r,n){return C9.writeTransaction(t,r,n)}flush(t,r){return nv.flush(t,r)}resetReadTxn(t,r){return nv.resetReadTxn(t,r)}getBackup(t){return D9(t)}};sv.exports=wR});function fv(e){DR=e}function U9(){M9=setInterval(function(){for(let e of CR)if(e.stale){let t=e[Fe]?.url;lv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},L9).unref()}var PR,cv,lv,uv,dv,_v,ov,CR,P9,I_,av,DR,hc,np,L9,M9,sp=Ie(()=>{PR=L(sn()),cv=L(_e()),lv=L(j());Vs();uv=L(se()),dv=L(M()),_v=L(re()),ov=100,CR=new Set,P9=(0,_v.convertToMS)(uv.get(dv.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3;a(fv,"replicationConfirmation");hc=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;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===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),CR.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(CR.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(I_&&!this.overloadChecked&&performance.now()-av>P9)throw new cv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){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,PR.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let _=this.validated;this.validated=this.writes.length;for(let f=_;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=_;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let T=_;T<this.validated;T++){let m=this.writes[T];if(!m)continue;let g=m[f===0?"before":"beforeIntermediate"];if(g){let S=g();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(_){throw this.abort(),_}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(_=>_);let c=a(_=>{_.commit(r,_.entry,n)},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){n>0&&(_.entry=_.store.getEntry(_.key));let E=_.store.ifVersion(_.key,_.entry?.version??null,l);s=s||E}else l();else for(let E of this.writes)c(E)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<ov>>n?l():s=this.writes[0].store.transaction(()=>{for(let _ of this.writes)_.entry=_.store.getEntry(_.key),c(_);return!0})),s)return I_||(I_=s,av=performance.now(),I_.then(()=>{I_=null})),s.then(_=>{if(_){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let E=this.writes[0].store.rootStore.databaseName,f=this.writes[this.writes.length-1];DR&&f&&i.push(DR(E,f.store.getEntry(f.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+ov/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let _=this.next?.commit(t);if(_?.then)return _?.then(E=>({txnTime:r,next:E}));d.next=_}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},np=class extends hc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,PR.getNextMonotonicTime)())}getReadTxn(){}},L9=3e4;a(U9,"startMonitoringTxns");U9()});function Dt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&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 hc;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n[Fe]=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({letItLinger:r?.letItLinger});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var Ev,pc=Ie(()=>{Ev=L(_i());Vs();sp();a(Dt,"transaction");(0,Ev._assignPackageExport)("transaction",Dt);Dt.commit=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Dt.abort=function(e){let t=(e[Fe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var Rv={};je(Rv,{ResourceBridge:()=>UR});function vR({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function pv(e,t){let r=yi(e),n=vR(e,r);if(!r)throw new Ks.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},o;Dt(i,()=>new Promise(u=>o=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&op(d)}catch(_){d={message:_.toString()}}return t?{value:{key:u,value:d}}:{value:d}}else return o(),{done:!0}},return(u){return o(),{value:u,done:!0}},throw(u){return o(),{done:!0}}}}}}function yi(e){let t=e.database||e.schema||B9,r=ut()[t];if(!r)throw(0,Ks.handleHDBError)(new Error,v9.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function mv(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*Sv(e,t,r,n){let s,i=0;for await(let o of e.getHistory(t,r)){let c=o.operation??o.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=o;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:o.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var Tv,ip,Ks,gv,Ys,LR,MR,Av,v9,B9,H9,x9,hv,UR,yv=Ie(()=>{"use strict";Tv=L(iv()),ip=L(Yl()),Ks=L(_e());De();gv=L(a_()),Ys=L(M()),LR=L(eo()),MR=L(qs()),Av=L(re());pc();ap();({HDB_ERROR_MSGS:v9}=Ks.hdb_errors),B9="data",H9=1e4,x9=10,UR=class extends Tv.default{static{a(this,"ResourceBridge")}constructor(t){super(t),hv=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,ip.default)(t,"conditions");if(r)throw(0,Ks.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=yi(t);if(!n)throw new Ks.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:vR(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Ks.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await yi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=yi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(o,l,()=>r.primaryStore.put(o,c,l)).then(u=>{if(!u){let{value:d,version:_}=r.primaryStore.getEntry(o);return i(o,d,_)}})),"deleteRecord");for(let{key:o,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){yi(t).dropTable()}createSchema(t){return zl({database:t.schema,table:null}),LR.signalSchemaChange(new MR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await BR(t.schema),LR.signalSchemaChange(new MR.SchemaEventMsg(process.pid,Ys.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,hv.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,gv.default)(t),s,i=ut()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(o.replicateTo=t.replicateTo),t.replicatedConfirmation&&(o.replicatedConfirmation=t.replicatedConfirmation),Dt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(E=>E.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let _=d[i.primaryKey],E=_!=null&&await i.get(_,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){u.push(d[i.primaryKey]);continue}E&&(E=op(E));for(let f in d)if(Object.prototype.hasOwnProperty.call(d,f)){let h=d[f];if(typeof h=="function")try{let T=h([[E]]);Array.isArray(T)&&(h=T[0].func_val,d[f]=h)}catch(T){throw T.message+="Trying to set key "+f+" on object"+JSON.stringify(d),T}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(d,f)||(d[f]=E[f]);await(_==null?i.create(d,o):i.put(d,o)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=ut()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),Dt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),o=[],c=[];for(let l of i)await r.delete(l,n)?o.push(l):c.push(l);return mv(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ut()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ks.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let n=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:Ys.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,l=[],u=a(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),o.push(...d.skipped_hashes),await(0,Av.async_set_timeout)(x9),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%H9===0&&await u();return l.length>0&&await u(),s?mv(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,ip.default)(t,"hashes");if(r)throw r;return pv(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of pv(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Ys.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,ip.default)(t,"value");if(n)throw n;let s=yi(t);if(!s)throw new Ks.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===Ys.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:vR(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=yi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){yi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return yi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=yi(t),n={};switch(t.search_type){case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.operation??o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case Ys.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of Sv(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return Sv(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(vR,"getSelect");a(pv,"getRecords");a(yi,"getTable");a(mv,"createDeleteResponse");a(Sv,"groupRecordsInHistory")});var Un=N((Jbe,bv)=>{"use strict";var{ResourceBridge:k9}=(yv(),oe(Rv)),F9=se();F9.initSync();var cp;function G9(){return cp||(cp=new k9,cp)}a(G9,"getBridge");bv.exports=G9()});var wv=N((Zbe,Iv)=>{"use strict";var Ov=require("lodash"),w_=require("mathjs"),q9=require("jsonata"),Nv=re();Iv.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?Ov.uniqWith(e,Ov.isEqual):e,"distinct_array"),searchJSON:$9,mad:C_.bind(null,w_.mad),mean:C_.bind(null,w_.mean),mode:C_.bind(null,w_.mode),prod:C_.bind(null,w_.prod),median:C_.bind(null,w_.median)};function C_(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(C_,"aggregateFunction");function $9(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(Nv.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Nv.isEmpty(this.__ala__.res[r])){let n=q9(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a($9,"searchJSON")});var Dv=N((tOe,Cv)=>{"use strict";var nr=require("moment"),HR="YYYY-MM-DDTHH:mm:ss.SSSZZ";nr.suppressDeprecationWarnings=!0;Cv.exports={current_date:a(()=>nr().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>nr().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return nr(e).utc().format("YYYY");case"month":return nr(e).utc().format("MM");case"day":return nr(e).utc().format("DD");case"hour":return nr(e).utc().format("HH");case"minute":return nr(e).utc().format("mm");case"second":return nr(e).utc().format("ss");case"millisecond":return nr(e).utc().format("SSS");default:break}},"extract"),date:a(e=>nr(e).utc().format(HR),"date"),date_format:a((e,t)=>nr(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>nr(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>nr(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=nr(e).utc(),s=nr(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>nr().utc().valueOf(),"now"),get_server_time:a(()=>nr().format(HR),"get_server_time"),offset_utc:a((e,t)=>nr(e).utc().utcOffset(t).format(HR),"offset_utc")}});var Uv=N((nOe,Mv)=>{"use strict";var V9=require("@turf/area"),K9=require("@turf/length"),Y9=require("@turf/circle"),W9=require("@turf/difference"),j9=require("@turf/distance"),z9=require("@turf/boolean-contains"),Q9=require("@turf/boolean-equal"),J9=require("@turf/boolean-disjoint"),X9=require("@turf/helpers"),Pv=M(),$e=re(),no=j();Mv.exports={geoArea:Z9,geoLength:e7,geoCircle:t7,geoDifference:r7,geoDistance:Lv,geoNear:n7,geoContains:s7,geoEqual:i7,geoCrosses:o7,geoConvert:a7};function Z9(e){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return V9.default(e)}catch(t){return no.trace(t,e),NaN}}a(Z9,"geoArea");function e7(e,t){if($e.isEmpty(e))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return K9.default(e,{units:t||"kilometers"})}catch(r){return no.trace(r,e),NaN}}a(e7,"geoLength");function t7(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e));try{return Y9.default(e,t,{units:r||"kilometers"})}catch(n){return no.trace(n,e,t),NaN}}a(t7,"geoCircle");function r7(e,t){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return W9(e,t)}catch(r){return no.trace(r,e,t),NaN}}a(r7,"geoDifference");function Lv(e,t,r){if($e.isEmpty(e))return NaN;if($e.isEmpty(t))return NaN;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return j9.default(e,t,{units:r||"kilometers"})}catch(n){return no.trace(n,e,t),NaN}}a(Lv,"geoDistance");function n7(e,t,r,n){if($e.isEmpty(e)||$e.isEmpty(t))return!1;if($e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return Lv(e,t,n)<=r}catch(s){return no.trace(s,e,t),!1}}a(n7,"geoNear");function s7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return z9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(s7,"geoContains");function i7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return Q9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(i7,"geoEqual");function o7(e,t){if($e.isEmpty(e)||$e.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=$e.autoCastJSON(e)),typeof t=="string"&&(t=$e.autoCastJSON(t));try{return!J9.default(e,t)}catch(r){return no.trace(r,e,t),!1}}a(o7,"geoCrosses");function a7(e,t,r){if($e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if($e.isEmpty(t))throw new Error("geo_type is required");if($e.isEmpty(Pv.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Pv.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=$e.autoCastJSON(e)),X9[t](e,r)}a(a7,"geoConvert")});var lp=N((iOe,vv)=>{var mc=wv(),Gn=Dv(),bi=Uv();vv.exports=e=>{e.aggr.mad=e.aggr.MAD=mc.mad,e.aggr.mean=e.aggr.MEAN=mc.mean,e.aggr.mode=e.aggr.MODE=mc.mode,e.aggr.prod=e.aggr.PROD=mc.prod,e.aggr.median=e.aggr.MEDIAN=mc.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=mc.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=mc.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gn.current_time,e.fn.extract=e.fn.EXTRACT=Gn.extract,e.fn.date=e.fn.DATE=Gn.date,e.fn.date_format=e.fn.DATE_FORMAT=Gn.date_format,e.fn.date_add=e.fn.DATE_ADD=Gn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gn.date_diff,e.fn.now=e.fn.NOW=Gn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gn.get_server_time,e.fn.getdate=e.fn.GETDATE=Gn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=bi.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=bi.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=bi.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=bi.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=bi.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=bi.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=bi.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=bi.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=bi.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=bi.geoNear}});var kv=N((oOe,xv)=>{"use strict";var D_=require("lodash"),_n=require("alasql");_n.options.cache=!1;var c7=lp(),Bv=require("clone"),up=require("recursive-iterator"),Ue=j(),et=re(),Ql=Un(),l7=M(),{hdb_errors:u7}=_e(),{getDatabases:Hv}=(De(),oe(lt)),d7="IS NULL",Ws="There was a problem performing this search. Please check the logs and try again.";c7(_n);var xR=class{static{a(this,"SQLSearch")}constructor(t,r){if(et.isEmpty(t))throw Ue.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),et.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!et.isEmptyOrZeroLength(n))return Ue.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ue.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ue.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ue.error(n),new Error(Ws)}if(Object.keys(this.data).length===0)return Ue.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ue.error("Error thrown from processJoins in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ue.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ue.error(n),new Error(Ws)}try{return t=await this._finalSQL(),t}catch(n){throw Ue.error("Error thrown from finalSQL in SQLSearch class method search."),Ue.error(n),new Error(Ws)}}_getColumns(){let t=new up(this.statement);for(let{node:r,path:n}of t)r&&r.columnid&&(this.columns[n[0]]||(this.columns[n[0]]=[]),this.columns[n[0]].push(Bv(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=D_.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=Hv()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(et.isEmpty(this.statement.where)){Ue.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new up(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!et.isEmpty(r)&&r.right)if(et.isNotEmptyAndHasValue(r.right.value)){let n=et.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new _n.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=et.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new _n.yy.LogicValue({value:i}):n instanceof _n.yy.StringValue&&et.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new _n.yy.NumValue({value:i}))});if(t){Ue.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new up(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!et.isEmpty(l7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(et.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(et.isEmptyOrZeroLength(r.left.columnid)||et.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(et.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!et.isEmpty(r.right.value)||!et.isEmpty(r.left.value)?n.add(et.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from)&&et.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&D_.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(et.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);et.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(et.isEmptyOrZeroLength(this.all_table_attributes)&&!et.isEmptyOrZeroLength(this.columns.columns))return t;if(et.isEmptyOrZeroLength(this.all_table_attributes)&&et.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await _n.promise(r)}catch(r){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ue.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let n=this._findColumn(r);n&&this.fetch_attributes.push(Bv(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(et.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(d7)>-1&&this.tables.forEach(s=>{let i={columnid:Hv()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=D_.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!et.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await Ql.getDataByHash(c);for(let _ of c.hash_values)d.get(_)&&!this.data[i].__merged_data[_]&&(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let _={...c};_.search_value=d;let E=await Ql.getDataByValue(_);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ue.error(d),new Error(Ws)}else if(!et.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!et.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let _=0,E=d.length;_<E;_++){let f=d[_];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Ql.getDataByValue(c,f.operation);if(l)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...n[i]],this._setMergedHashAttribute(i,T));else for(let[T,m]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]):(this.data[i].__merged_data[T]=[...n[i]],this._updateMergedAttribute(i,T,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,T))}}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ue.error(d),new Error(Ws)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await Ql.getDataByValue(c);if(l)for(let[_]of d)this.data[i].__merged_data[_]||(this.data[i].__merged_data[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,E]of d)this.data[i].__merged_data[_]?this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]):(this.data[i].__merged_data[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,_))}catch(d){throw Ue.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ue.error(d),new Error(Ws)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof _n.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new _n.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new _n.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let s=t.is_func?new _n.yy.FuncValue:new _n.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let d="",_="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",_=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${_}`,h=this._convertColumnsToIndexes(f,s);E=await _n.promise(h,t),t=null}catch(f){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ue.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(m=>{T[m.key]!==null&&T[m.key]!==void 0&&m.keys.add(T[m.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=D_.difference(h,[...f.keys].map(m=>m.toString()));for(let m=0,g=T.length;m<g;m++){let S=T[m];delete this.data[`${f.schema}_${f.table}`].__merged_data[S]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new up(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=D_.uniqBy(n,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(n)}catch(i){throw Ue.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ue.error(i),new Error(Ws)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await Ql.getDataByHash(c),u=s.columns.length;for(let d=0,_=o.length;d<_;d++){let E=o[d],f=l.get(E);for(let h=0;h<u;h++){let T=s.columns[h],m=f[T]===void 0?null:f[T];this.data[n].__merged_data[E].push(m)}}}}catch(r){throw Ue.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ue.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,l=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();Ue.trace(`Final SQL: ${s}`),n=await _n.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ue.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ue.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ue.error(s),new Error("There was a problem running the generated sql.")}return n}_translateUndefinedValues(t){try{let r=[];for(let n of t){let s=Object.create(null);Object.keys(n).forEach(i=>{n[i]===void 0?s[i]=null:s[i]=n[i]}),r.push(s)}return r}catch(r){return Ue.error(u7.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ue.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=s[i],u=new RegExp(`${l}.\`${o}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let l=new RegExp(`\`${o}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await Ql.getDataByValue(i);for(let[c,l]of o)this.data[s].__merged_data[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__merged_data[c]={...r[s]}),this.data[s].__merged_data[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ue.error("There was an error when processing this SQL operation. Check your logs"),Ue.error(o),new Error(Ws)}}return Object.values(Object.values(this.data)[0].__merged_data)}};xv.exports=xR});var $r=N((cOe,Fv)=>{"use strict";var _7=gD();Fv.exports={searchByConditions:E7,searchByHash:h7,searchByValue:p7,search:m7};var kR=Un(),{transformReq:FR}=re(),f7=kv();async function E7(e){return FR(e),kR.searchByConditions(e)}a(E7,"searchByConditions");async function h7(e){FR(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of kR.searchByHash(e))r&&t.push(r);return t}a(h7,"searchByHash");async function p7(e){FR(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of kR.searchByValue(e))t.push(r);return t}a(p7,"searchByValue");function m7(e,t){try{let r=new _7(e);r.validate(),new f7(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(m7,"search")});var dp=N((uOe,Gv)=>{"use strict";var S7=Un();Gv.exports={writeTransaction:T7};function T7(e,t,r){return S7.writeTransaction(e,t,r)}a(T7,"writeTransaction")});var Kv=N((fOe,Vv)=>{"use strict";var g7=$r(),A7=Fs(),qv=j(),R7=cn(),_Oe=dp(),y7=require("clone"),qR=require("alasql"),b7=lp(),$v=require("util"),O7=$v.promisify(A7.getTableSchema),N7=$v.promisify(g7.search),I7=M(),GR=re();b7(qR);Vv.exports={update:C7};var w7="There was a problem performing this update. Please check the logs and try again.";async function C7({statement:e,hdb_user:t}){let r=await O7(e.table.databaseid,e.table.tableid),n=D7(e.columns);GR.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=y7(s),c=GR.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=qR.parse(l).statements[0],d=await N7(u),_=P7(n,d);return L7(o,_,t)}a(C7,"update");function D7(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=qR.compile(`SELECT ${r.expression.toString()} AS [${I7.FUNC_VAL}] FROM ?`)}),t}catch(t){throw qv.error(t),new Error(w7)}}a(D7,"createUpdateRecord");function P7(e,t){return GR.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(P7,"buildUpdateRecords");async function L7(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await R7.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){qv.error(`Error delete new_attributes from update response: ${i}`)}return s}a(L7,"updateRecords")});var Wv=N((mOe,Yv)=>{var M7=require("alasql"),U7=$r(),v7=j(),B7=Un(),VR=require("util"),$R=re(),H7=M(),x7=Fs(),hOe=dp(),pOe=cn(),k7="record",F7="successfully deleted",G7=VR.callbackify(K7),q7=VR.promisify(U7.search),$7=VR.promisify(x7.getTableSchema);Yv.exports={convertDelete:G7};function V7(e){return`${e.deleted_hashes.length} ${k7}${e.deleted_hashes.length===1?"":"s"} ${F7}`}a(V7,"generateReturnMessage");async function K7({statement:e,hdb_user:t}){let r=await $7(e.table.databaseid,e.table.tableid);$R.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=$R.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=M7.parse(o).statements[0],l={operation:H7.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await q7(c);let u=await B7.deleteRecords(l);return $R.isEmptyOrZeroLength(u.message)&&(u.message=V7(u)),delete u.txn_time,u}catch(u){throw v7.error(u),u.hdb_code?u.message:u}}a(K7,"convertDelete")});var Xv=N((TOe,Jv)=>{"use strict";var Y7=Zi(),{hdb_errors:jv}=_e(),{getDatabases:zv}=(De(),oe(lt));Jv.exports={checkSchemaExists:Qv,checkSchemaTableExists:W7,schema_describe:Y7};async function Qv(e){if(!zv()[e])return jv.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Qv,"checkSchemaExists");async function W7(e,t){let r=await Qv(e);if(r)return r;if(!zv()[e][t])return jv.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(W7,"checkSchemaTableExists")});var Sc=N(fp=>{var _p=j();for(let e of["trace","debug","info","warn","error","fatal","notify"])_p.logsAtLevel(e)&&(fp[e]=_p[e]);fp.loggerWithTag=e=>_p.loggerWithTag(e,!0);fp.setLogLevel=_p.setLogLevel});function KR(e){let t=e.get(Ep),r=t?(0,Jl.unpack)(t):null;r||(r={remoteNameToId:{}});let n=ot(),s=!1;r.nodeName=ot();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:L_(e)??1,nodes:[]})})}i[n]=0,e.putSync(Ep,(0,Jl.pack)(r))}return r}function P_(e){return KR(e).remoteNameToId}function e0(e,t,r){let n=KR(r),s=n.remoteNameToId,i=new Map,o=!1;for(let c in t){let l=t[c],u=s[c];if(u==null){let d=0;for(let _ in s){let E=s[_];E>d&&(d=E)}u=d+1,s[c]=u,o=!0}i.set(l,u)}return o&&r.putSync(Ep,(0,Jl.pack)(n)),i}function hp(e,t){let r=KR(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(Ep,(0,Jl.pack)(r))}return Zv.info?.("The remote node name map",e,n,s),s}var Zv,Jl,Ep,YR=Ie(()=>{Zv=L(Sc());us();Jl=require("msgpackr"),Ep=Symbol.for("remote-ids");a(KR,"getIdMappingRecord");a(P_,"exportIdMapping");a(e0,"remoteToLocalNodeId");a(hp,"getIdOfRemoteNode")});var Xo,WR=Ie(()=>{Xo=class{constructor(t){this.error=t}static{a(this,"ErrorResource")}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var n0={};je(n0,{Resources:()=>pp,keyArrayToString:()=>Xl,resetResources:()=>j7,resources:()=>Oi});function j7(){return Oi=new pp}function Xl(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var t0,r0,pp,Oi,Zl=Ie(()=>{pc();WR();t0=L(j()),r0=L(_e()),pp=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new r0.ServerError(`Conflicting paths for ${t}`);t0.default.error(c),i.Resource=new Xo(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),l=this.get(c);if(!l&&c.indexOf(".")>-1){let u=c.split(".");l=this.get(u[0])}if(l&&(!r||l.exportTypes?.[r]!==!1)){if(l.relativeURL=t.slice(n),!l.hasSubPaths)return l;s=l}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s&&(!r||s.exportTypes?.[r]!==!1)?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(!r||s.exportTypes?.[r]!==!1)&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return Dt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(j7,"resetResources");a(Xl,"keyArrayToString")});function QR(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=i0,z7(e.primaryStore,e.auditStore)):(c=s0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{o0(s0[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[o];u||(u=l[o]=new Map,u.envs=l,u.tableId=o,u.store=e.primaryStore),t=Xl(t);let d=new zR(r);d.startTime=n;let _=u.get(t);return _?_.push(d):(u.set(t,_=[d]),_.tables=u,_.key=t),d.subscriptions=_,d}function o0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),a0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=xt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=Xl(c),u=0;do{let d=o.get(l);if(d){for(let E of d)if(!(u>0&&!(E.includeDescendants&&!(E.onlyChildren&&u>1)))){if(E.startTime>=n){(0,jR.info)("omitting",c,E.startTime,n);continue}try{let f;E.supportsTransactions&&E.txnInProgress!==i.version&&(f=!0,E.txnInProgress||(r?r.push(E):r=[E]),E.txnInProgress=i.version),E.listener(c,i,n,f)}catch(f){console.error(f),(0,jR.info)(f)}}}if(l==null)break;let _=l.lastIndexOf?.("/",l.length-2);_!==l.length-1&&u++,_>-1?l=l.slice(0,_+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function z7(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let l=i0[s];if(!l)return;let u=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{o0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function a0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function c0(e){return e.nextTransaction||(QR({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),a0(e)),e.nextTransaction}var jR,s0,i0,zR,JR=Ie(()=>{jR=L(j());Cl();Zl();ji();s0=Object.create(null),i0=Object.create(null);a(QR,"addSubscription");zR=class extends Pn{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(o0,"notifyFromTransactionData");a(z7,"listenToCommits");a(a0,"nextTransaction");a(c0,"whenNextTransaction")});var E0={};je(E0,{commits_awaiting_replication:()=>ru,getHDBNodeTable:()=>pr,iterateRoutes:()=>U_,shouldReplicateToNode:()=>M_,subscribeToNodeUpdates:()=>nu});function pr(){return l0||(l0=Et({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:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function nu(e){pr().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;f0.debug?.("adding node",n,"on node",ot()," on process",process.pid),server.nodes=server.nodes.filter(s=>s.name!==n),r.type==="put"&&n!==ot()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r)),(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function M_(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&pr().primaryStore.get(ot())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Q7(){nu(e=>{Zo({},(t,r)=>{let n=e.name,s=u0.get(n);if(s||u0.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=new Float64Array(i.getUserSharedBuffer(["replicated",r,n],new ArrayBuffer(8),{callback:a(()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of ru.get(r)||[])u>l&&u<=c&&d();o.lastTime=c},"callback")}));o.lastTime=0,s.set(r,o)}})})}function*U_(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=eu.default.get(tu.CONFIG_PARAMS.REPLICATION_SECUREPORT)??(!eu.default.get(tu.CONFIG_PARAMS.REPLICATION_PORT)&&eu.default.get(tu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||eu.default.get(tu.CONFIG_PARAMS.REPLICATION_PORT)||eu.default.get(tu.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){d0.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,start_time:t.startTime}}}var d0,_0,eu,tu,f0,l0,u0,ru,su=Ie(()=>{De();us();sp();d0=require("worker_threads"),_0=L(_e()),eu=L(se()),tu=L(M()),f0=L(Sc());server.nodes=[];a(pr,"getHDBNodeTable");a(nu,"subscribeToNodeUpdates");a(M_,"shouldReplicateToNode");u0=new Map;fv((e,t,r)=>{if(r>server.nodes.length)throw new _0.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);ru||(ru=new Map,Q7());let n=ru.get(e);return n||(n=[],ru.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(Q7,"startSubscriptionToReplications");a(U_,"iterateRoutes")});var T0={};je(T0,{connectedToNode:()=>Tc,disconnectedFromNode:()=>au,ensureNode:()=>io,requestClusterStatus:()=>S0,startOnMainThread:()=>ZR});async function ZR(e){let t=0,r=ut();for(let i of Object.getOwnPropertyNames(r)){let o=r[i];for(let c in o){let l=o[c];if(l.auditStore){mp.set(i,L_(l.auditStore));break}}}Ni.whenThreadsStarted.then(async()=>{let i=[];for await(let o of r.system.hdb_nodes.search([]))i.push(o);for(let o of U_(e))try{let c=!o.subscriptions;if(c){let u=ot();pr().primaryStore.get(u)===void 0&&await io(u,{name:u,url:e.url??ea(),replicates:!0})}let l=o.trusted!==!1;if(c&&o.replicates==null&&(o.replicates=!0),i.find(u=>u.url===o.url))continue;s(o)}catch(c){console.error(c)}nu(s)});let n;function s(i,o=i?.name){let c=ot()&&o===ot()||ea()&&i?.url===ea();if(c){let _=!!i?.replicates;if(n!==void 0&&n!==_)for(let E of pr().search([]))E.replicates&&E.name!==o&&s(E,E.name);n=_}if(_t.trace("Setting up node replication for",i),!i){for(let[_,E]of so){let f;for(let[h,{worker:T,nodes:m}]of E){let g=m[0];if(g&&g.name==o){f=!0;for(let[S,{worker:y}]of E)E.delete(S),_t.warn("Node was deleted, unsubscribing from node",o,S,_),y?.postMessage({type:"unsubscribe-from-node",node:o,database:S,url:_});break}}if(f){so.get(_).iterator.remove(),so.delete(_);return}}return}if(c)return;if(!i.url){_t.info(`Node ${i.name} is missing url`);return}let l=so.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(_t.info(`Added node ${i.name} at ${i.url} for process ${ot()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[_,E]of iu)if(i.url===E.url){iu.delete(_);break}iu.set(i.name,i)}let u=ut();if(l||(l=new Map,so.set(i.url,l)),l.iterator=Zo(e,(_,E,f)=>{f?d(E,!0):d(E,!1)}),i.subscriptions)for(let _ of i.subscriptions){let E=_.database||_.schema;u[E]||(_t.warn(`Database ${E} not found for node ${i.name}, making a subscription anyway`),d(E,!1))}function d(_,E){_t.trace("Setting up replication for database",_,"on node",i.name);let f=l.get(_),h,T=[{replicateByDefault:E,...i}];mp.has(_)&&(T.push({replicateByDefault:E,name:ot(),start_time:mp.get(_),end_time:Date.now(),replicates:!0}),mp.delete(_));let m=M_(i,_),g=Ni.workers.filter(S=>S.name==="http");if(f?(h=f.worker,f.nodes=T):m&&(t=t%g.length,h=g[t++],l.set(_,{worker:h,nodes:T,url:i.url}),h?.on("exit",()=>{l.get(_)?.worker===h&&(l.delete(_),d(_,E))})),m)setTimeout(()=>{let S={type:"subscribe-to-node",database:_,nodes:T};h?h.postMessage(S):ou(S)},J7);else{_t.info("Node no longer should be used, unsubscribing from node",i.replicates,!!u[_],pr().primaryStore.get(ot())?.replicates),pr().primaryStore.get(ot())?.replicates||(n=!1);let S={type:"unsubscribe-from-node",database:_,url:i.url,name:i.name};h?h.postMessage(S):Tp(S)}}a(d,"onDatabase")}a(s,"onNodeUpdate"),au=a(function(i){try{_t.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let o=Array.from(iu.keys()),c=o.sort(),l=c.indexOf(i.name||js(i.url));if(l===-1){_t.warn("Disconnected node not found in node map",i.name,o);return}let u=so.get(i.url),d=u?.get(i.database);if(!d){_t.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let _=d.nodes[0];if(!(_.replicates===!0||_.replicates?.sends||_.subscriptions?.length))return;let E=(l+1)%c.length;for(;l!==E;){let f=c[E],h=iu.get(f);u=so.get(h.url);let T=u?.get(i.database);if(!T){E=(E+1)%c.length;continue}let{worker:m,nodes:g}=T,S=!1;for(let y of d.nodes){if(g.some(I=>I.name===y.name)){_t.info(`Disconnected node is already failing over to ${f} for ${i.database}`);continue}g.push(y),S=!0}if(!S){_t.info(`Disconnected node ${i.name} has no nodes to fail over to ${f}`);return}d.redirectingTo=T,_t.info(`Failing over ${i.database} from ${i.name} to ${f}`),m?m.postMessage({type:"subscribe-to-node",database:i.database,nodes:g}):ou({database:i.database,nodes:g});return}_t.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(o){_t.error("Error failing over node",o)}},"disconnectedFromNode"),Tc=a(function(i){let o=so.get(i.url),c=o?.get(i.database);if(!c){_t.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,o);return}if(c.connected=!0,c.latency=i.latency,c.catchingUpFrom=i.lastSendTime,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(_=>_.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):ou({database:i.database,nodes:u}))}},"connectedToNode"),(0,Ni.onMessageByType)("disconnected-from-node",au),(0,Ni.onMessageByType)("connected-to-node",Tc),(0,Ni.onMessageByType)("request-cluster-status",S0)}function S0(e,t){let r=[];for(let[n,s]of iu)try{let i=so.get(s.url);_t.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:_,latency:E,catchingUpFrom:f}]of i)o.push({database:l,connected:d,latency:E,catching_up_from:f?new Date(f).toISOString():"up-to-date",thread_id:u?.threadId,nodes:_.map(h=>h.name)});let c=(0,XR.cloneDeep)(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){_t.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function io(e,t){let r=pr();e=e??js(t.url),t.name=e;try{if(t.ca){let s=new m0.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subject_alt_name:s.subjectAltName,serial_number:s.serialNumber,valid_from:s.validFrom,valid_to:s.validTo}}}catch(s){_t.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(_t.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!h0.default.get(p0.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=(0,XR.cloneDeep)(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}_t.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Ni,Sp,_t,XR,h0,p0,m0,J7,so,au,Tc,iu,mp,v_=Ie(()=>{De();Ni=L(dt());us();Sp=require("worker_threads");su();_t=L(j()),XR=require("lodash"),h0=L(se()),p0=L(M()),m0=require("crypto"),J7=200,so=new Map,iu=new Map,mp=new Map;a(ZR,"startOnMainThread");a(S0,"requestClusterStatus");Sp.parentPort&&(au=a(e=>{Sp.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Tc=a(e=>{Sp.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ni.onMessageByType)("subscribe-to-node",e=>{ou(e)}),(0,Ni.onMessageByType)("unsubscribe-from-node",e=>{Tp(e)}));a(io,"ensureNode")});var gp=N((WOe,g0)=>{"use strict";var X7=M().OPERATIONS_ENUM,ey=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=X7.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};g0.exports=ey});var R0=N((zOe,A0)=>{"use strict";var Z7={OPERATION:"operation",REFRESH:"refresh"},ty=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},ry=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};A0.exports={JWTTokens:ty,TOKEN_TYPE_ENUM:Z7,JWTRSAKeys:ry}});var cu=N((JOe,N0)=>{"use strict";var H_=require("jsonwebtoken"),ny=require("fs-extra"),sy=re(),ds=M(),{handleHDBError:fn,hdb_errors:eee}=_e(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:hn}=eee,B_=j(),y0=Bh(),ay=xn(),tee=cn().update,ree=gp(),nee=eo(),{UserEventMsg:see}=qs(),ta=se();ta.initSync();var iy=require("path"),{JWTTokens:iee,JWTRSAKeys:oee,TOKEN_TYPE_ENUM:Ap}=R0(),aee=ta.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?ta.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",cee=ta.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?ta.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Rp="RS256",oy;N0.exports={createTokens:lee,validateOperationToken:dee,refreshOperationToken:uee,validateRefreshToken:O0,getJWTRSAKeys:x_};async function lee(e){if(sy.isEmpty(e)||typeof e!="object")throw fn(new Error,hn.INVALID_AUTH_OBJECT,En.BAD_REQUEST,void 0,void 0,!0);if(sy.isEmpty(e.username))throw fn(new Error,hn.USERNAME_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);if(sy.isEmpty(e.password))throw fn(new Error,hn.PASSWORD_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await ay.findAndValidateUser(e.username,e.password),!t)throw fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw B_.error(E),fn(new Error,hn.INVALID_CREDENTIALS,En.UNAUTHORIZED,void 0,void 0,!0)}let r=await x_(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await b0(i,r.private_key,r.passphrase),c=await H_.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:cee,algorithm:Rp,subject:Ap.REFRESH}),l=y0.hash(c),u=new ree(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:l}]),d,_;try{d=await tee(u)}catch(E){B_.error(E),_=E}if(_!==void 0||d.skipped_hashes.length>0)throw fn(new Error,hn.REFRESH_TOKEN_SAVE_FAILED,En.INTERNAL_SERVER_ERROR);return nee.signalUserChange(new see(process.pid)),new iee(o,c)}a(lee,"createTokens");async function b0(e,t,r){return await H_.sign(e,{key:t,passphrase:r},{expiresIn:aee,algorithm:Rp,subject:Ap.OPERATION})}a(b0,"signOperationToken");async function x_(){if(oy===void 0)try{let e=iy.join(ta.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PASSPHRASE_NAME),t=iy.join(ta.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=iy.join(ta.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await ny.readFile(e)).toString(),s=(await ny.readFile(t)).toString(),i=(await ny.readFile(r)).toString();oy=new oee(i,s,n)}catch(e){throw B_.error(e),fn(new Error,hn.NO_ENCRYPTION_KEYS,En.INTERNAL_SERVER_ERROR)}return oy}a(x_,"getJWTRSAKeys");async function uee(e){if(!e)throw fn(new Error,hn.INVALID_BODY,En.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw fn(new Error,hn.REFRESH_TOKEN_REQUIRED,En.BAD_REQUEST,void 0,void 0,!0);await O0(e.refresh_token);let t=await x_(),r=await H_.decode(e.refresh_token);return{operation_token:await b0({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(uee,"refreshOperationToken");async function dee(e){try{let t=await x_(),r=await H_.verify(e,t.public_key,{algorithms:Rp,subject:Ap.OPERATION});return await ay.findAndValidateUser(r.username,void 0,!1)}catch(t){throw B_.warn(t),t.name&&t.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}}a(dee,"validateOperationToken");async function O0(e){let t;try{let r=await x_(),n=await H_.verify(e,r.public_key,{algorithms:Rp,subject:Ap.REFRESH});t=await ay.findAndValidateUser(n.username,void 0,!1)}catch(r){throw B_.warn(r),r.name&&r.name==="TokenExpiredError"?fn(new Error,hn.TOKEN_EXPIRED,En.FORBIDDEN):fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED)}if(!y0.validate(t.refresh_token,e))throw fn(new Error,hn.INVALID_TOKEN,En.UNAUTHORIZED);return t}a(O0,"validateRefreshToken")});var Js=N(J0=>{"use strict";var sr=require("path"),pn=require("fs-extra"),lu=require("node-forge"),M0=require("net"),{generateKeyPair:ly,X509Certificate:oo,createPrivateKey:U0}=require("crypto"),_ee=require("util");ly=_ee.promisify(ly);var yt=lu.pki,zs=require("joi"),{v4:v0}=require("uuid"),{validateBySchema:fy}=gt(),pt=j(),_s=se(),Es=M(),{CONFIG_PARAMS:uu}=Es,Qs=bA(),{ClientError:na}=_e(),Ac=require("node:tls"),{relative:B0,join:fee}=require("node:path"),{CERT_PREFERENCE_APP:ZOe,CERTIFICATE_VALUES:I0}=Qs,Eee=Wa(),uy=Ct(),w0=parseInt(process.version.slice(1))<20,{table:hee,getDatabases:pee,databases:cy}=(De(),oe(lt)),{getJWTRSAKeys:C0}=cu();Object.assign(J0,{generateKeys:py,updateConfigCert:V0,createCsr:bee,signCertificate:Oee,setCertTable:du,loadCertificates:G0,reviewSelfSignedCert:Sy,createTLSSelector:W0,listCertificates:z0,addCertificate:Pee,removeCertificate:Mee,createNatsCerts:wee,generateCertsKeys:Iee,getReplicationCert:F_,getReplicationCertAuth:yee,renewSelfSigned:Cee,hostnamesFromCert:Q0,getKey:Uee});var{urlToNodeName:H0,getThisNodeUrl:mee,getThisNodeName:bp,clearThisNodeName:See}=(us(),oe(oa)),{readFileSync:Tee,watchFile:gee,statSync:x0}=require("node:fs"),eNe=se(),{getTicketKeys:Aee,onMessageFromWorkers:Ree}=dt(),ra=j(),{isMainThread:k0}=require("worker_threads"),{TLSSocket:F0,createSecureContext:tNe}=require("node:tls"),Ey=3650,k_=["127.0.0.1","localhost","::1"],hy=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Ree(async e=>{e.type===Es.ITC_EVENT_TYPES.RESTART&&(_s.initSync(!0),await Sy())});var Dr;function ia(){return Dr||(Dr=pee().system.hdb_certificate,Dr||(Dr=hee({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__"}]}))),Dr}a(ia,"getCertTable");async function F_(){let e=W0("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(bp());if(!r)return;let n=new oo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(F_,"getReplicationCert");async function yee(){ia();let e=(await F_()).options.cert,r=new oo(e).issuer.match(/CN=(.*)/)?.[1];return Dr.get(r)}a(yee,"getReplicationCertAuth");var D0,sa=new Map;function G0(){if(D0)return;D0=!0;let e=[{configKey:uu.TLS},{configKey:uu.OPERATIONSAPI_TLS}];ia();let t=sr.dirname(uy.getConfigFilePath()),r;for(let{configKey:n}of e){let s=uy.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&B0(fee(t,"keys"),o);c&&P0(o,l=>{sa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&k0){let d;P0(u,_=>{if(I0.cert===_)return;let E=i.hostname??i.hostnames??i.host??i.hosts;E&&!Array.isArray(E)&&(E=[E]);let f=K0(u),h=new oo(f),T;try{T=Ty(h)}catch(y){pt.error("error extracting common name from certificate",y);return}if(T==null){pt.error("error extracting common name from certificate");return}if(h.checkIssued(new oo(I0.cert)))return;let m=Dr.primaryStore.get(T),g=x0(u).mtimeMs,S=!m||m.is_self_signed?1:m.file_timestamp??m.__updatedtime__;if(m&&g<=S){g<S&&pt.info(`Certificate ${T} at ${u} is older (${new Date(g)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=Dr.put({name:T,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:f,private_key_name:c,is_authority:l,hostnames:E,file_timestamp:g,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(G0,"loadCertificates");function P0(e,t,r){let n,s=a((i,o)=>{try{let c=i.mtimeMs;c&&c!==n&&(o&&k0&&pt.warn(`Reloading ${r}:`,e),n=c,t(K0(e)))}catch(c){pt.error(`Error loading ${r}:`,e,c)}},"loadFile");pn.existsSync(e)?s(x0(e)):pt.error(`${r} file not found:`,e),gee(e,{persistent:!1},s)}a(P0,"loadAndWatch");function dy(){let e=mee();if(e==null){let t=k_[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return H0(e)}a(dy,"getHost");function yp(){let e=bp();if(e==null){let t=k_[0];return pt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(yp,"getCommonName");async function bee(){let e=await F_(),t=yt.certificateFromPem(e.options.cert),r=yt.privateKeyFromPem(e.options.key);pt.info("Creating CSR with cert named:",e.name);let n=yt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:yp()},...hy];pt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:q0()}];return pt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),lu.pki.certificationRequestToPem(n)}a(bee,"createCsr");function q0(){let e=k_.includes(yp())?k_:[...k_,yp()];return e.includes(dy())||e.push(dy()),[{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=>M0.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(q0,"certExtensions");async function Oee(e){let t={},r=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;ia();for await(let d of Dr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(sa.has(d.private_key_name)){n=sa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await pn.exists(sr.join(r,d.private_key_name))){n=pn.readFile(sr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await _y();s=d.ca,n=d.private_key}n=yt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=yt.certificateFromPem(s.certificate);pt.info("Signing CSR with cert named",s.name);let o=yt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return pt.error(d),new Error("Error verifying CSR: "+d.message)}let c=lu.pki.createCertificate();c.serialNumber=Math.random().toString().slice(2,10),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+Ey),pt.info("sign cert setting validity:",c.validity),pt.info("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),pt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;pt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,lu.md.sha256.create()),t.certificate=yt.certificateToPem(c)}else pt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(Oee,"signCertificate");async function Nee(e,t){await du({name:bp(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await du({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:yt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(Nee,"createCertificateTable");async function du(e){let t=new oo(e.certificate);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},ia(),await Dr.patch(e)}a(du,"setCertTable");async function py(){let e=await ly("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{public_key:yt.publicKeyFromPem(e.publicKey),private_key:yt.privateKeyFromPem(e.privateKey)}}a(py,"generateKeys");async function my(e,t,r){let n=yt.createCertificate();if(!t){let o=await F_();t=yt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Ey);let i=[{name:"commonName",value:yp()},...hy];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(q0()),n.sign(e,lu.md.sha256.create()),yt.certificateToPem(n)}a(my,"generateCertificates");async function _y(){let e=await z0(),t;for(let r of e){if(!r.is_authority)continue;let n=await j0(r.private_key_name);if(r.private_key_name&&n&&new oo(r.certificate).checkPrivateKey(U0(n))){pt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;pt.trace("No CA found with matching private key")}a(_y,"getCertAuthority");async function $0(e,t,r=!0){let n=yt.createCertificate();n.publicKey=t,n.serialNumber=Math.random().toString().slice(2,10),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+Ey);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${_s.get(uu.REPLICATION_HOSTNAME)??H0(_s.get(uu.REPLICATION_URL))??v0().split("-")[0]}`},...hy];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,lu.md.sha256.create());let o=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),c=sr.join(o,Qs.PRIVATEKEY_PEM_NAME);return r&&await pn.writeFile(c,yt.privateKeyToPem(e)),n}a($0,"generateCertAuthority");async function Iee(){let{private_key:e,public_key:t}=await py(),r=await $0(e,t),n=await my(e,t,r);await Nee(n,r),V0()}a(Iee,"generateCertsKeys");async function wee(){let e=await my(yt.privateKeyFromPem(Qs.CERTIFICATE_VALUES.key),void 0,yt.certificateFromPem(Qs.CERTIFICATE_VALUES.cert)),t=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),r=sr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME);await pn.exists(r)||await pn.writeFile(r,e);let n=sr.join(t,Qs.NATS_CA_PEM_NAME);await pn.exists(n)||await pn.writeFile(n,Qs.CERTIFICATE_VALUES.cert)}a(wee,"createNatsCerts");async function Cee(){ia();for await(let e of Dr.search([{attribute:"is_self_signed",value:!0}]))await Dr.delete(e.name);await Sy()}a(Cee,"renewSelfSigned");async function Sy(){See(),await G0(),ia();let e=await _y();if(!e){pt.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=_s.get(uu.TLS_PRIVATEKEY),n=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),s,i=B0(n,r);try{s=yt.privateKeyFromPem(await pn.readFile(r))}catch(c){pt.warn("Unable to parse the TLS key",r,"A new key will be generated and used to create Certificate Authority",c),{private_key:s}=await py(),await pn.exists(sr.join(n,Qs.PRIVATEKEY_PEM_NAME))&&(i=`privateKey${v0().split("-")[0]}.pem`),await pn.writeFile(sr.join(n,i),yt.privateKeyToPem(s))}let o=await $0(s,yt.setRsaPublicKey(s.n,s.e),!1);await du({name:o.subject.getField("CN").value,uses:["https"],certificate:yt.certificateToPem(o),private_key_name:i,is_authority:!0,is_self_signed:!0})}if(!await F_()){let r=bp();pt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await _y();let n=yt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await my(yt.privateKeyFromPem(e.private_key),s,n);await du({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(Sy,"reviewSelfSignedCert");function V0(){let e=Eee(Object.keys(Es.CONFIG_PARAM_MAP),!0),t=sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME),r=sr.join(t,Qs.PRIVATEKEY_PEM_NAME),n=sr.join(t,Qs.NATS_CERTIFICATE_PEM_NAME),s=sr.join(t,Qs.NATS_CA_PEM_NAME),i=Es.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),uy.updateConfigValue(void 0,void 0,o,!1,!0)}a(V0,"updateConfigCert");function K0(e){return e.startsWith("-----BEGIN")?e:Tee(e,"utf8")}a(K0,"readPEM");var L0=Ac.createSecureContext;Ac.createSecureContext=function(e){if(!e.cert||!e.key)return L0(e);let t={...e};delete t.key,delete t.cert;let r=L0(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Y0=Ac.Server;Ac.Server=function(e,t){return e.ALPNCallback&&(e.ALPNProtocols=null),Y0.call(this,e,t)};Ac.Server.prototype=Y0.prototype;var Dee=F0.prototype._init;F0.prototype._init=function(e,t){Dee.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 gc=new Map;function W0(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(),gc.clear();let d=0;for await(let _ of cy.system.hdb_certificate.search([])){let E=_.certificate,f=new oo(E);_.is_authority&&(f.asString=E,gc.set(f.subject,E))}for await(let _ of cy.system.hdb_certificate.search([]))try{if(_.is_authority)continue;let E=e==="operations-api",f=_.is_self_signed?1:2;E&&_.uses?.includes?.("operations")&&(f+=1);let h=await j0(_.private_key_name),T=_.certificate,m=new oo(T);if(gc.has(m.issuer)&&(T+=`
12
+ `+gc.get(m.issuer)),!h||!T)throw new Error("Missing private key or certificate for secure server");let g={ciphers:_.ciphers,ticketKeys:Aee(),availableCAs:gc,ca:t&&Array.from(gc.values()),cert:T,key:h,key_file:_.private_key_name,is_self_signed:_.is_self_signed};o&&(g.sessionIdContext=o.sessionIdContext);let S=Ac.createSecureContext(g);S.name=_.name,S.options=g,S.quality=f,S.certificateAuthorities=Array.from(gc),S.certStart=T.toString().slice(0,100);let y=_.hostnames??Q0(m);Array.isArray(y)||(y=[y]);let I;for(let U of y)if(U){U[0]==="*"&&(s=!0,U=U.slice(1)),U===dy()&&(f+=2),M0.isIP(U)&&(I=!0);let H=r.get(U)?.quality??0;f>H&&r.set(U,S)}else ra.error("No hostname found for certificate at",Ac.certificate);ra.trace("Adding TLS",S.name,"for",o.ports||"client","cert named",_.name,"hostnames",y,"quality",f,"best quality",d),f>d&&(i.defaultContext=n=S,d=f,o&&(o.defaultContext=S))}catch(E){ra.error("Error applying TLS for",_.name,E)}o?.secureContextsListeners.forEach(_=>_()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),cy.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){ra.info("TLS requested for",o||"(no SNI)",this.isReplicationConnection);let l=o;for(;;){let d=r.get(l);if(d)return ra.debug("Found certificate for",o,d.certStart),d.replicationContext&&(this.isReplicationConnection||w0)&&(d=d.replicationContext),c(null,d);if(s&&l){let _=l.indexOf(".",1);_<0?l="":l=l.slice(_)}else break}o?ra.debug("No certificate found to match",o,"using the default certificate"):ra.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.replicationContext&&(this.isReplicationConnection||w0)&&(u=u.replicationContext):ra.info("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(W0,"createTLSSelector");async function j0(e){let t=sa.get(e);return!t&&e?await pn.readFile(sr.join(_s.get(uu.ROOTPATH),Es.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(j0,"getPrivateKeyByName");async function z0(){ia();let e=[];for await(let t of Dr.search([]))e.push(t);return e}a(z0,"listCertificates");async function Pee(e){let t=fy(e,zs.object({name:zs.string().required(),certificate:zs.string().required(),is_authority:zs.boolean().required(),private_key:zs.string(),hosts:zs.array(),uses:zs.array()}));if(t)throw new na(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new oo(n),c=!1,l=!1,u;for(let[f,h]of sa)!s&&!c&&o.checkPrivateKey(U0(h))&&(c=!0,u=f),s&&s===h&&(l=!0,u=f);if(!i&&!s&&!c)throw new na("A suitable private key was not found for this certificate");let d;if(!r){try{d=Ty(o)}catch(f){pt.error(f)}if(d==null)throw new na("Error extracting certificate common name, please provide a name parameter")}let _=Lee(r??d);s&&!c&&!l&&(await pn.writeFile(sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME,_+".pem"),s),sa.set(_,s));let E={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(E.private_key_name=u??_+".pem"),await du(E),"Successfully added certificate: "+_}a(Pee,"addCertificate");function Lee(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Lee,"sanitizeName");async function Mee(e){let t=fy(e,zs.object({name:zs.string().required()}));if(t)throw new na(t.message);let{name:r}=e;ia();let n=await Dr.get(r);if(!n)throw new na(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await Dr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(pt.info("Removing private key named",s),await pn.remove(sr.join(_s.getHdbBasePath(),Es.LICENSE_KEY_DIR_NAME,s)))}return await Dr.delete(r),"Successfully removed "+r}a(Mee,"removeCertificate");function Ty(e){return e.subject.match(/CN=(.*)/)?.[1]}a(Ty,"extractCommonName");function Q0(e){return e.subjectAltName?e.subjectAltName.split(",").map(t=>{let r=t.indexOf(":");if(t=t.slice(r+1),t=t.trim(),t[0]==='"')try{t=JSON.parse(t)}catch{}return t.indexOf("=")>-1?t.match(/CN=([^,]*)/)?.[1]:t}).filter(t=>t):[Ty(e)]}a(Q0,"hostnamesFromCert");async function Uee(e){if(e.bypass_auth!==!0)throw new na("Unauthorized","401");let t=fy(e,zs.object({name:zs.string().required()}));if(t)throw new na(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await C0()).private_key;if(r===".jwtPublic")return(await C0()).public_key;if(sa.get(r))return sa.get(e.name);throw new na("Key not found")}a(Uee,"getKey")});var K_={};je(K_,{addAnalyticsListener:()=>V_,recordAction:()=>mr,recordActionBinary:()=>qn,setAnalyticsEnabled:()=>vee});function vee(e){oB=e}function mr(e,t,r,n,s){if(!oB)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Ip.get(i);if(o)if(typeof e=="number"){let c=o.values,l=c.index++;if(l>=c.length){let u=c;o.values=c=new Float32Array(l*2),c.set(u),c.index=l+1}c[l]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Ip.set(i,o)}Op||Bee()}function qn(e,t,r,n,s){mr(!!e,t,r,n,s)}function V_(e){lB.push(e)}function Bee(){Op=performance.now(),setTimeout(async()=>{let e=performance.now()-Op;Op=0;let t=[],r={time:Date.now(),period:e,threadId:Rc.threadId,metrics:t};for(let[s,i]of Ip){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let _ of uB){let E=Math.floor(c*_),f=o[E-1];if(E>l){let h=E-l;if(f===d){let T=u[u.length-1];typeof T=="number"?u[u.length-1]={value:T,count:1+h}:T.count+=h}else u.push(h>1?{value:f,count:h}:f),d=f;l=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await dB()}let n=process.memoryUsage();t.push({metric:"memory",threadId:Rc.threadId,byThread:!0,...n});for(let s of lB)s(t);Ip=new Map,Rc.parentPort?Rc.parentPort.postMessage({type:cB,report:r}):EB({report:r})},aB).unref()}async function Hee(e,t=6e4){let r=Ry(),n=_B(),s=new Promise(T=>{let m=performance.now();setImmediate(()=>{let g=performance.now();g-m>5e3&&(0,G_.warn)("Unusually high event queue latency on the main thread of "+Math.round(g-m)+"ms"),m=performance.now()}),n.primaryStore.prefetch([1],()=>{let g=performance.now();g-m>5e3&&(0,G_.warn)("Unusually high task queue latency on the main thread of "+Math.round(g-m)+"ms"),T(g-m)})}),i;for(let T of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(T.value?.time){i=T.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:T,value:m}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(o){if(T>o+t)break}else o=T;d=T;let{metrics:g,threadId:S}=m;for(let y of g||[]){let{path:I,method:U,type:H,metric:X,count:Y,total:V,distribution:ne,threads:Q,...de}=y;Y||(Y=1);let W=X+(I?"-"+I:"");U!==void 0&&(W+="-"+U),H!==void 0&&(W+="-"+H);let ae=c.get(W);if(ae){if(ae.threads){let Ne=ae.threads[S];if(Ne)ae=Ne;else{ae.threads[S]={...de};continue}}ae.count||(ae.count=1);let Oe=ae.count;for(let Ne in de){let Me=de[Ne];typeof Me=="number"&&(ae[Ne]=(ae[Ne]*Oe+Me*Y)/(Oe+Y))}ae.count+=Y,V>=0&&(ae.total+=V,ae.ratio=ae.total/ae.count)}else ae={period:t,...y},delete ae.distribution,c.set(W,ae),ae.byThread&&(ae.threads=[],ae.threads[S]={...de},u.push(ae));if(ne){ne=ne.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Oe=l.get(W);Oe?Oe.push(...ne):l.set(W,ne)}}await dB()}for(let T of u){let{path:m,method:g,type:S,metric:y,count:I,total:U,distribution:H,threads:X,...Y}=T;X=X.filter(V=>V);for(let V in Y){if(typeof T[V]!="number")continue;let ne=0;for(let Q of X){let de=Q[V];typeof de=="number"&&(ne+=de)}T[V]=ne}T.count=X.length,delete T.threads,delete T.byThread}for(let[T,m]of l){let g=c.get(T);m.sort((Ne,Me)=>Ne.value>Me.value?1:-1);let S=g.count-1,y=[],I=0,U=0,H;for(let Ne of uB){let Me=S*Ne;for(;I<Me;)H=m[U++],I+=H.count,U===1&&I--;let Gr=m[U>1?U-2:0];H||(H=m[0]),y.push(H.value-(H.value-Gr.value)*(I-Me)/H.count)}let[X,Y,V,ne,Q,de,W,ae,Oe]=y;Object.assign(g,{p1:X,p10:Y,p25:V,median:ne,p75:Q,p90:de,p95:W,p99:ae,p999:Oe})}let _;for(let[T,m]of c)m.id=(0,Np.getNextMonotonicTime)(),m.time=d,n.primaryStore.put(m.id,m,{append:!0}).then(g=>{g||n.primaryStore.put(m.id,m)}),_=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(_||h*10>f){let T=(0,Np.getNextMonotonicTime)(),m={id:T,metric:"main-thread-utilization",idle:f-X0,active:h-Z0,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(T,m,{append:!0}).then(g=>{g||n.primaryStore.put(T,m)})}X0=f,Z0=h}async function eB(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function Ry(){return tB||(tB=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function _B(){return rB||(rB=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Fee(){fB=!0;let e=(0,$_.get)(Ay.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Hee(aB,e),await eB(Ry(),xee),await eB(_B(),kee)},Math.min(e/2,2147483647)).unref()}function EB(e,t){let r=e.report;r.threadId=t?.threadId||Rc.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(nB+=n.mean*n.count);r.totalBytesProcessed=nB,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(sB.get(t))}),sB.set(t,t.performance.eventLoopUtilization())),r.id=(0,Np.getNextMonotonicTime)(),Ry().primaryStore.put(r.id,r),fB||Fee(),Gee&&(hB=$ee(r))}async function $ee(e){if(await hB,!aa){let r=(0,q_.dirname)((0,G_.getLogFilePath)());try{aa=await(0,gy.open)((0,q_.join)(r,"analytics.log"),"r+")}catch{aa=await(0,gy.open)((0,q_.join)(r,"analytics.log"),"w+")}}let t=(await aa.stat()).size;if(t>qee){let r=Buffer.alloc(t);await aa.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await aa.write(r,{position:0}),await aa.truncate(r.length),t=r.length}await aa.write(JSON.stringify(e)+`
13
+ `,t)}var Rc,iB,G_,q_,gy,Np,$_,Ay,Ip,oB,Op,aB,cB,lB,uB,X0,Z0,dB,xee,kee,tB,rB,fB,nB,sB,Gee,hB,aa,qee,Ii=Ie(()=>{Rc=require("worker_threads"),iB=L(dt());De();G_=L(j()),q_=require("path"),gy=require("fs/promises"),Np=L(sn()),$_=L(se()),Ay=L(M());qr();(0,$_.initSync)();Ip=new Map,oB=(0,$_.get)(Ay.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(vee,"setAnalyticsEnabled");a(mr,"recordAction");it.recordAnalytics=mr;a(qn,"recordActionBinary");Op=0,aB=1e3,cB="analytics-report",lB=[];a(V_,"addAnalyticsListener");uB=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Bee,"sendAnalytics");a(Hee,"aggregation");X0=0,Z0=0,dB=a(()=>new Promise(setImmediate),"rest");a(eB,"cleanup");xee=36e5,kee=31536e6;a(Ry,"getRawAnalyticsTable");a(_B,"getAnalyticsTable");(0,iB.setChildListenerByType)(cB,EB);a(Fee,"startScheduledTasks");nB=0,sB=new Map,Gee=!1;a(EB,"recordAnalytics");qee=1e6;a($ee,"logAnalytics")});async function wy(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=ot(),i;if(e.includes("wss://")){if(!by){let l=(0,LB.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),by=u.secureContexts}if(i=by.get(s),i&&fe.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,UB.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,ALPNProtocols:["http/1.1","harperdb-replication"],rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=MB.createSecureContext({...i.options,ca:Array.from(bc)})),new DB.WebSocket(e,"harperdb-replication-v1",c)}function Lp(e,t,r){let n=t.port||t.securePort,s=Iy.pid%1e3+"-"+PB.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3),i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||yc,_,E,f=!1,h=t.subscription;h?.then&&h.then(ie=>h=ie);let T=t.tables||u&&ut()[u];if(!r){fe.error?.("No authorization provided"),is(1008,"Unauthorized");return}let m=new Map,g=[],S=r.name;S&&t.connection&&(t.connection.nodeName=S);let y,I,U,H,X,Y,V=1e3,ne,Q=0,de=0,W=0,ae=0;if(t.url){let ie=a(()=>{X&&W===e._socket?.bytesRead&&ae===e._socket?.bytesWritten?e.terminate():(X=performance.now(),e.ping(),W=e._socket?.bytesRead,ae=e._socket?.bytesWritten)},"send_ping");U=setInterval(ie,NB).unref(),ie()}else Oe();function Oe(){clearTimeout(H),W=e._socket?.bytesRead,ae=e._socket?.bytesWritten,H=setTimeout(()=>{W===e._socket?.bytesRead&&ae===e._socket?.bytesWritten&&(fe.warn?.(`Timeout waiting for ping from ${S}, terminating connection and reconnecting`),e.terminate())},NB*2).unref()}a(Oe,"resetPingTimer"),u&&Va(u);let Ne,Me,Gr=[],Nd=[],ka,wn=[],Id=[],Ol=[],Lw=150,KE=0,vt=0,Fa,Ga,Us,vs,YE;e.on("message",ie=>{Q=performance.now();try{let Se=ie.dataView=new Oc(ie.buffer,ie.byteOffset,ie.byteLength);if(ie[0]>127){let A=(0,ct.decode)(ie),[w,R,b]=A;switch(w){case mB:{if(R){if(S){if(S!==R){fe.error?.(s,`Node name mismatch, expecting to connect to ${S}, but peer reported name as ${R}, disconnecting`),e.send((0,ct.encode)([_u])),is(1008,"Node name mismatch");return}}else if(S=R,t.connection?.tentativeNode){let x=t.connection.tentativeNode;x.name=S,t.connection.tentativeNode=null,io(S,x)}if(t.connection&&(t.connection.nodeName=S),fe.debug?.(s,"received node name:",S,"db:",u),!u)try{Va(u=A[2]),u==="system"&&(Ne=Zo(t,(x,q)=>{$a(q)&&Ir(q)}),e.on("close",()=>{Ne?.remove()}))}catch(x){fe.warn?.(s,"Error setting database",x),e.send((0,ct.encode)([_u])),is(1008,x.message);return}qa()}break}case bB:{fe.debug?.(s,"Received table definitions for",R.map(x=>x.table));for(let x of R){let q=A[2];x.database=q;let ee;$a(q)&&(q==="system"?We[q]?.[x.table]||(ee=Oy(x,We[q]?.[x.table])):ee=Oy(x,We[q]?.[x.table]),_||(_=ee?.auditStore),T||(T=ut()?.[q]))}break}case _u:is();break;case AB:try{let x=r?.replicates||r?.subscribers||r?.name;server.operation(R,{user:r},!x).then(q=>{Array.isArray(q)&&(q={results:q}),q.requestId=R.requestId,e.send((0,ct.encode)([Cp,q]))},q=>{e.send((0,ct.encode)([Cp,{requestId:R.requestId,error:q instanceof Error?q.toString():q}]))})}catch(x){e.send((0,ct.encode)([Cp,{requestId:R.requestId,error:x instanceof Error?x.toString():x}]))}break;case Cp:let{resolve:D,reject:O}=m.get(R.requestId);R.error?O(new Error(R.error)):D(R),m.delete(R.requestId);break;case yy:let B=A[3];T||(u?fe.error?.(s,"No tables found for",u):fe.error?.(s,"Database name never received"));let k=T[B];k=Oy({table:B,database:u,attributes:R.attributes,schemaDefined:R.schemaDefined},k),Gr[b]={name:B,decoder:new ct.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:R.typedStructs,structures:R.structures}),getEntry(x){return k.primaryStore.getEntry(x)},rootStore:k.primaryStore.rootStore};break;case SB:YE=_?e0(S,R,_):new Map,ka=A[2],fe.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${ka}`);break;case TB:let C=b;Ol[C]=R;break;case yB:let F=["replicated",u,S];E||(E=new Float64Array(_.getUserSharedBuffer(F,new ArrayBuffer(8)))),E[0]=R,fe.trace?.(s,"received and broadcasting committed update",R),E.buffer.notify();break;case RB:y=R,h.send({type:"end_txn",localTime:y,remoteNodeIds:g});break;case gB:{let x=R,q;try{let ee=A[3],G=Nd[b]||(Nd[b]=T[A[4]]);if(!G)return fe.warn?.("Unknown table id trying to handle record request",b);let Re=G.primaryStore.getBinaryFast(Symbol.for("structures")),Ee=Re.length;if(Ee!==vt){vt=Ee;let te=(0,ct.decode)(Re);e.send((0,ct.encode)([yy,{typedStructs:te.typed,structures:te.named},b,G.tableName]))}let Ae=G.primaryStore.getBinaryFast(ee);if(Ae){let te=G.primaryStore.decoder.decode(Ae,{valueAsBuffer:!0});q=(0,ct.encode)([wp,x,{value:te.value,expiresAt:te.expiresAt,version:te.version,residencyId:te.residencyId,nodeId:te.nodeId,user:te.user}])}else q=(0,ct.encode)([wp,x])}catch(ee){q=(0,ct.encode)([wp,x,{error:ee.message}])}e.send(q);break}case wp:{let{resolve:x,reject:q,tableId:ee,key:G}=m.get(A[1]),Re=A[2];if(Re?.error)q(new Error(Re.error));else if(Re){let Ee=Gr[ee].decoder.decode(Re.value);Re.value=Ee,Re.key=G,x(Re)}else x();m.delete(A[1]);break}case pB:{vs=R;let x,q,ee=!1;if(h){if(u!==h.databaseName&&!h.then){fe.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(fe.debug?.(s,"received subscription request for",u,"at",vs),!h){let ce;h=new Promise(Ye=>{fe.debug?.("Waiting for subscription to database "+u),ce=Ye}),h.ready=ce,yc.set(u,h)}if(r.name)q=pr().subscribe(r.name),q.then(async ce=>{x=ce;for await(let Ye of x){let rt=Ye.value;if(!(rt?.replicates===!0||rt?.replicates?.receives||rt?.subscriptions?.some(Ze=>(Ze.database||Ze.schema)===u&&Ze.publish!==!1))){ee=!0,e.send((0,ct.encode)([_u])),is(1008,`Unauthorized database subscription to ${u}`);return}}},ce=>{fe.error?.(s,"Error subscribing to HDB nodes",ce)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,ct.encode)([_u])),is(1008,`Unauthorized database subscription to ${u}`);return}if(Us&&(fe.debug?.(s,"stopping previous subscription",u),Us.emit("close")),vs.length===0)return;let G=vs[0],Re=a(ce=>{if(ce&&(G.replicateByDefault?!G.tables.includes(ce.tableName):G.tables.includes(ce.tableName)))return{table:ce}},"tableToTableEntry"),Ee={txnTime:0},Ae,te,K=1/0,ge,Be=a((ce,Ye)=>{if(K=Ye,ce.type==="end_txn"){Ee.txnTime&&(o[i]!==66&&fe.error?.("Invalid encoding of message"),ui(9),ui(Pp),Ka(ge=Ye),we()),i=c,Ee.txnTime=0;return}let rt=ce.nodeId,Ze=ce.tableId,st=te[Ze];if(!st&&(st=te[Ze]=Re(h.tableById[Ze]),!st))return fe.debug?.("Not subscribed to table",Ze);let Bt=st.table,xo=Bt.primaryStore,Yt=xo.encoder;(ce.extendedType&ph||!Yt.typedStructs)&&(Yt._mergeStructures(Yt.getStructures()),Yt.typedStructs&&(Yt.lastTypedStructuresLength=Yt.typedStructs.length));let WE=Ae[rt];if(!(WE&&WE.startTime<Ye&&(!WE.endTime||WE.endTime>Ye)))return Y_&&fe.trace?.(s,"skipping replication update",ce.recordId,"to:",S,"from:",rt,"subscribed:",Ae),Mw();Y_&&fe.trace?.(s,"sending replication update",ce.recordId,"to:",S,"from:",rt,"subscribed:",Ae);let XT=ce.version;Ee.txnTime!==XT&&(Ee.txnTime&&(Y_&&fe.trace?.(s,"new txn time, sending queued txn",Ee.txnTime),o[i]!==66&&fe.error?.("Invalid encoding of message"),we()),Ee.txnTime=XT,i=c,Ka(XT));let Ya=ce.residencyId,ZT=Yi(Ya,Bt),jE;if(ZT&&!ZT.includes(S)){let Il=Yi(ce.previousResidencyId,Bt);if(Il&&!Il.includes(S)&&(ce.type==="put"||ce.type==="patch")||Bt.getResidencyById)return Mw();let Pd=ce.recordId;fe.trace?.(s,"sending invalidation",Pd,S,"from",rt);let rg=0;Ya&&(rg|=Ja),ce.previousResidencyId&&(rg|=Xa);let ng,zE=null;for(let Uw in Bt.indices){if(!zE){if(ng=ce.getValue(xo,!0),!ng)break;zE={}}zE[Uw]=ng[Uw]}jE=Pl(ce.version,Ze,Pd,null,rt,ce.user,ce.type==="put"||ce.type==="patch"?"invalidate":ce.type,Yt.encode(zE),rg,Ya,ce.previousResidencyId,ce.expiresAt)}function Mw(){fe.trace?.(s,"skipping audit record",ce.recordId),Y||(Y=setTimeout(()=>{Y=null,(ge||0)+OB/2<K&&(Y_&&fe.trace?.(s,"sending skipped sequence update",K),e.send((0,ct.encode)([RB,K])))},OB).unref())}a(Mw,"skipAuditRecord");let eg=Yt.typedStructs,tg=Yt.structures;if((eg?.length!=st.typed_length||tg?.length!=st.structure_length)&&(st.typed_length=eg?.length,st.structure_length=tg.length,fe.debug?.(s,"send table struct",st.typed_length,st.structure_length),st.sentName||(st.sentName=!0),e.send((0,ct.encode)([yy,{typedStructs:eg,structures:tg,attributes:Bt.attributes,schemaDefined:Bt.schemaDefined},Ze,st.table.tableName]))),Ya&&!Id[Ya]&&(e.send((0,ct.encode)([TB,ZT,Ya])),Id[Ya]=!0),jE)ui(jE.length),Dd(jE);else{let Il=ce.encoded,Pd=Il[0]===66?8:0;ui(Il.length-Pd),Dd(Il,Pd)}},"sendAuditRecord"),we=a(()=>{c-i>8?(e.send(o.subarray(i,c)),fe.debug?.(s,"Sent message, size:",c-i)):fe.debug?.(s,"skipping empty transaction")},"sendQueuedData");Us=new Ny.EventEmitter,Us.once("close",()=>{ee=!0,x?.end()});for(let{startTime:ce}of vs)ce<K&&(K=ce);(q||Promise.resolve()).then(async()=>{h=await h,_=h.auditStore,te=h.tableById.map(Re),Ae=[];for(let{name:Ye,startTime:rt,endTime:Ze}of vs){let st=hp(Ye,_);fe.debug?.("subscription to",Ye,"using local id",st,"starting",rt),Ae[st]={startTime:rt,endTime:Ze}}Ir(u),Ne||(Ne=Nc(Ye=>{Ye.databaseName===u&&Ir(u)}),Me=W_(Ye=>{Ye===u&&(e.send((0,ct.encode)([_u])),is())}),e.on("close",()=>{Ne?.remove(),Me?.remove()})),e.send((0,ct.encode)([SB,P_(h.auditStore),vs.map(({name:Ye})=>Ye)]));let ce=!0;do{isFinite(K)||(fe.warn?.("Invalid sequence id "+K),is(1008,"Invalid sequence id"+K));let Ye;if(ce&&!ee&&(ce=!1,!(Cy(_)<=K)&&wB.default.get(CB.CONFIG_PARAMS.REPLICATION_COPYTABLESTOCATCHUP)!==!1&&server.nodes[0]?.name===S)){fe.info?.("Replicating all tables to",S);let Ze=K,st=Mp(_);for(let Bt in T){if(!Re(Bt))continue;let xo=T[Bt];for(let Yt of xo.primaryStore.getRange({snapshot:!1})){if(ee)return;Yt.localTime>=K&&(fe.trace?.(s,"Copying record from",u,Bt,Yt.key,Yt.localTime),Ze=Math.max(Yt.localTime,Ze),Ye=!0,Be({recordId:Yt.key,tableId:xo.tableId,type:"put",getValue(){return Yt.value},encoded:xo.primaryStore.getBinary(Yt.key),version:Yt.version,residencyId:Yt.residencyId,nodeId:st},Yt.localTime))}}K=Ze}for(let{key:rt,value:Ze}of _.getRange({start:K||1,exclusiveStart:!0,snapshot:!1})){if(ee)return;de=rt;let st=xt(Ze);Be(st,rt),e._socket.writableNeedDrain?await new Promise(Bt=>e._socket.once("drain",Bt)):await new Promise(setImmediate),Us.startTime=rt,Ye=!0}Ye&&Be({type:"end_txn"},K),de=0,await c0(_)}while(!ee)}).catch(ce=>{fe.error?.(s,"Error handling subscription to node",ce),is(1008,"Error handling subscription to node")});break}}return}Se.position=8;let tt=!0,v,p;do{let A=Se.readInt();if(A===9&&Se.getUint8(Se.position)==Pp){Se.position++,y=p=Se.readFloat64(),fe.trace?.("received remote sequence update",y,u);break}let w=Se.position,R=xt(ie,w,w+A),b=Gr[R.tableId];b||fe.error?.(`No table found with an id of ${R.tableId}`);let D;R.residencyId&&(D=Ol[R.residencyId],fe.trace?.(s,"received residency list",D,R.type,R.recordId));try{v={table:b.name,id:R.recordId,type:R.type,nodeId:YE.get(R.nodeId),residencyList:D,timestamp:R.version,value:R.getValue(b),user:R.user,beginTxn:tt,expiresAt:R.expiresAt}}catch(O){throw O.message+="typed structures for current decoder"+JSON.stringify(b.decoder.typedStructs),O}tt=!1,Y_&&fe.trace?.(s,"received replication message",R.type,"id",v.id,"version",R.version,"nodeId",v.nodeId,"value",v.value),h.send(v),Se.position=w+A}while(Se.position<ie.byteLength);KE++,mr(ie.byteLength,"bytes-received",S+"."+u+"."+v.table,"replication","ingest"),KE>Lw&&!Fa&&(Fa=!0,e.pause()),h.send({type:"end_txn",localTime:y,remoteNodeIds:g,onCommit(){if(v){let A=Date.now()-v.timestamp;mr(A,"replication-latency",S+"."+u+"."+v.table,v.type,"ingest")}KE--,Fa&&(Fa=!1,e.resume()),!I&&p&&(fe.trace?.(s,"queuing confirmation of a commit at",p),setTimeout(()=>{e.send((0,ct.encode)([yB,I])),fe.trace?.(s,"sent confirmation of a commit at",I),I=null},Vee)),I=p}})}catch(Se){fe.error?.(s,"Error handling incoming replication message",Se)}}),e.on("ping",Oe),e.on("pong",()=>{t.connection&&(t.connection.latency=performance.now()-X,Tc({name:S,database:u,url:t.url,lastSendTime:de,latency:t.connection.latency})),X=null}),e.on("close",(ie,Se)=>{clearInterval(U),clearTimeout(H),Us&&Us.emit("close"),Ga&&Ga.end();for(let[tt,{reject:v}]of m)v(new Error(`Connection closed ${Se?.toString()} ${ie}`));fe.debug?.(s,"closed",ie,Se?.toString())});function Ve(){}a(Ve,"recordRemoteNodeSequence");function is(ie,Se){e.isFinished=!0,e.close(ie,Se)}a(is,"close");function qa(){if(f||(f=!0,t.connection?.on("subscriptions-updated",qa)),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let ie=new Map;try{for(let v of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let p of v.value.nodes||[])p.lastTxnTime>(ie.get(p.id)??0)&&ie.set(p.id,p.lastTxnTime)}catch(v){if(!v.message.includes("Can not re"))throw v}let Se=t.connection?.nodeSubscriptions?.[0];g=[];let tt=t.connection?.nodeSubscriptions.map((v,p)=>{let A=[],{replicateByDefault:w}=v;if(v.subscriptions){for(let O of v.subscriptions)if(O.subscribe&&(O.schema||O.database)===u){let B=O.table;T?.[B]?.replicate!==!1&&A.push(B)}w=!1}else for(let O in T)(w?T[O].replicate===!1:T[O].replicate)&&A.push(O);let R=_&&hp(v.name,_),b=h?.dbisDB?.get([Symbol.for("seq"),R])??1,D=Math.max(b?.seqId??1,(typeof v.start_time=="string"?new Date(v.start_time).getTime():v.start_time)??1);if(fe.debug?.("Starting time recorded in db",v.name,R,u,b?.seqId,"start time:",D),Se!==v){D>5e3&&(D-=5e3);let O=_&&hp(Se.name,_),B=h?.dbisDB?.get([Symbol.for("seq"),O])??1;for(let k of B?.nodes||[])k.name===v.name&&(D=k.seqId,fe.debug?.("Using sequence id from proxy node",Se.name,D))}return g.push(R),ie.get(R)>D&&(D=ie.get(R),fe.debug?.("Updating start time from more recent txn recorded",Se.name,D)),{name:v.name,replicateByDefault:w,tables:A,startTime:D,endTime:v.end_time}});if(tt)if(fe.debug?.(s,"sending subscription request",tt,h?.dbisDB?.path),clearTimeout(ne),tt.length>0)e.send((0,ct.encode)([pB,tt]));else{let v=a(()=>{let p=performance.now();ne=setTimeout(()=>{Q<=p?is(1008,"No nodes to subscribe to"):v()},V)},"schedule_close");v()}}a(qa,"sendSubscriptionRequestUpdate");function Yi(ie,Se){if(!ie)return;let tt=wn[ie];return tt||(tt=Se.getResidencyRecord(ie),wn[ie]=tt),tt}a(Yi,"getResidence");function $a(ie){return!(ca&&ca!="*"&&!ca[ie]&&!ca.includes?.(ie)&&!ca.some?.(Se=>Se.name===ie))}a($a,"checkDatabaseAccess");function Va(ie){if(h=h||d.get(ie),!$a(ie))throw new Error(`Access to database "${ie}" is not permitted`);h||fe.warn?.(`No database named "${ie}" was declared and registered`),_=h?.auditStore,T||(T=ut()?.[ie]);let Se=ot();if(Se===S)throw Se?new Error("Should not connect to self",Se):new Error("Node name not defined");return wd(Se,ie),!0}a(Va,"setDatabase");function wd(ie,Se){let tt=ut()?.[Se],v=[];for(let p in tt){let A=tt[p];v.push({table:p,schemaDefined:A.schemaDefined,attributes:A.attributes.map(w=>({name:w.name,type:w.type,isPrimaryKey:w.isPrimaryKey}))})}fe.trace?.("Sending database info for node",ie,"database name",Se),e.send((0,ct.encode)([mB,ie,Se,v]))}a(wd,"sendNodeDBName");function Ir(ie){let Se=ut()?.[ie],tt=[];for(let v in Se){if(vs&&!vs.some(A=>A.replicateByDefault?!A.tables.includes(v):A.tables.includes(v)))continue;let p=Se[v];tt.push({table:v,schemaDefined:p.schemaDefined,attributes:p.attributes.map(A=>({name:A.name,type:A.type,isPrimaryKey:A.isPrimaryKey}))})}e.send((0,ct.encode)([bB,tt,ie]))}a(Ir,"sendDBSchema");let Nl=1,Cd=[];return{end(){Ga&&Ga.end(),Us&&Us.emit("close")},getRecord(ie){let Se=Nl++;return new Promise((tt,v)=>{let p=[gB,Se,ie.table.tableId,ie.id];Cd[ie.table.tableId]||(p.push(ie.table.tableName),Cd[ie.table.tableId]=!0),e.send((0,ct.encode)(p)),m.set(Se,{tableId:ie.table.tableId,key:ie.id,resolve(A){let{table:w,entry:R}=ie;tt(A),A&&w._recordRelocate(R,A)},reject:v})})},sendOperation(ie){let Se=Nl++;return ie.requestId=Se,e.send((0,ct.encode)([AB,ie])),new Promise((tt,v)=>{m.set(Se,{resolve:tt,reject:v})})}};function ui(ie){Ho(5),ie<128?o[c++]=ie:ie<16384?(l.setUint16(c,ie|32768),c+=2):ie<1056964608?(l.setUint32(c,ie|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,ie),c+=5)}function Dd(ie,Se=0,tt=ie.length){let v=tt-Se;Ho(v),ie.copy(o,c,Se,tt),c+=v}function Ka(ie){Ho(8),l.setFloat64(c,ie),c+=8}function Ho(ie){if(ie+16>o.length-c){let Se=Buffer.allocUnsafeSlow(c+ie-i+65536>>10<<11);o.copy(Se,0,i,c),c=c-i,i=0,o=Se,l=new DataView(o.buffer,0,o.length)}}}function Oy(e,t){let r=e.database??"data";if(r!=="data"&&!We[r]){fe.warn?.("Database not found",e.database);return}t||(t={});let n=!1,s=e.schemaDefined,i=t.attributes||[];for(let o=0;o<e.attributes?.length;o++){let c=e.attributes[o],l=i[o];(!l||l.name!==c.name||l.type!==c.type)&&(n=!0,s||(c.indexed=!0),i[o]=c)}return n?(fe.debug?.("(Re)creating",e),Et({table:e.table,database:e.database,schemaDefined:e.schemaDefined,attributes:i,...t})):t}var wB,CB,ct,DB,PB,fe,Ny,LB,MB,Iy,UB,pB,mB,SB,_u,TB,yy,gB,wp,AB,Cp,RB,yB,bB,vB,yc,Y_,OB,Vee,NB,by,IB,Dp,BB=Ie(()=>{De();ji();YR();JR();us();wB=L(se()),CB=L(M());Ll();ct=require("msgpackr"),DB=require("ws"),PB=require("worker_threads"),fe=L(Sc());v_();Ny=require("events"),LB=L(Js()),MB=L(require("node:tls"));su();Iy=L(require("node:process")),UB=require("node:net");Ii();pB=129,mB=140,SB=141,_u=142,TB=130,yy=132,gB=133,wp=134,AB=136,Cp=137,RB=143,yB=144,bB=145,vB=new Map,yc=new Map,Y_=!0,OB=300,Vee=2,NB=3e4;a(wy,"createWebSocket");IB=1e3,Dp=class extends Ny.EventEmitter{constructor(r,n,s,i,o){super();this.url=r;this.subscription=n;this.databaseName=s;this.nodeName=i;this.authorization=o;this.nodeName=this.nodeName??js(r)}static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=IB;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions=[];latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;async connect(){this.session||this.resetSession();let r=[];this.socket=await wy(this.url,{serverName:this.nodeName,authorization:this.authorization});let n;fe.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Iy.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),fe.info?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=IB,Tc({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,n=Lp(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(n)}),this.socket.on("error",s=>{s.code==="SELF_SIGNED_CERT_IN_CHAIN"?(fe.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),s.isHandled=!0):s.code!=="ECONNREFUSED"&&(s.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?fe.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`):fe.error?.(`Error in connection to ${this.url} due to ${s.message}`)),this.sessionReject(s)}),this.socket.on("close",(s,i)=>{if(this.isConnected&&(au({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,n?.end(),this.emit("finished");return}if(++this.retries%20===1){let o=i?.toString();fe.warn?.(`${n?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${o?'"'+o+'" ':""}(code: ${s})`)}n=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>3})}resetSession(){this.session=new Promise((r,n)=>{this.sessionResolve=r,this.sessionReject=n})}subscribe(r,n){this.nodeSubscriptions=r,this.replicateTablesByDefault=n,this.emit("subscriptions-updated",r)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(r){return this.session.then(n=>n.getRecord(r))}};a(Lp,"replicateOverWS");a(Oy,"ensureTableIfChanged")});var oa={};je(oa,{clearThisNodeName:()=>Xee,disableReplication:()=>jee,enabled_databases:()=>ca,forEachReplicatedDatabase:()=>Zo,getThisNodeId:()=>Mp,getThisNodeName:()=>ot,getThisNodeUrl:()=>ea,hostnameToUrl:()=>Hp,lastTimeInAuditStore:()=>L_,monitorNodeCAs:()=>VB,replicateOperation:()=>ete,replication_certificate_authorities:()=>bc,sendOperationToNode:()=>z_,servers:()=>Yee,setReplicator:()=>YB,start:()=>Wee,startOnMainThread:()=>ZR,subscribeToNode:()=>ou,unsubscribeFromNode:()=>Tp,urlToNodeName:()=>js});function Wee(e){if(e.port||(e.port=hs.default.get(Ic.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=hs.default.get(Ic.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT)),!ot())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of U_(e))t.set(js(n.url),n);zee(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=it.ws(async(n,s,i,o)=>{if(s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return o(n,s,i);await i,n._socket.unref(),Lp(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&Sr.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,it.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){!n.authorized&&n._nodeRequest.socket.authorizationError&&Sr.error(`Incoming client connection from ${n.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`,n._nodeRequest.socket.authorizationError);let i=pr().primaryStore;if(n.authorized&&n.peerCertificate.subject){let o=n.peerCertificate.subject,c=o&&(i.get(o.CN)||t.get(o.CN));c?n.user=c:Sr.warn(`No node found for certificate common name ${o.CN}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let o=i.get(n.ip)||t.get(n.ip);o?n.user=o:Sr.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=a(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let o of i)try{let c=Array.from(bc);o.options.availableCAs&&c.push(...o.options.availableCAs.values());let l={...o.options,ca:c};o.replicationContext=Bp.createSecureContext(l)}catch(c){Sr.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),VB(s),hs.default.get(Ic.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function VB(e){let t=0;nu(r=>{r?.ca&&(bc.add(r.ca),bc.size!==t&&(t=bc.size,e?.()))})}function jee(e=!0){$B=e}function zee(e){$B||(ut(),ca=e.databases,Zo(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||yc;for(let[s,i]of j_){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];YB(r,s,e),vB.get(s)?.forEach(i=>i(s))}}))}function YB(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 KB extends Pr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||yc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(Sr.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new Pn,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;for(let E of c){let f=Qee(E,KB.subscription,e);f?.isConnected&&!u.has(f)&&(!d||f.latency<d.latency)&&(d=f)}if(!d)throw l||new GB.ServerError("No connection to any other nodes are available",502);let _={requestId:Kee++,table:t,entry:i,id:i.key};u.add(d);try{return await d.getRecord(_)}catch(E){if(d.isConnected)throw E;Sr.warn("Error in load from node",vp,E),l||(l=E)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function WB(e,t,r,n,s){let i=j_.get(e);i||j_.set(e,i=new Map);let o=i.get(r);if(o)return o;if(t)return i.set(r,o=new Dp(e,t,r,n,s)),o.connect(),o.once("finished",()=>i.delete(r)),o}function Qee(e,t,r){let n=HB.get(e)?.get(r);if(n)return n;let s=pr().primaryStore.get(e);return s?.url&&(n=WB(s.url,t,r,e,s.authorization),HB.set(e,j_.get(s.url))),n}async function z_(e,t,r){r||(r={}),r.serverName=e.name;let n=await wy(e.url,r),s=Lp(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{Sr.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function ou(e){try{qB.isMainThread&&Sr.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=yc.get(e.database);if(!t){let n;t=new Promise(s=>{Sr.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,yc.set(e.database,t)}let r=WB(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>M_(n,e.database)),e.replicateByDefault)}catch(t){Sr.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function Tp({name:e,url:t,database:r}){Sr.trace("Unsubscribing from node",e,t,r,"nodes",Array.from(pr().primaryStore.getRange({})));let n=j_.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function Jee(){if(Dy!==void 0)return Dy;let e=hs.default.get(Ic.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE)||hs.default.get(Ic.CONFIG_PARAMS.TLS_CERTIFICATE);if(e)return Dy=new kB.X509Certificate((0,FB.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function ot(){return vp||(vp=hs.default.get("replication_hostname")??js(hs.default.get("replication_url"))??Jee()??xB("operationsapi_network_secureport")??xB("operationsapi_network_port")??"127.0.0.1")}function Xee(){vp=void 0}function xB(e){let t=hs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function Up(e){let t=hs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function Mp(e){return P_(e)?.[ot()]}function ea(){let e=hs.default.get("replication_url");return e||Hp(ot())}function Hp(e){let t=Up("replication_port");if(t)return`ws://${e}:${t}`;if(t=Up("replication_secureport"),t)return`wss://${e}:${t}`;if(t=Up("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=Up("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function js(e){if(e)return new URL(e).hostname}function Zo(e,t){for(let n of Object.getOwnPropertyNames(We))r(n);return W_(n=>{r(n)}),Nc((n,s)=>{r(n.databaseName)});function r(n){let s=We[n];Sr.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):Zee(n)&&t(s,n,!1)}a(r,"forDatabase")}function Zee(e){let t=We[e];for(let r in t)if(t[r].replicate)return!0}function L_(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function ete(e){let t={message:""};if(e.replicated){e.replicated=!1,Sr.trace?.("Replicating operation",e.operation,"to nodes",it.nodes.map(n=>n.name));let r=await Promise.allSettled(it.nodes.map(n=>z_(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=it.nodes[s]?.name,i})}return t}var hs,Sr,kB,FB,Ic,Bp,GB,qB,$B,Kee,Yee,bc,ca,j_,HB,Dy,vp,us=Ie(()=>{De();Vs();Cl();BB();qr();hs=L(se()),Sr=L(j()),kB=require("crypto"),FB=require("fs");v_();su();Ic=L(M());YR();Bp=L(require("node:tls")),GB=L(_e()),qB=require("worker_threads"),Kee=1,Yee=[],bc=hs.default.get(Ic.CONFIG_PARAMS.REPLICATION_ENABLEROOTCAS)!==!1?new Set(Bp.rootCertificates):new Set;a(Wee,"start");a(VB,"monitorNodeCAs");a(jee,"disableReplication");a(zee,"assignReplicationSource");a(YB,"setReplicator");j_=new Map;a(WB,"getConnection");HB=new Map;a(Qee,"getConnectionByName");a(z_,"sendOperationToNode");a(ou,"subscribeToNode");a(Tp,"unsubscribeFromNode");a(Jee,"getCommonNameFromCert");a(ot,"getThisNodeName");a(Xee,"clearThisNodeName");Object.defineProperty(it,"hostname",{get(){return ot()}});a(xB,"getHostFromListeningPort");a(Up,"getPortFromListeningPort");a(Mp,"getThisNodeId");it.replication={getThisNodeId:Mp,exportIdMapping:P_};a(ea,"getThisNodeUrl");a(Hp,"hostnameToUrl");a(js,"urlToNodeName");a(Zo,"forEachReplicatedDatabase");a(Zee,"hasExplicitlyReplicatedTable");a(L_,"lastTimeInAuditStore");a(ete,"replicateOperation")});var Gp=N((kNe,XB)=>{"use strict";var fu=Oh(),Eu=Xv(),tte=j(),rte=require("uuid").v4,xNe=require("clone"),kp=eo(),hu=M(),nte=require("util"),la=Un(),{handleHDBError:mn,hdb_errors:ste}=_e(),{HDB_ERROR_MSGS:xp,HTTP_STATUS_CODES:Sn}=ste,{SchemaEventMsg:Fp}=qs(),jB=Tr(),{getDatabases:ite}=(De(),oe(lt)),{transformReq:pu}=re(),{replicateOperation:zB}=(us(),oe(oa));XB.exports={createSchema:ote,createSchemaStructure:QB,createTable:ate,createTableStructure:JB,createAttribute:_te,dropSchema:cte,dropTable:lte,dropAttribute:ute,getBackup:fte};async function ote(e){let t=await QB(e);return kp.signalSchemaChange(new Fp(process.pid,e.operation,e.schema)),t}a(ote,"createSchema");async function QB(e){let t=fu.schema_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(pu(e),!await Eu.checkSchemaExists(e.schema))throw mn(new Error,xp.SCHEMA_EXISTS_ERR(e.schema),Sn.BAD_REQUEST,hu.LOG_LEVELS.ERROR,xp.SCHEMA_EXISTS_ERR(e.schema),!0);return await la.createSchema(e),`database '${e.schema}' successfully created`}a(QB,"createSchemaStructure");async function ate(e){return pu(e),e.hash_attribute=e.primary_key??e.hash_attribute,await JB(e)}a(ate,"createTable");async function JB(e){let t=fu.create_table_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);if(fu.validateTableResidence(e.residence),!await Eu.checkSchemaTableExists(e.schema,e.table))throw mn(new Error,xp.TABLE_EXISTS_ERR(e.schema,e.table),Sn.BAD_REQUEST,hu.LOG_LEVELS.ERROR,xp.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:rte(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await la.createTable(n,e);else throw mn(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sn.BAD_REQUEST);else await la.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(JB,"createTableStructure");async function cte(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=fu.schema_object(e),n=t??r;if(n)throw mn(n,n.message,Sn.BAD_REQUEST,void 0,void 0,!0);pu(e);let s=await Eu.checkSchemaExists(e.schema);if(s)throw mn(new Error,s,Sn.NOT_FOUND,hu.LOG_LEVELS.ERROR,s,!0);let i=await Eu.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);await la.dropSchema(e),kp.signalSchemaChange(new Fp(process.pid,e.operation,e.schema)),await jB.purgeSchemaTableStreams(e.schema,o);let c=await zB(e);return c.message=`successfully deleted '${e.schema}'`,c}a(cte,"dropSchema");async function lte(e){let t=fu.table_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);pu(e);let r=await Eu.checkSchemaTableExists(e.schema,e.table);if(r)throw mn(new Error,r,Sn.NOT_FOUND,hu.LOG_LEVELS.ERROR,r,!0);await la.dropTable(e),await jB.purgeTableStream(e.schema,e.table);let n=await zB(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(lte,"dropTable");async function ute(e){let t=fu.attribute_object(e);if(t)throw mn(t,t.message,Sn.BAD_REQUEST,void 0,void 0,!0);pu(e);let r=await Eu.checkSchemaTableExists(e.schema,e.table);if(r)throw mn(new Error,r,Sn.NOT_FOUND,hu.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw mn(new Error,"You cannot drop a hash attribute",Sn.BAD_REQUEST,void 0,void 0,!0);if(hu.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw mn(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sn.BAD_REQUEST,void 0,void 0,!0);try{return await la.dropAttribute(e),dte(e),kp.signalSchemaChange(new Fp(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw tte.error(`Got an error deleting attribute ${nte.inspect(e)}.`),n}}a(ute,"dropAttribute");function dte(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(dte,"dropAttributeFromGlobal");async function _te(e){pu(e);let t=ite()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw mn(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sn.BAD_REQUEST,void 0,void 0,!0);return await la.createAttribute(e),kp.signalSchemaChange(new Fp(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(_te,"createAttribute");function fte(e){return la.getBackup(e)}a(fte,"getBackup")});var eH=N((GNe,ZB)=>{"use strict";var{OPERATIONS_ENUM:Ete}=M(),Py=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Ete.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};ZB.exports=Py});var Ly=N((VNe,iH)=>{"use strict";var hte=Un(),$Ne=eH(),qp=re(),$p=M(),pte=se(),{handleHDBError:tH,hdb_errors:mte}=_e(),{HDB_ERROR_MSGS:rH,HTTP_STATUS_CODES:nH}=mte,Ste=Object.values($p.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),sH="To use this operation audit log must be enabled in harperdb-config.yaml";iH.exports=Tte;async function Tte(e){if(qp.isEmpty(e.schema))throw new Error(rH.SCHEMA_REQUIRED_ERR);if(qp.isEmpty(e.table))throw new Error(rH.TABLE_REQUIRED_ERR);if(!pte.get($p.CONFIG_PARAMS.LOGGING_AUDITLOG))throw tH(new Error,sH,nH.BAD_REQUEST,$p.LOG_LEVELS.ERROR,sH,!0);let t=qp.checkSchemaTableExist(e.schema,e.table);if(t)throw tH(new Error,t,nH.NOT_FOUND,$p.LOG_LEVELS.ERROR,t,!0);if(!qp.isEmpty(e.search_type)&&Ste.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await hte.readAuditLog(e)}a(Tte,"readAuditLog")});var aH=N((YNe,oH)=>{"use strict";var{OPERATIONS_ENUM:gte}=M(),My=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=gte.GET_BACKUP,this.schema=t,this.table=r}};oH.exports=My});var uH=N((QNe,lH)=>{"use strict";var Ate=Un(),jNe=aH(),Uy=re(),Rte=M(),zNe=se(),{handleHDBError:yte,hdb_errors:bte}=_e(),{HDB_ERROR_MSGS:cH,HTTP_STATUS_CODES:Ote}=bte;lH.exports=Nte;async function Nte(e){if(Uy.isEmpty(e.schema))throw new Error(cH.SCHEMA_REQUIRED_ERR);if(Uy.isEmpty(e.table))throw new Error(cH.TABLE_REQUIRED_ERR);let t=Uy.checkSchemaTableExist(e.schema,e.table);if(t)throw yte(new Error,t,Ote.NOT_FOUND,Rte.LOG_LEVELS.ERROR,t,!0);return await Ate.getBackup(read_audit_log_object)}a(Nte,"getBackup")});var pH=N((XNe,hH)=>{var mu=require("validate.js"),_H=gt(),Su=M(),{handleHDBError:Ite,hdb_errors:wte}=_e(),{HDB_ERROR_MSGS:Qt,HTTP_STATUS_CODES:Cte}=wte,vy=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Dte={STRUCTURE_USER:"structure_user"},dH=Object.values(Su.ROLE_TYPES_ENUM),Pte="attribute_permissions",Lte="attribute_name",{PERMS_CRUD_ENUM:Tu}=Su,Mte=[Pte,...Object.values(Tu)],fH=[Tu.READ,Tu.INSERT,Tu.UPDATE],Ute=[Lte,...fH];function vte(e){let t=vy();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,EH(e,t)}a(vte,"addRoleValidation");function Bte(e){let t=vy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,EH(e,t)}a(Bte,"alterRoleValidation");function Hte(e){let t=vy();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,_H.validateObject(e,t)}a(Hte,"dropRoleValidation");var xte=["operation","role","id","permission","hdb_user","hdb_auth_header","access"];function EH(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)xte.includes(n[o])||s.push(n[o]);s.length>0&&ir(Qt.INVALID_ROLE_JSON_KEYS(s),r);let i=_H.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ir(o,r)}),e.permission){let o=kte(e);o&&ir(o,r),dH.forEach(c=>{e.permission[c]&&!mu.isBoolean(e.permission[c])&&ir(Qt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(dH.indexOf(o)<0){if(o===Dte.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 _=l[u];global.hdb_schema[_]||ir(Qt.SCHEMA_NOT_FOUND(_),r)}continue}ir(Qt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ir(Qt.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]){ir(Qt.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Mte.includes(d)||ir(Qt.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Tu).forEach(d=>{mu.isDefined(u[d])?mu.isBoolean(u[d])||ir(Qt.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):ir(Qt.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){ir(Qt.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){ir(Qt.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:E})=>E),_={read:!1,insert:!1,update:!1};for(let E in u.attribute_permissions){let f=u.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!Ute.includes(T)&&T!==Tu.DELETE&&ir(Qt.INVALID_ATTR_PERM_KEY(T),r,o,l)}),!mu.isDefined(f.attribute_name)){ir(Qt.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=f.attribute_name;if(!d.includes(h)){ir(Qt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}fH.forEach(T=>{mu.isDefined(f[T])?mu.isBoolean(f[T])||ir(Qt.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,l):ir(Qt.ATTR_PERM_MISSING(T,h),r,o,l)}),!_.read&&f.read===!0&&(_.read=!0),!_.insert&&f.insert===!0&&(_.insert=!0),!_.update&&f.update===!0&&(_.update=!0)}if(u.read===!1&&_.read===!0||u.insert===!1&&_.insert===!0||u.update===!1&&_.update===!0){let E=`${o}.${l}`;ir(Qt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,l)}}}}return Fte(r)}a(EH,"customValidate");hH.exports={addRoleValidation:vte,alterRoleValidation:Bte,dropRoleValidation:Hte};function kte(e){let{operation:t,permission:r}=e;if(t===Su.OPERATIONS_ENUM.ADD_ROLE||t===Su.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 Qt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Su.ROLE_TYPES_ENUM.SUPER_USER:Su.ROLE_TYPES_ENUM.CLUSTER_USER;return Qt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(kte,"validateNoSUPerms");function Fte(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Qt.ROLE_PERMS_ERROR,...e};return Ite(new Error,n,Cte.BAD_REQUEST)}else return null}a(Fte,"generateRolePermResponse");function ir(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(ir,"addPermError")});var J_=N((tIe,gH)=>{"use strict";var mH=cn(),SH=$r(),Gte=oc(),Hy=pH(),xy=eo(),eIe=require("uuid").v4,qte=require("util"),Vp=M(),$te=re(),ky=SH.searchByValue,Vte=SH.searchByHash,Kte=qte.promisify(Gte.delete),Yte=$s(),Wte=Wl(),{hdb_errors:jte,handleHDBError:wc}=_e(),{HDB_ERROR_MSGS:TH,HTTP_STATUS_CODES:Q_}=jte,{UserEventMsg:Fy}=qs();gH.exports={addRole:zte,alterRole:Qte,dropRole:Jte,listRoles:Xte};function By(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(By,"scrubRoleDetails");async function zte(e){let t=Hy.addRoleValidation(e);if(t)throw t;e=By(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await ky(r)||[])}catch(i){throw wc(i)}if(n&&n.length>0)throw wc(new Error,TH.ROLE_ALREADY_EXISTS(e.role),Q_.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 mH.insert(s),xy.signalUserChange(new Fy(process.pid)),e=By(e),e}a(zte,"addRole");async function Qte(e){let t=Hy.alterRoleValidation(e);if(t)throw t;e=By(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await mH.update(r)}catch(s){throw wc(s)}if(n&&n?.message==="updated 0 of 1 records")throw wc(new Error,"Invalid role id",Q_.BAD_REQUEST,void 0,void 0,!0);return await xy.signalUserChange(new Fy(process.pid)),e}a(Qte,"alterRole");async function Jte(e){let t=Hy.dropRoleValidation(e);if(t)throw wc(new Error,t,Q_.BAD_REQUEST,void 0,void 0,!0);let r=new Wte(Vp.SYSTEM_SCHEMA_NAME,Vp.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Vte(r));if(n.length===0)throw wc(new Error,TH.ROLE_NOT_FOUND,Q_.NOT_FOUND,void 0,void 0,!0);let s=new Yte(Vp.SYSTEM_SCHEMA_NAME,Vp.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await ky(s)),o=!1;if($te.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw wc(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Q_.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Kte(c),xy.signalUserChange(new Fy(process.pid)),`${n[0].role} successfully deleted`}a(Jte,"dropRole");async function Xte(){return ky({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Xte,"listRoles")});var bH=N((nIe,yH)=>{"use strict";var Zte=se(),ua=require("joi"),ere=gt(),AH=require("moment"),tre=require("fs-extra"),Gy=require("path"),rre=require("lodash"),X_=M(),{LOG_LEVELS:Cc}=M(),nre="YYYY-MM-DD hh:mm:ss",sre=Gy.resolve(__dirname,"../logs");yH.exports=function(e){return ere.validateBySchema(e,ire)};var ire=ua.object({from:ua.custom(RH),until:ua.custom(RH),level:ua.valid(Cc.NOTIFY,Cc.FATAL,Cc.ERROR,Cc.WARN,Cc.INFO,Cc.DEBUG,Cc.TRACE),order:ua.valid("asc","desc"),limit:ua.number().min(1),start:ua.number().min(0),log_name:ua.custom(ore)});function RH(e,t){if(AH(e,AH.ISO_8601).format(nre)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(RH,"validateDatetime");function ore(e,t){if(rre.invert(X_.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Zte.get(X_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?X_.LOG_NAMES.HDB:e,i=s===X_.LOG_NAMES.INSTALL?Gy.join(sre,X_.LOG_NAMES.INSTALL):Gy.join(n,s);return tre.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(ore,"validateReadLogPath")});var $y=N((iIe,NH)=>{"use strict";var Kp=M(),are=j(),cre=se(),lre=bH(),qy=require("path"),OH=require("fs-extra"),{once:ure}=require("events"),{handleHDBError:dre,hdb_errors:_re}=_e(),{PACKAGE_ROOT:fre}=M(),Ere=qy.join(fre,"logs"),hre=1e3,pre=200;NH.exports=mre;async function mre(e){let t=lre(e);if(t)throw dre(t,t.message,_re.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=cre.get(Kp.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Kp.LOG_NAMES.HDB:e.log_name,s=n===Kp.LOG_NAMES.INSTALL?qy.join(Ere,Kp.LOG_NAMES.INSTALL):qy.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,l=c?new Date(e.from):void 0,u=e.until!==void 0,d=u?new Date(e.until):void 0,_=e.limit===void 0?hre:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+_,T=0;E==="desc"&&!l&&!d&&(T=Math.max(OH.statSync(s).size-(h+5)*pre,0));let m=OH.createReadStream(s,{start:T});m.on("error",H=>{are.error(H)});let g=0,S=[],y="",I;m.on("data",H=>{let X=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;H=y+H;let Y=0,V;for(;(V=X.exec(H))&&!m.destroyed;){I&&(I.message=H.slice(Y,V.index),U(I));let[ne,Q,de]=V,W=de.split("] ["),ae=W[0],Oe=W[1];W.splice(0,2),I={timestamp:Q,thread:ae,level:Oe,tags:W,message:""},Y=V.index+ne.length}y=H.slice(Y)}),m.on("end",H=>{m.destroyed||I&&(I.message=y.trim(),U(I))}),m.resume();function U(H){let X,Y,V;switch(!0){case(i&&c&&u):X=new Date(H.timestamp),Y=new Date(l),V=new Date(d),H.level===o&&X>=Y&&X<=V&&g<f?g++:H.level===o&&X>=Y&&X<=V&&(da(H,E,S),g++,g===h&&m.destroy());break;case(i&&c):X=new Date(H.timestamp),Y=new Date(l),H.level===o&&X>=Y&&g<f?g++:H.level===o&&X>=Y&&(da(H,E,S),g++,g===h&&m.destroy());break;case(i&&u):X=new Date(H.timestamp),V=new Date(d),H.level===o&&X<=V&&g<f?g++:H.level===o&&X<=V&&(da(H,E,S),g++,g===h&&m.destroy());break;case(c&&u):X=new Date(H.timestamp),Y=new Date(l),V=new Date(d),X>=Y&&X<=V&&g<f?g++:X>=Y&&X<=V&&(da(H,E,S),g++,g===h&&m.destroy());break;case i:H.level===o&&g<f?g++:H.level===o&&(da(H,E,S),g++,g===h&&m.destroy());break;case c:X=new Date(H.timestamp),Y=new Date(l),X>=Y&&g<f?g++:X>=Y&&g>=f&&(da(H,E,S),g++,g===h&&m.destroy());break;case u:X=new Date(H.timestamp),V=new Date(d),X<=V&&g<f?g++:X<=V&&g>=f&&(da(H,E,S),g++,g===h&&m.destroy());break;default:g<f?g++:(da(H,E,S),g++,g===h&&m.destroy())}}return a(U,"onLogMessage"),await ure(m,"close"),S}a(mre,"readLog");function da(e,t,r){t==="desc"?Sre(e,r):t==="asc"?Tre(e,r):r.push(e)}a(da,"pushLineToResult");function Sre(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(Sre,"insertDescending");function Tre(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(Tre,"insertAscending")});var Yp=N((dIe,DH)=>{"use strict";var Vy=require("joi"),{string:gu,boolean:IH,date:gre}=Vy.types(),Are=gt(),{validateSchemaExists:aIe,validateTableExists:cIe,validateSchemaName:lIe}=mi(),Rre=M(),yre=It(),wH=se();wH.initSync();var uIe=gu.invalid(wH.get(Rre.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(yre.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),CH={operation:gu.valid("add_node","update_node","set_node_replication"),node_name:gu.optional(),subscriptions:Vy.array().items({table:gu.optional(),schema:gu.optional(),database:gu.optional(),subscribe:IH.required(),publish:IH.required().custom(Ore),start_time:gre.iso()})};function bre(e){return Are.validateBySchema(e,Vy.object(CH))}a(bre,"addUpdateNodeValidator");function Ore(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(Ore,"checkForFalsy");DH.exports={addUpdateNodeValidator:bre,validation_schema:CH}});var LH=N((fIe,PH)=>{var Nre=gt(),Ire={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};PH.exports=function(e){return Nre.validateObject(e,Ire)}});var Ky=N((hIe,vH)=>{"use strict";var wre=LH(),Au=require("passport"),Cre=require("passport-local").Strategy,Dre=require("passport-http").BasicStrategy,Pre=require("util"),Lre=xn(),UH=Pre.callbackify(Lre.findAndValidateUser),EIe=Dn(),Mre=M(),MH=cu();Au.use(new Cre(function(e,t,r){UH(e,t,r)}));Au.use(new Dre(function(e,t,r){UH(e,t,r)}));Au.serializeUser(function(e,t){t(null,e)});Au.deserializeUser(function(e,t){t(null,e)});function Ure(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":Au.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Mre.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?MH.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):MH.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Au.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Ure,"authorize");function vre(e,t){let r=wre(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(vre,"checkPermissions");vH.exports={authorize:Ure,checkPermissions:vre}});var Ru=N((mIe,BH)=>{"use strict";var Yy=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},Wy=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};BH.exports={Node:Yy,NodeSubscription:Wy}});var xH=N((TIe,HH)=>{"use strict";var Bre=M().OPERATIONS_ENUM,jy=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Bre.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};HH.exports=jy});var Z_=N((AIe,kH)=>{"use strict";var zy=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},Qy=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)}};kH.exports={RemotePayloadObject:zy,RemotePayloadSubscription:Qy}});var GH=N((yIe,FH)=>{"use strict";var Jy=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}};FH.exports=Jy});var $H=N((CIe,qH)=>{"use strict";var Hre=GH(),OIe=Ht(),NIe=ht(),xre=j(),{getSchemaPath:IIe,getTransactionAuditStorePath:wIe}=Tt(),{getDatabases:kre}=(De(),oe(lt));qH.exports=Fre;async function Fre(e){let t=new Hre;try{let r=kre()[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){xre.warn(`unable to stat table dbi due to ${r}`)}return t}a(Fre,"lmdbGetTableSize")});var KH=N((PIe,VH)=>{"use strict";var Xy=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}};VH.exports=Xy});var bu=N((HIe,zH)=>{"use strict";var Gre=require("fs-extra"),qre=require("path"),jr=require("systeminformation"),_a=j(),YH=Tr(),MIe=It(),yu=M(),$re=$H(),Vre=Zi(),{getThreadInfo:WH}=dt(),ef=se();ef.initSync();var Kre=KH(),{openEnvironment:UIe}=ht(),{getSchemaPath:vIe}=Tt(),{database:BIe,databases:Zy}=(De(),oe(lt)),Wp;zH.exports={getHDBProcessInfo:nb,getNetworkInfo:ib,getDiskInfo:sb,getMemoryInfo:rb,getCPUInfo:tb,getTimeInfo:eb,getSystemInformation:ob,systemInformation:Yre,getTableSize:ab,getMetrics:cb};function eb(){return jr.time()}a(eb,"getTimeInfo");async function tb(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await jr.cpu();d.cpu_speed=await jr.cpuCurrentSpeed();let{raw_currentload:_,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:m,cpus:g,...S}=await jr.currentLoad();return S.cpus=[],g.forEach(y=>{let{raw_load:I,raw_load_idle:U,raw_load_irq:H,raw_load_nice:X,raw_load_system:Y,raw_load_user:V,...ne}=y;S.cpus.push(ne)}),d.current_load=S,d}catch(e){return _a.error(`error in getCPUInfo: ${e}`),{}}}a(tb,"getCPUInfo");async function rb(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await jr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return _a.error(`error in getMemoryInfo: ${e}`),{}}}a(rb,"getMemoryInfo");async function nb(){let e={core:[],clustering:[]};try{let t=await jr.processes(),r;try{r=Number.parseInt(await Gre.readFile(qre.join(ef.get(yu.CONFIG_PARAMS.ROOTPATH),yu.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===yu.NODE_ERROR_CODES.ENOENT)_a.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 _a.error(`error in getHDBProcessInfo: ${t}`),e}}a(nb,"getHDBProcessInfo");async function sb(){let e={};try{if(!ef.get(yu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await jr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:l,...u}=await jr.fsStats();return e.read_write=u,e.size=await jr.fsSize(),e}catch(t){return _a.error(`error in getDiskInfo: ${t}`),e}}a(sb,"getDiskInfo");async function ib(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return ef.get(yu.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await jr.networkInterfaceDefault(),e.latency=await jr.inetChecksite("google.com"),(await jr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrier_changes:_,...E}=n;e.interfaces.push(E)}),(await jr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return _a.error(`error in getNetworkInfo: ${t}`),e}}a(ib,"getNetworkInfo");async function ob(){if(Wp!==void 0)return Wp;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await jr.osInfo();e=c;let l=await jr.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,Wp=e,Wp}catch(t){return _a.error(`error in getSystemInformation: ${t}`),e}}a(ob,"getSystemInformation");async function ab(){let e=[],t=await Vre.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await $re(n));return e}a(ab,"getTableSize");async function cb(){let e={};for(let t in Zy){let r=e[t]={},n=r.tables={};for(let s in Zy[t])try{let i=Zy[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,_]=l.trim().split(" ");return{pid:u,thread:d,txnid:_}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:_,overflowPages:E}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:_,overflowPages:E}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){_a.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(cb,"getMetrics");async function jH(){if(ef.get(yu.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await YH.getNATSReferences(),t=await YH.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(jH,"getNatsStreamInfo");async function Yre(e){let t=new Kre;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await ob(),t.time=eb(),t.cpu=await tb(),t.memory=await rb(),t.disk=await sb(),t.network=await ib(),t.harperdb_processes=await nb(),t.table_size=await ab(),t.metrics=await cb(),t.threads=await WH(),t.replication=await jH(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await ob();break;case"time":t.time=eb();break;case"cpu":t.cpu=await tb();break;case"memory":t.memory=await rb();break;case"disk":t.disk=await sb();break;case"network":t.network=await ib();break;case"harperdb_processes":t.harperdb_processes=await nb();break;case"table_size":t.table_size=await ab();break;case"database_metrics":case"metrics":t.metrics=await cb();break;case"threads":t.threads=await WH();break;case"replication":t.replication=await jH();break;default:break}return t}a(Yre,"systemInformation")});var Ou=N((kIe,Wre)=>{Wre.exports={name:"harperdb",version:"4.4.23",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:replication && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc --no-clean --reporter=lcovonly npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:replication && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && npm run test:security && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","test:security":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/security/**/*.js' --config '../unitTests/.mocharc.json'","test:replication":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/replication/**/*.js' --config '../unitTests/.mocharc.json'","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test",format:"prettier .","format:fix":"npm run format -- --write",lint:"eslint .","lint:fix":"npm run lint -- --fix"},dependencies:{"@aws-sdk/client-s3":"3.717.0","@aws-sdk/lib-storage":"3.717.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.10.0","@fastify/compress":"~6.5.0","@fastify/cors":"~9.0.1","@fastify/static":"~7.0.4","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.6.0",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.29.0","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.10.0","gunzip-maybe":"1.4.2","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.2.6",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",moment:"2.30.1","mqtt-packet":"~9.0.0",msgpackr:"1.11.2",nats:"2.19.0",needle:"3.3.1","node-forge":"^1.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.3",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^1.1.0","serve-static":"2.1.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.24.5","tar-fs":"3.0.6",ulidx:"0.5.0",uuid:"10.0.0","validate.js":"0.13.1",ws:"8.18.0",yaml:"2.7.0"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"20.14.8","@typescript-eslint/eslint-plugin":"^7.18.0","@typescript-eslint/parser":"^7.18.0",axios:"1.7.5",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.24.2",eslint:"^8.57.1","eslint-config-prettier":"^9.1.0","eslint-plugin-sonarjs":"^3.0.1",eventsource:"^2.0.2","graphql-http":"^1.22.3","hook-std":"3.0.0","intercept-stdout":"0.1.2",mkcert:"1.5.1",mocha:"^11.0.1","mocha-teamcity-reporter":"^4.2.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"6.1.3","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"3.3.3",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.7.2",undici:"^6.19.8","why-is-node-still-running":"^1.0.0"},overrides:{alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","segfault-handler":"^1.3.0","utf-8-validate":"^5.0.10"}}});var Dc=N((FIe,QH)=>{"use strict";QH.exports={version:jre,printVersion:zre};var jp=Ou();function jre(){if(jp)return jp.version}a(jre,"version");function zre(){jp&&console.log(`HarperDB Version ${jp.version}`)}a(zre,"printVersion")});var ao=N((VIe,ex)=>{"use strict";var Qre=cn(),lb=re(),Jre=require("util"),Pc=M(),JH=se();JH.initSync();var Xre=Ky(),XH=$r(),{Node:qIe,NodeSubscription:$Ie}=Ru(),Zre=Wl(),ene=xH(),{RemotePayloadObject:tne,RemotePayloadSubscription:rne}=Z_(),{handleHDBError:nne,hdb_errors:sne}=_e(),{HTTP_STATUS_CODES:ine,HDB_ERROR_MSGS:one}=sne,ane=$s(),cne=bu(),lne=Dc(),{getDatabases:une}=(De(),oe(lt)),dne=Jre.promisify(Xre.authorize),_ne=XH.searchByHash,fne=XH.searchByValue;ex.exports={authHeaderToUser:Ene,isEmpty:hne,getNodeRecord:pne,upsertNodeRecord:mne,buildNodePayloads:Sne,checkClusteringEnabled:Tne,getAllNodeRecords:gne,getSystemInfo:Ane,reverseSubscription:ZH};async function Ene(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await dne(t,null),e}a(Ene,"authHeaderToUser");function hne(e){return e==null}a(hne,"isEmpty");async function pne(e){let t=new Zre(Pc.SYSTEM_SCHEMA_NAME,Pc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return _ne(t)}a(pne,"getNodeRecord");async function mne(e){let t=new ene(Pc.SYSTEM_SCHEMA_NAME,Pc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return Qre.upsert(t)}a(mne,"upsertNodeRecord");function ZH(e){if(lb.isEmpty(e.subscribe)||lb.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(ZH,"reverseSubscription");function Sne(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=lb.getTableHashAttribute(l,u),{subscribe:_,publish:E}=ZH(c),f=une()[l]?.[u],h=new rne(l,u,d,E,_,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new tne(r,t,s,n)}a(Sne,"buildNodePayloads");function Tne(){if(!JH.get(Pc.CONFIG_PARAMS.CLUSTERING_ENABLED))throw nne(new Error,one.CLUSTERING_NOT_ENABLED,ine.BAD_REQUEST,void 0,void 0,!0)}a(Tne,"checkClusteringEnabled");async function gne(){let e=new ane(Pc.SYSTEM_SCHEMA_NAME,Pc.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await fne(e))}a(gne,"getAllNodeRecords");async function Ane(){let e=await cne.getSystemInformation();return{hdb_version:lne.version(),node_version:e.node_version,platform:e.platform}}a(Ane,"getSystemInfo")});var ub=N((YIe,cx)=>{"use strict";var zp=Tr(),tx=re(),rx=It(),nx=M(),Qp=j(),sx=Gp(),Rne=y_(),{RemotePayloadObject:yne}=Z_(),{handleHDBError:ix,hdb_errors:bne}=_e(),{HTTP_STATUS_CODES:ox}=bne,{NodeSubscription:ax}=Ru();cx.exports=One;async function One(e,t){let r;try{r=await zp.request(`${t}.${rx.REQUEST_SUFFIX}`,new yne(nx.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Qp.trace("Response from remote describe all request:",r)}catch(o){Qp.error(`addNode received error from describe all request to remote node: ${o}`);let c=zp.requestErrorHandler(o,"add_node",t);throw ix(new Error,c,ox.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===rx.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw ix(new Error,o,ox.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===nx.SYSTEM_SCHEMA_NAME){await zp.createLocalTableStream(l,c);let h=new ax(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=tx.doesSchemaExist(l),d=n[l]!==void 0,_=c?tx.doesTableExist(l,c):!0,E=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!_&&!E){s.push(o);continue}if(!u&&d&&(Qp.trace(`addNode creating schema: ${l}`),await sx.createSchema({operation:"create_schema",schema:l})),!_&&E){Qp.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Rne(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await sx.createTable(h)}await zp.createLocalTableStream(l,c);let f=new ax(l,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(One,"reviewSubscriptions")});var Lc={};je(Lc,{addNodeBack:()=>Dne,removeNodeBack:()=>Pne,setNode:()=>Cne});async function Cne(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=js(t)):t=Hp(r);let n=(0,ux.validateBySchema)(e,wne);if(n)throw(0,co.handleHDBError)(n,n.message,Ine.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new co.ClientError("url or hostname is required for remove_node operation");let f=r,h=pr(),T=await h.get(f);if(!T)throw new co.ClientError(f+" does not exist");try{await z_({url:T.url},{operation:tf.OPERATIONS_ENUM.REMOVE_NODE_BACK,name:T?.subscriptions?.length>0?ot():f},void 0)}catch(m){$n.warn(`Error removing node from target node ${f}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,m)}return await h.delete(f),`Successfully removed '${f}' from cluster`}if(!t)throw new co.ClientError("url required for this operation");let s=ea();if(s==null)throw new co.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,ps.getReplicationCert)();let f=await(0,ps.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,ps.createCsr)(),$n.info("Sending CSR to target node:",t)):f&&(c=f.certificate,$n.info("Sending CA named",f.name,"to target node",t))}let l={operation:tf.OPERATIONS_ENUM.ADD_NODE_BACK,hostname:(0,dx.get)(tf.CONFIG_PARAMS.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if(e.subscriptions?l.subscriptions=e.subscriptions.map(lx):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let f=lx(e);l.subscribe=f.subscribe,l.publish=f.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 z_({url:t},l,e)}catch(f){f.message=`Error returned from ${t}: `+f.message,$n.warn("Error adding node:",t,"to cluster:",f),d=f}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&&($n.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,ps.setCertTable)({name:Nne.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,ps.setCertTable)({name:ot(),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 _={url:t,ca:u?.usingCA};if(e.hostname&&(_.name=e.hostname),e.subscriptions?_.subscriptions=e.subscriptions:_.replicates=!0,e.start_time&&(_.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(_.authorization=e.authorization),_.replicates){let f={url:s,ca:c,replicates:!0,subscriptions:null};e.retain_authorization&&(f.authorization=e.authorization),e.start_time&&(f.start_time=e.start_time),await io(ot(),f)}await io(u?u.nodeName:_.name??js(t),_);let E;return e.operation==="update_node"?E=`Successfully updated '${t}'`:E=`Successfully added '${t}' to cluster`,d&&(E+=" but there was an error updating target node: "+d.message),E}async function Dne(e){$n.trace("addNodeBack received request:",e);let t=await(0,ps.signCertificate)(e),r;e.csr?(r=t.signingCA,$n.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,$n.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);let s=await(0,ps.getReplicationCertAuth)();if(n.replicates){let i={url:ea(),ca:s?.certificate,replicates:!0,subscriptions:null};e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await io(ot(),i)}return await io(e.hostname,n),t.nodeName=ot(),t.usingCA=s?.certificate,$n.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function Pne(e){$n.trace("removeNodeBack received request:",e),await pr().delete(e.name)}function lx(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var ps,ux,Nu,dx,tf,$n,co,Nne,Ine,wne,Mc=Ie(()=>{ps=L(Js()),ux=L(gt()),Nu=L(require("joi")),dx=L(se()),tf=L(M());v_();su();us();$n=L(j()),co=L(_e()),{pki:Nne}=require("node-forge"),{HTTP_STATUS_CODES:Ine}=co.hdb_errors,wne=Nu.default.object({hostname:Nu.default.string(),verify_tls:Nu.default.boolean(),replicates:Nu.default.boolean(),subscriptions:Nu.default.array()});a(Cne,"setNode");a(Dne,"addNodeBack");a(Pne,"removeNodeBack");a(lx,"reverseSubscription")});var tm=N((ewe,fx)=>{"use strict";var{handleHDBError:Jp,hdb_errors:Lne}=_e(),{HTTP_STATUS_CODES:Xp}=Lne,{addUpdateNodeValidator:Mne}=Yp(),Zp=j(),em=M(),_x=It(),Une=re(),rf=Tr(),nf=ao(),db=se(),vne=ub(),{Node:Bne,NodeSubscription:Hne}=Ru(),{broadcast:xne}=dt(),{setNode:kne}=(Mc(),oe(Lc)),XIe=se(),ZIe=M(),Fne="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",Gne="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",qne=db.get(em.CONFIG_PARAMS.CLUSTERING_NODENAME);fx.exports=$ne;async function $ne(e,t=!1){if(Zp.trace("addNode called with:",e),db.get(em.CONFIG_PARAMS.REPLICATION_URL)||db.get(em.CONFIG_PARAMS.REPLICATION_HOSTNAME))return kne(e);nf.checkClusteringEnabled();let r=Mne(e);if(r)throw Jp(r,r.message,Xp.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let _=await nf.getNodeRecord(n);if(!Une.isEmptyOrZeroLength(_))throw Jp(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,Xp.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await vne(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Fne,o;let c=nf.buildNodePayloads(s,qne,em.OPERATIONS_ENUM.ADD_NODE,await nf.getSystemInfo()),l=[];for(let _=0,E=s.length;_<E;_++){let f=s[_];s[_].start_time===void 0&&delete s[_].start_time,l.push(new Hne(f.schema,f.table,f.publish,f.subscribe))}Zp.trace("addNode sending remote payload:",c);let u;try{u=await rf.request(`${n}.${_x.REQUEST_SUFFIX}`,c)}catch(_){Zp.error(`addNode received error from request: ${_}`);for(let f=0,h=s.length;f<h;f++){let T=s[f];T.publish=!1,T.subscribe=!1,await rf.updateRemoteConsumer(T,n)}let E=rf.requestErrorHandler(_,"add_node",n);throw Jp(new Error,E,Xp.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===_x.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${n}: ${u.message}`;throw Jp(new Error,_,Xp.INTERNAL_SERVER_ERROR,"error",_)}Zp.trace(u);for(let _=0,E=s.length;_<E;_++){let f=s[_];await rf.updateRemoteConsumer(f,n),f.subscribe===!0&&await rf.updateConsumerIterator(f.schema,f.table,n,"start")}let d=new Bne(n,l,u.system_info);return await nf.upsertNodeRecord(d),xne({type:"nats_update"}),i.length>0?o.message=Gne:o.message=`Successfully added '${n}' to manifest`,o}a($ne,"addNode")});var hb=N((nwe,hx)=>{"use strict";var{handleHDBError:_b,hdb_errors:Vne}=_e(),{HTTP_STATUS_CODES:fb}=Vne,{addUpdateNodeValidator:Kne}=Yp(),sf=j(),rm=M(),Ex=It(),rwe=re(),of=Tr(),af=ao(),Eb=se(),{cloneDeep:Yne}=require("lodash"),Wne=ub(),{Node:jne,NodeSubscription:zne}=Ru(),{broadcast:Qne}=dt(),{setNode:Jne}=(Mc(),oe(Lc)),Xne="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Zne="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",ese=Eb.get(rm.CONFIG_PARAMS.CLUSTERING_NODENAME);hx.exports=tse;async function tse(e){if(sf.trace("updateNode called with:",e),Eb.get(rm.CONFIG_PARAMS.REPLICATION_URL)??Eb.get(rm.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Jne(e);af.checkClusteringEnabled();let t=Kne(e);if(t)throw _b(t,t.message,fb.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await af.getNodeRecord(r);s.length>0&&(n=Yne(s));let{added:i,skipped:o}=await Wne(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=Xne,c;let l=af.buildNodePayloads(i,ese,rm.OPERATIONS_ENUM.UPDATE_NODE,await af.getSystemInfo());for(let d=0,_=i.length;d<_;d++){let E=i[d];sf.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[d].start_time===void 0&&delete i[d].start_time}sf.trace("updateNode sending remote payload:",l);let u;try{u=await of.request(`${r}.${Ex.REQUEST_SUFFIX}`,l)}catch(d){sf.error(`updateNode received error from request: ${d}`);let _=of.requestErrorHandler(d,"update_node",r);throw _b(new Error,_,fb.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===Ex.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw _b(new Error,d,fb.INTERNAL_SERVER_ERROR,"error",d)}sf.trace(u);for(let d=0,_=i.length;d<_;d++){let E=i[d];await of.updateRemoteConsumer(E,r),E.subscribe===!0?await of.updateConsumerIterator(E.schema,E.table,r,"start"):await of.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new jne(r,[],u.system_info)]),await rse(n[0],i,u.system_info),o.length>0?c.message=Zne:c.message=`Successfully updated '${r}'`,c}a(tse,"updateNode");async function rse(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 zne(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await af.upsertNodeRecord(n),Qne({type:"nats_update"})}a(rse,"updateNodeTable")});var gx=N((iwe,Tx)=>{"use strict";var Sx=require("joi"),{string:px}=Sx.types(),nse=gt(),mx=M(),sse=se(),ise=It();Tx.exports=ose;function ose(e){let t=px.invalid(sse.get(mx.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(ise.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=Sx.object({operation:px.valid(mx.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return nse.validateBySchema(e,r)}a(ose,"removeNodeValidator")});var nm=N((awe,Ox)=>{"use strict";var{handleHDBError:Ax,hdb_errors:ase}=_e(),{HTTP_STATUS_CODES:Rx}=ase,cse=gx(),cf=j(),yx=ao(),lse=re(),Iu=M(),bx=It(),pb=Tr(),mb=se(),{RemotePayloadObject:use}=Z_(),{NodeSubscription:dse}=Ru(),_se=R_(),fse=oc(),{broadcast:Ese}=dt(),{setNode:hse}=(Mc(),oe(Lc)),pse=mb.get(Iu.CONFIG_PARAMS.CLUSTERING_NODENAME);Ox.exports=mse;async function mse(e){if(cf.trace("removeNode called with:",e),mb.get(Iu.CONFIG_PARAMS.REPLICATION_URL)??mb.get(Iu.CONFIG_PARAMS.REPLICATION_HOSTNAME))return hse(e);yx.checkClusteringEnabled();let t=cse(e);if(t)throw Ax(t,t.message,Rx.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await yx.getNodeRecord(r);if(lse.isEmptyOrZeroLength(n))throw Ax(new Error,`Node '${r}' was not found.`,Rx.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new use(Iu.OPERATIONS_ENUM.REMOVE_NODE,pse,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await pb.updateConsumerIterator(d.schema,d.table,r,"stop");try{await pb.updateRemoteConsumer(new dse(d.schema,d.table,!1,!1),r)}catch(_){cf.error(_)}}try{i=await pb.request(`${r}.${bx.REQUEST_SUFFIX}`,s),cf.trace("Remove node reply from remote node:",r,i)}catch(l){cf.error("removeNode received error from request:",l),o=!0}let c=new _se(Iu.SYSTEM_SCHEMA_NAME,Iu.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await fse.deleteRecord(c),Ese({type:"nats_update"}),i?.status===bx.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(cf.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(mse,"removeNode")});var wx=N((lwe,Ix)=>{"use strict";var Nx=require("joi"),{string:Sse,array:Tse}=Nx.types(),gse=gt(),Ase=Yp();Ix.exports=Rse;function Rse(e){let t=Nx.object({operation:Sse.valid("configure_cluster").required(),connections:Tse.items(Ase.validation_schema).required()});return gse.validateBySchema(e,t)}a(Rse,"configureClusterValidator")});var Sb=N((dwe,Mx)=>{"use strict";var Cx=M(),sm=j(),yse=re(),bse=se(),Ose=nm(),Nse=tm(),Ise=ao(),wse=wx(),{handleHDBError:Dx,hdb_errors:Cse}=_e(),{HTTP_STATUS_CODES:Px}=Cse,Dse="Configure cluster complete.",Pse="Failed to configure the cluster. Check the logs for more details.",Lse="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";Mx.exports=Mse;async function Mse(e){sm.trace("configure cluster called with:",e);let t=wse(e);if(t)throw Dx(t,t.message,Px.BAD_REQUEST,void 0,void 0,!0);let r=await Ise.getAllNodeRecords(),n=[];if(bse.get(Cx.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,_=r.length;d<_;d++){let E=await Lx(Ose,{operation:Cx.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(E)}sm.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let _=e.connections[d],E=await Lx(Nse,_,_.node_name);s.push(E)}sm.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,_=u.length;d<_;d++){let E=u[d];E.status==="rejected"&&(sm.error(E.node_name,E?.error?.message,E?.error?.stack),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(l=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,response:E?.result})}if(yse.isEmptyOrZeroLength(o))return{message:Dse,connections:c};if(l)return{message:Lse,failed_nodes:o,connections:c};throw Dx(new Error,Pse,Px.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Mse,"configureCluster");async function Lx(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(Lx,"functionWrapper")});var Hx=N((fwe,Bx)=>{"use strict";var lf=require("joi"),Use=gt(),{validateSchemaExists:Ux,validateTableExists:vse,validateSchemaName:vx}=mi(),Bse=lf.object({operation:lf.string().valid("purge_stream"),schema:lf.string().custom(Ux).custom(vx).optional(),database:lf.string().custom(Ux).custom(vx).optional(),table:lf.string().custom(vse).required()});function Hse(e){return Use.validateBySchema(e,Bse)}a(Hse,"purgeStreamValidator");Bx.exports=Hse});var Tb=N((hwe,xx)=>{"use strict";var{handleHDBError:xse,hdb_errors:kse}=_e(),{HTTP_STATUS_CODES:Fse}=kse,Gse=Hx(),qse=Tr(),$se=ao();xx.exports=Vse;async function Vse(e){e.schema=e.schema??e.database;let t=Gse(e);if(t)throw xse(t,t.message,Fse.BAD_REQUEST,void 0,void 0,!0);$se.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await qse.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(Vse,"purgeStream")});var Rb=N((mwe,Kx)=>{"use strict";var Ab=ao(),Kse=Tr(),im=se(),wu=M(),Uc=It(),Yse=re(),gb=j(),{RemotePayloadObject:Wse}=Z_(),{ErrorCode:kx}=require("nats"),{parentPort:Fx}=require("worker_threads"),{onMessageByType:jse}=dt(),{getThisNodeName:zse}=(us(),oe(oa)),{requestClusterStatus:Qse}=(v_(),oe(T0)),Gx=im.get(wu.CONFIG_PARAMS.CLUSTERING_ENABLED),qx=im.get(wu.CONFIG_PARAMS.CLUSTERING_NODENAME);Kx.exports={clusterStatus:Jse,buildNodeStatus:Vx};var $x;jse("cluster-status",async e=>{$x(e)});async function Jse(){if(im.get(wu.CONFIG_PARAMS.REPLICATION_URL)||im.get(wu.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;return Fx?(Fx.postMessage({type:"request-cluster-status"}),n=await new Promise(s=>{$x=s})):n=Qse(),n.node_name=zse(),n.is_enabled=!0,n}let e={node_name:qx,is_enabled:Gx,connections:[]};if(!Gx)return e;let t=await Ab.getAllNodeRecords();if(Yse.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(Vx(t[n],e.connections));return await Promise.allSettled(r),e}a(Jse,"clusterStatus");async function Vx(e,t){let r=e.name,n=new Wse(wu.OPERATIONS_ENUM.CLUSTER_STATUS,qx,void 0,await Ab.getSystemInfo()),s,i,o=Uc.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await Kse.request(Uc.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Uc.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Uc.CLUSTER_STATUS_STATUSES.CLOSED,gb.error(`Error getting node status from ${r} `,s))}catch(l){gb.warn(`Error getting node status from ${r}`,l),l.code===kx.NoResponders?o=Uc.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===kx.Timeout?o=Uc.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Uc.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Xse(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!==wu.PRE_4_0_0_VERSION&&await Ab.upsertNodeRecord(l)}catch(l){gb.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(Vx,"buildNodeStatus");function Xse(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(Xse,"NodeStatusObject")});var bb=N((Twe,Yx)=>{"use strict";var{handleHDBError:Zse,hdb_errors:eie}=_e(),{HTTP_STATUS_CODES:tie}=eie,rie=Tr(),nie=ao(),yb=re(),om=require("joi"),sie=gt(),iie=2e3,oie=om.object({timeout:om.number().min(1),connected_nodes:om.boolean(),routes:om.boolean()});Yx.exports=aie;async function aie(e){nie.checkClusteringEnabled();let t=sie.validateBySchema(e,oie);if(t)throw Zse(t,t.message,tie.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||yb.autoCastBoolean(n),o=s===void 0||yb.autoCastBoolean(s),c={nodes:[]},l=await rie.getServerList(r??iie),u={};if(i)for(let d=0,_=l.length;d<_;d++){let E=l[d].statsz;E&&(u[l[d].server.name]=E.routes)}for(let d=0,_=l.length;d<_;d++){if(l[d].statsz)continue;let E=l[d].server,f=l[d].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[E.name]&&u[E.name].forEach(T=>{h.connected_nodes.includes(T.name.slice(0,-4))||h.connected_nodes.push(T.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:yb.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(aie,"clusterNetwork")});var Qx=N((Awe,zx)=>{"use strict";var Ob=require("joi"),Wx=gt(),{route_constraints:jx}=NA();zx.exports={setRoutesValidator:cie,deleteRoutesValidator:lie};function cie(e){let t=Ob.object({server:Ob.valid("hub","leaf"),routes:jx.required()});return Wx.validateBySchema(e,t)}a(cie,"setRoutesValidator");function lie(e){let t=Ob.object({routes:jx.required()});return Wx.validateBySchema(e,t)}a(lie,"deleteRoutesValidator")});var am=N((ywe,nk)=>{"use strict";var lo=Ct(),Nb=re(),ms=M(),Cu=se(),Jx=Qx(),{handleHDBError:Xx,hdb_errors:uie}=_e(),{HTTP_STATUS_CODES:Zx}=uie,ek="cluster routes successfully set",tk="cluster routes successfully deleted";nk.exports={setRoutes:_ie,getRoutes:fie,deleteRoutes:Eie};function die(e){let t=lo.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=Nb.autoCast(l.port);let u=r.some(_=>_.host===l.host&&_.port===l.port),d=n.some(_=>_.host===l.host&&_.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?lo.updateConfigValue(ms.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):lo.updateConfigValue(ms.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:ek,set:i,skipped:s}}a(die,"setRoutesNats");function _ie(e){let t=Jx.setRoutesValidator(e);if(t)throw Xx(t,t.message,Zx.BAD_REQUEST,void 0,void 0,!0);if(Cu.get(ms.CONFIG_PARAMS.CLUSTERING_ENABLED))return die(e);let r=[],n=[],s=Cu.get(ms.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{rk(s,i)?n.push(i):(s.push(i),r.push(i))}),lo.updateConfigValue(ms.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:ek,set:r,skipped:n}}a(_ie,"setRoutes");function rk(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(rk,"existsInArray");function fie(){if(Cu.get(ms.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=lo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Cu.get(ms.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(fie,"getRoutes");function Eie(e){let t=Jx.deleteRoutesValidator(e);if(t)throw Xx(t,t.message,Zx.BAD_REQUEST,void 0,void 0,!0);if(Cu.get(ms.CONFIG_PARAMS.CLUSTERING_ENABLED))return hie(e);let r=[],n=[],s=Cu.get(ms.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{rk(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),lo.updateConfigValue(ms.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:tk,deleted:r,skipped:n}}a(Eie,"deleteRoutes");function hie(e){let t=lo.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],_=!1;for(let E=0,f=r.length;E<f;E++){let h=r[E];if(d.host===h.host&&d.port===h.port){r.splice(E,1),_=!0,o=!0,s.push(d);break}}if(!_){let E=!0;for(let f=0,h=n.length;f<h;f++){let T=n[f];if(d.host===T.host&&d.port===T.port){n.splice(f,1),c=!0,E=!1,s.push(d);break}}E&&i.push(d)}}return o&&(r=Nb.isEmptyOrZeroLength(r)?null:r,lo.updateConfigValue(ms.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=Nb.isEmptyOrZeroLength(n)?null:n,lo.updateConfigValue(ms.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:tk,deleted:s,skipped:i}}a(hie,"deleteRoutesNats")});var ik=N((Owe,sk)=>{"use strict";var uf=require("alasql"),vc=require("recursive-iterator"),Xs=j(),pie=re(),df=M(),Ib=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Sie(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(s=>df.SEARCH_WILDCARDS.includes(s.columnid));if(r.length===0)return this.ast;let n=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(s=>!df.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][df.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=mie(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(o).filter(u=>!df.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new uf.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(o,l)}}),this.ast}};function mie(e){return e.filter(t=>t[df.PERMS_CRUD_ENUM.READ])}a(mie,"filterReadRestrictedAttrs");function Sie(e,t,r,n,s){Tie(e,t,r,n,s)}a(Sie,"interpretAST");function _f(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(_f,"addSchemaTableToMap");function Tie(e,t,r,n,s){if(!e){Xs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof uf.yy.Insert?yie(e,t,r):e instanceof uf.yy.Select?gie(e,t,r,n,s):e instanceof uf.yy.Update?Aie(e,t,r):e instanceof uf.yy.Delete?Rie(e,t,r):Xs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Tie,"getRecordAttributesAST");function gie(e,t,r,n,s){if(!e){Xs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(pie.isEmptyOrZeroLength(i)){Xs.error("No schema specified");return}e.from.forEach(c=>{_f(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),_f(c.table,t,r,n,s)});let o=new vc(e.columns);for(let{node:c}of o)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{Xs.info(`table specified as ${l} not found.`);return}t.get(u).get(l).indexOf(c.columnid)<0&&t.get(u).get(l).push(c.columnid)}if(e.where){let c=new vc(e.where),l=e.from[0].tableid;for(let{node:u}of c)if(u&&u.columnid){let d=u.tableid?u.tableid:l;if(!t.get(i).has(d))if(r.has(d))d=r.get(d);else{Xs.info(`table specified as ${d} not found.`);continue}t.get(i).get(d).indexOf(u.columnid)<0&&t.get(i).get(d).push(u.columnid)}}if(e.joins&&e.joins.forEach(c=>{let l=new vc(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,_=s.get(d);if(!t.get(_).has(d))if(r.has(d))d=r.get(d);else{Xs.info(`table specified as ${d} not found.`);continue}t.get(_).get(d).indexOf(u.columnid)<0&&t.get(_).get(d).push(u.columnid)}}),e.order){let c=new vc(e.order);for(let{node:l}of c)if(l&&l.columnid){let u=l.tableid,d=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(d).has(u))if(r.has(u))u=r.get(u);else{Xs.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}a(gie,"getSelectAttributes");function Aie(e,t,r){if(!e){Xs.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new vc(e.columns),s=e.table.databaseid;_f(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wb(e.table.tableid,s,i.columnid,t,r)}a(Aie,"getUpdateAttributes");function Rie(e,t,r){if(!e){Xs.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new vc(e.where),s=e.table.databaseid;_f(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&wb(e.table.tableid,s,i.columnid,t,r)}a(Rie,"getDeleteAttributes");function yie(e,t,r){if(!e){Xs.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new vc(e.columns),s=e.into.databaseid;_f(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&wb(e.into.tableid,s,i.columnid,t,r)}a(yie,"getInsertAttributes");function wb(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(wb,"pushAttribute");sk.exports=Ib});var Pb=N((Iwe,lk)=>{var cm=uc(),ok=require("chalk"),Vn=j(),ak=require("prompt"),{promisify:bie}=require("util"),Cb=M(),Oie=require("fs-extra"),Nie=require("path"),Iie=re(),wie=Dc(),ck=se();ck.initSync();var Cie=require("moment"),Die=bie(ak.get),Pie=Nie.join(ck.getHdbBasePath(),Cb.LICENSE_KEY_DIR_NAME,Cb.LICENSE_FILE_NAME,Cb.LICENSE_FILE_NAME);lk.exports={getFingerprint:Mie,setLicense:Lie,parseLicense:Db,register:Uie,getRegistrationInfo:Bie};async function Lie(e){if(e&&e.key&&e.company){try{Vn.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await Db(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Vn.error(r),Vn.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Lie,"setLicense");async function Mie(){let e={};try{e=await cm.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Vn.error(r),Vn.error(t),new Error(r)}return e}a(Mie,"getFingerprint");async function Db(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Vn.info("Validating license input...");let r=cm.validateLicense(e,t);if(Vn.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Vn.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Vn.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Vn.info("writing license to disk"),await Oie.writeFile(Pie,JSON.stringify({license_key:e,company:t}))}catch(n){throw Vn.error("Failed to write License"),n}return"Registration successful."}a(Db,"parseLicense");async function Uie(){let e=await vie();return Db(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Uie,"register");async function vie(){let e=await cm.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:ok.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:ok.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{ak.start()}catch(n){Vn.error(n)}let r;try{r=await Die(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(vie,"promptForRegistration");async function Bie(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await cm.getLicense()}catch(r){throw Vn.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Iie.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=wie.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Cie.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Bie,"getRegistrationInfo")});var dk=N((Cwe,uk)=>{"use strict";var Hie=It(),Lb=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,_,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Hie.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:_,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};uk.exports=Lb});var Ek=N((Pwe,fk)=>{"use strict";var _k=It(),Mb=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,_){this.port=t,_===null&&(_=void 0),this.server_name=r+_k.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+_k.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:_,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:_,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:_,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};fk.exports=Mb});var pk=N((Mwe,hk)=>{"use strict";var Ub=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};hk.exports=Ub});var Sk=N((vwe,mk)=>{"use strict";var xie=It(),vb=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+xie.SERVER_SUFFIX.ADMIN,this.password=r}};mk.exports=vb});var _m=N((Hwe,Ak)=>{"use strict";var Bc=require("path"),Hc=require("fs-extra"),kie=dk(),Fie=Ek(),Gie=pk(),qie=Sk(),Bb=xn(),Pu=re(),Tn=Ct(),um=M(),ff=It(),{CONFIG_PARAMS:Jt}=um,Lu=j(),Ef=se(),Tk=Xi(),Hb=Tr(),$ie=Js(),Du="clustering",Vie=1e4,gk=50;Ak.exports={generateNatsConfig:Yie,removeNatsConfig:Wie,getHubConfigPath:Kie};function Kie(){let e=Ef.get(Jt.ROOTPATH);return Bc.join(e,Du,ff.NATS_CONFIG_FILES.HUB_SERVER)}a(Kie,"getHubConfigPath");async function Yie(e=!1,t=void 0){let r=Ef.get(Jt.ROOTPATH);Hc.ensureDirSync(Bc.join(r,"clustering","leaf")),Ef.initSync();let n=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_CERT_AUTH),s=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_PRIVATEKEY),i=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_CERTIFICATE);!await Hc.exists(i)&&!await Hc.exists(!n)&&await $ie.createNatsCerts();let o=Bc.join(r,Du,ff.PID_FILES.HUB),c=Bc.join(r,Du,ff.PID_FILES.LEAF),l=Tn.getConfigFromFile(Jt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Bc.join(r,Du,ff.NATS_CONFIG_FILES.HUB_SERVER),d=Bc.join(r,Du,ff.NATS_CONFIG_FILES.LEAF_SERVER),_=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_INSECURE),E=Tn.getConfigFromFile(Jt.CLUSTERING_TLS_VERIFY),f=Tn.getConfigFromFile(Jt.CLUSTERING_NODENAME),h=Tn.getConfigFromFile(Jt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await Hb.checkNATSServerInstalled()||dm("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await Bb.listUsers(),m=Tn.getConfigFromFile(Jt.CLUSTERING_USER),g=await Bb.getClusterUser();(Pu.isEmpty(g)||g.active!==!0)&&dm(`Invalid cluster user '${m}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await lm(Jt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await lm(Jt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await lm(Jt.CLUSTERING_HUBSERVER_NETWORK_PORT),await lm(Jt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[ne,Q]of T.entries())Q.role?.role===um.ROLE_TYPES_ENUM.CLUSTER_USER&&Q.active&&(S.push(new qie(Q.username,Tk.decrypt(Q.hash))),y.push(new Gie(Q.username,Tk.decrypt(Q.hash))));let I=[],{hub_routes:U}=Tn.getClusteringRoutes();if(!Pu.isEmptyOrZeroLength(U))for(let ne of U)I.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${ne.host}:${ne.port}`);let H=new kie(Tn.getConfigFromFile(Jt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,o,i,s,n,_,E,h,Tn.getConfigFromFile(Jt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Tn.getConfigFromFile(Jt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,S,y);n==null&&(delete H.tls.ca_file,delete H.leafnodes.tls.ca_file),t=Pu.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===um.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Hc.writeJson(u,H),Lu.trace(`Hub server config written to ${u}`));let X=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,V=new Fie(Tn.getConfigFromFile(Jt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,c,l,[X],[Y],S,y,i,s,n,_);n==null&&delete V.tls.ca_file,(t===void 0||t===um.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Hc.writeJson(d,V),Lu.trace(`Leaf server config written to ${d}`))}a(Yie,"generateNatsConfig");async function lm(e){let t=Ef.get(e);return Pu.isEmpty(t)&&dm(`port undefined for '${e}'`),await Pu.isPortTaken(t)&&dm(`'${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(lm,"isPortAvailable");function dm(e){let t=`Error generating clustering config: ${e}`;Lu.error(t),console.error(t),process.exit(1)}a(dm,"generateNatsConfigError");async function Wie(e){let{port:t,config_file:r}=Hb.getServerConfig(e),{username:n,decrypt_hash:s}=await Bb.getClusterUser(),i=0,o=2e3;for(;i<gk;){try{let d=await Hb.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Lu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=gk)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=o*(i*2);u>3e4&&Lu.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await Pu.async_set_timeout(u)}let c="0".repeat(Vie),l=Bc.join(Ef.get(Jt.ROOTPATH),Du,r);await Hc.writeFile(l,c),await Hc.remove(l),Lu.notify(e,"started.")}a(Wie,"removeNatsConfig")});var Ik=N((kwe,Nk)=>{"use strict";var Kn=se(),jie=uc(),Ge=M(),hf=It(),uo=require("path"),{PACKAGE_ROOT:Em}=M(),Rk=se(),fm=re(),Mu="/dev/null",zie=uo.join(Em,"launchServiceScripts"),yk=uo.join(Em,"utility/scripts"),Qie=uo.join(yk,Ge.HDB_RESTART_SCRIPT),bk=uo.resolve(Em,"dependencies",`${process.platform}-${process.arch}`,hf.NATS_BINARY_NAME);function Ok(){let t=jie.licenseSearch().ram_allocation||Ge.RAM_ALLOCATION_ENUM.DEFAULT,r=Ge.MEM_SETTING_KEY+t,n={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return fm.noBootFile()&&(n[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=fm.getEnvCliRootPath()),{name:Ge.PROCESS_DESCRIPTORS.HDB,script:Ge.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:Em}}a(Ok,"generateMainServerConfig");var Jie=9930;function Xie(){Kn.initSync(!0);let e=Kn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=uo.join(e,"clustering",hf.NATS_CONFIG_FILES.HUB_SERVER),r=uo.join(Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=Rk.get(Ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=hf.LOG_LEVEL_FLAGS[Kn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Jie?"-"+n:""),script:bk,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mu,i.error_file=Mu),i}a(Xie,"generateNatsHubServerConfig");var Zie=9940;function eoe(){Kn.initSync(!0);let e=Kn.get(Ge.CONFIG_PARAMS.ROOTPATH),t=uo.join(e,"clustering",hf.NATS_CONFIG_FILES.LEAF_SERVER),r=uo.join(Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ge.LOG_NAMES.HDB),n=Rk.get(Ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=hf.LOG_LEVEL_FLAGS[Kn.get(Ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Zie?"-"+n:""),script:bk,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Mu,i.error_file=Mu),i}a(eoe,"generateNatsLeafServerConfig");function toe(){Kn.initSync();let e=uo.join(Kn.get(Ge.CONFIG_PARAMS.LOGGING_ROOT),Ge.LOG_NAMES.HDB),t={name:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:zie,autorestart:!1};return Kn.get(Ge.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Mu,t.error_file=Mu),t}a(toe,"generateClusteringUpgradeV4ServiceConfig");function roe(){let e={[Ge.PROCESS_NAME_ENV_PROP]:Ge.PROCESS_DESCRIPTORS.RESTART_HDB};return fm.noBootFile()&&(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=fm.getEnvCliRootPath()),{...{name:Ge.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:yk},script:Qie}}a(roe,"generateRestart");function noe(){return{apps:[Ok()]}}a(noe,"generateAllServiceConfigs");Nk.exports={generateAllServiceConfigs:noe,generateMainServerConfig:Ok,generateRestart:roe,generateNatsHubServerConfig:Xie,generateNatsLeafServerConfig:eoe,generateClusteringUpgradeV4ServiceConfig:toe}});var mf=N((qwe,Gk)=>{"use strict";var at=M(),soe=re(),fo=_m(),hm=Tr(),_o=It(),fa=Ik(),pm=se(),xc=j(),ioe=ao(),{startWorker:wk,onMessageFromWorkers:ooe}=dt(),aoe=bu(),Gwe=require("util"),coe=require("child_process"),loe=require("fs"),{execFile:uoe}=coe,Qe;Gk.exports={enterPM2Mode:doe,start:Ea,stop:xb,reload:Dk,restart:Pk,list:kb,describe:Uk,connect:Eo,kill:poe,startAllServices:moe,startService:Fb,getUniqueServicesList:vk,restartAllServices:Soe,isServiceRegistered:Bk,reloadStopStart:Hk,restartHdb:Mk,deleteProcess:Eoe,startClusteringProcesses:kk,startClusteringThreads:Fk,isHdbRestartRunning:hoe,isClusteringRunning:goe,stopClustering:Toe,reloadClustering:Aoe,expectedRestartOfChildren:Lk};var pf=!1;ooe(e=>{e.type==="restart"&&pm.initSync(!0)});function doe(){pf=!0}a(doe,"enterPM2Mode");function Eo(){return Qe||(Qe=require("pm2")),new Promise((e,t)=>{Qe.connect((r,n)=>{r&&t(r),e(n)})})}a(Eo,"connect");var zr,_oe=10,Ck;function Ea(e,t=!1){if(pf)return foe(e);let r=uoe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let o=zr.indexOf(r);o>-1&&zr.splice(o,1),!Ck&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<_oe&&(loe.existsSync(fo.getHubConfigPath())?Ea(e):(await fo.generateNatsConfig(!0),Ea(e),await new Promise(c=>setTimeout(c,3e3)),await fo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await fo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=pm.get(at.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&_o.LOG_LEVEL_HIERARCHY[o]>=_o.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===_o.LOG_LEVELS.ERR||d===_o.LOG_LEVELS.WRN?xc.OUTPUTS.STDERR:xc.OUTPUTS.STDOUT;xc.logCustomLevel(d||"info",f,n,i.slice(u,l.index).trim())}let[_,E]=l;u=l.index+_.length,d=_o.LOG_LEVELS[E]}if(_o.LOG_LEVEL_HIERARCHY[o]>=_o.LOG_LEVEL_HIERARCHY[d||"info"]){let _=d===_o.LOG_LEVELS.ERR||d===_o.LOG_LEVELS.WRN?xc.OUTPUTS.STDERR:xc.OUTPUTS.STDOUT;xc.logCustomLevel(d||"info",_,n,i.slice(u).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!zr&&(zr=[],!t)){let i=a(()=>{Ck=!0,zr&&(zr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}zr.push(r)}a(Ea,"start");function foe(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.start(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(foe,"startWithPM2");function xb(e){if(!pf){for(let t of zr||[])t.name===e&&(zr.splice(zr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.stop(e,async(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.delete(e,(i,o)=>{i&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(o)})})})}a(xb,"stop");function Dk(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.reload(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(Dk,"reload");function Pk(e){if(!pf){Lk();for(let t of zr||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.restart(e,(n,s)=>{Qe.disconnect(),t(s)})})}a(Pk,"restart");function Lk(){for(let e of zr||[])e.config&&(e.config.restarts=0)}a(Lk,"expectedRestartOfChildren");function Eoe(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.delete(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(Eoe,"deleteProcess");async function Mk(){await Ea(fa.generateRestart())}a(Mk,"restartHdb");async function hoe(){let e=await kb();for(let t in e)if(e[t].name===at.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(hoe,"isHdbRestartRunning");function kb(){return new Promise(async(e,t)=>{try{await Eo()}catch(r){t(r)}Qe.list((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(kb,"list");function Uk(e){return new Promise(async(t,r)=>{try{await Eo()}catch(n){r(n)}Qe.describe(e,(n,s)=>{n&&(Qe.disconnect(),r(n)),Qe.disconnect(),t(s)})})}a(Uk,"describe");function poe(){if(!pf){for(let e of zr||[])e.kill();zr=[];return}return new Promise(async(e,t)=>{try{await Eo()}catch(r){t(r)}Qe.killDaemon((r,n)=>{r&&(Qe.disconnect(),t(r)),Qe.disconnect(),e(n)})})}a(poe,"kill");async function moe(){try{await kk(),await Fk(),await Ea(fa.generateAllServiceConfigs())}catch(e){throw Qe?.disconnect(),e}}a(moe,"startAllServices");async function Fb(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case at.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=fa.generateMainServerConfig();break;case at.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=fa.generateNatsIngestServiceConfig();break;case at.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=fa.generateNatsReplyServiceConfig();break;case at.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=fa.generateNatsHubServerConfig(),await Ea(r,t),await fo.removeNatsConfig(e);return;case at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=fa.generateNatsLeafServerConfig(),await Ea(r,t),await fo.removeNatsConfig(e);return;case at.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=fa.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ea(r)}catch(r){throw Qe?.disconnect(),r}}a(Fb,"startService");async function vk(){try{let e=await kb(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Qe?.disconnect(),e}}a(vk,"getUniqueServicesList");async function Soe(e=[]){try{let t=!1,r=await vk();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===at.PROCESS_DESCRIPTORS.HDB?t=!0:await Pk(o))}t&&await Hk(at.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Qe?.disconnect(),t}}a(Soe,"restartAllServices");async function Bk(e){if(zr?.find(r=>r.name===e))return!0;let t=await aoe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Bk,"isServiceRegistered");async function Hk(e){let t=pm.get(at.CONFIG_PARAMS.THREADS_COUNT)??pm.get(at.CONFIG_PARAMS.THREADS),r=await Uk(e),n=soe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await xb(e),await Fb(e)):e===at.PROCESS_DESCRIPTORS.HDB?await Mk():await Dk(e)}a(Hk,"reloadStopStart");var xk;async function kk(e=!1){for(let t in at.CLUSTERING_PROCESSES){let r=at.CLUSTERING_PROCESSES[t];await Fb(r,e)}}a(kk,"startClusteringProcesses");async function Fk(){xk=wk(at.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:at.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await hm.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await hm.updateLocalStreams();let e=await ioe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===at.PRE_4_0_0_VERSION){xc.info("Starting clustering upgrade 4.0.0 process"),wk(at.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(Fk,"startClusteringThreads");async function Toe(){for(let e in at.CLUSTERING_PROCESSES)if(e!==at.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===at.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await xk.terminate();else{let t=at.CLUSTERING_PROCESSES[e];await xb(t)}}a(Toe,"stopClustering");async function goe(){for(let e in at.CLUSTERING_PROCESSES){let t=at.CLUSTERING_PROCESSES[e];if(await Bk(t)===!1)return!1}return!0}a(goe,"isClusteringRunning");async function Aoe(){await fo.generateNatsConfig(!0),await hm.reloadNATSHub(),await hm.reloadNATSLeaf(),await fo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await fo.removeNatsConfig(at.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Aoe,"reloadClustering")});var $b={};je($b,{compactOnStart:()=>Roe,copyDb:()=>Wk});async function Roe(){ha.notify("Running compact on start"),console.log("Running compact on start");let e=(0,Gb.get)(pa.CONFIG_PARAMS.ROOTPATH),t=new Map,r=ut();(0,qb.updateConfigValue)(pa.CONFIG_PARAMS.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,mm.join)(e,"backup",n+".mdb"),o=(0,mm.join)(e,pa.DATABASES_DIR_NAME,n+"-copy.mdb"),c=0;try{c=await qk(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){ha.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await Wk(n,o),console.log("Backing up",n,"to",i),await(0,kc.move)(s,i,{overwrite:!0})}try{Uu()}catch(n){ha.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,kc.move)(i,s,{overwrite:!0}),await(0,kc.remove)((0,mm.join)(e,pa.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));try{Uu()}catch(n){ha.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){ha.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,qb.updateConfigValue)(pa.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,kc.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Uu(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await qk(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}.
14
14
  Total record count before compaction: ${i}, total after: ${c}.
15
- Database backup has not been removed and can be found here: ${s}`;ha.error(l),console.error(l)}(0,Gb.get)(pa.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,kc.remove)(s))}}async function qk(e){let t=await(0,Yk.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function Wk(e,t){console.log("copyDb start");let r=ut()[e],n;for(let _ in r){n=r[_].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,$k.open)(new Vk.default(t)),c=o.openDB(Sm.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:E,value:f}of s.getRange({transaction:d})){let h=f.is_hash_attribute||f.isPrimaryKey,T,m;if(h&&(T=f.compression,m=Tm(),m?f.compression=m:delete f.compression,T?.dictionary?.toString()===m?.dictionary?.toString()&&(T=null,m=null)),c.put(E,f),!(h||f.indexed))continue;let g=new Kk.default(!h,h);g.encoding="binary",g.compression=T;let S=n.openDB(E,g);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",g.compression=m;let y=o.openDB(E,g);y.encoder=null,console.log("copying",E,"from",e,"to",t),await _(S,y,h,d)}if(i){let E=n.openDB(Sm.AUDIT_STORE_NAME,gf);console.log("copying audit log for",e,"to",t),_(i,E,!1,d)}async function _(E,f,h,T){let m=0,g=0,S=1e7,y=null;for(;S-- >0;)try{for(let I of E.getKeys({start:y,transaction:T}))try{y=I;let{value:U,version:H}=E.getEntry(I,{transaction:T});l=f.put(I,U,h?H:void 0),m++,T.openTimer&&(T.openTimer=0),g+=(I?.length||10)+U.length,u++>5e3&&(await l,console.log("copied",m,"entries",g,"bytes"),u=0)}catch(U){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,U)}console.log("finish copying, copied",m,"entries",g,"bytes");return}catch{if(typeof y=="string"){if(y==="z")return console.error("Reached end of dbi",y,"for",e,"to",t);y=y.slice(0,-2)+"z"}else if(typeof y=="number")y++;else return console.error("Unknown key type",y,"for",e,"to",t)}}a(_,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var $k,mm,kc,Gb,Vk,Kk,Sm,pa,Yk,qb,ha,Vb=Ie(()=>{De();$k=require("lmdb"),mm=require("path"),kc=require("fs-extra"),Gb=L(se()),Vk=L(n_()),Kk=L(r_()),Sm=L(Ht()),pa=L(M());ji();Yk=L(Zi()),qb=L(Ct()),ha=L(j());a(Roe,"compactOnStart");a(qk,"getTotalDBRecordCount");a(Wk,"copyDb")});var Hu=N((Qwe,eF)=>{"use strict";var yoe=require("minimist"),{isMainThread:Yb,parentPort:Rf,threadId:Wwe}=require("worker_threads"),Pt=M(),{PROCESS_DESCRIPTORS_VALIDATE:vu}=Pt,wi=j(),Wb=re(),Am=_m(),gm=Tr(),jwe=It(),Jk=Ct(),Zs=Tf(),jk=bu(),{compactOnStart:boe}=(Vb(),oe($b)),Ooe=Wa(),{restartWorkers:Rm,onMessageByType:Noe}=dt(),{handleHDBError:Ioe,hdb_errors:woe}=_e(),{HTTP_STATUS_CODES:Coe}=woe,yf=se(),{sendOperationToNode:zk,getThisNodeName:Doe,monitorNodeCAs:Poe}=(ls(),oe(oa)),{getHDBNodeTable:zwe}=(su(),oe(E0));yf.initSync();var Af=`Restarting HarperDB. This may take up to ${Pt.RESTART_TIMEOUT_MS/1e3} seconds.`,Loe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",Qk="Clustering is not enabled so cannot be restarted",Moe="Invalid service",Bu,ms;eF.exports={restart:Xk,restartService:jb};Yb&&Noe(Pt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await jb({service:e.workerType}):Xk({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function Xk(e){ms=Object.keys(e).length===0,Bu=await Zs.isServiceRegistered(Pt.HDB_PROC_DESCRIPTOR);let t=yoe(process.argv);if(t.service){await jb(t);return}if(ms&&!Bu){console.error(Loe);return}if(ms&&console.log(Af),Bu){Zs.enterPM2Mode(),wi.notify(Af);let r=Ooe(Object.keys(Pt.CONFIG_PARAM_MAP),!0);return Wb.isEmptyOrZeroLength(Object.keys(r))||Jk.updateConfigValue(void 0,void 0,r,!0,!0),Uoe(),Af}return Yb?(wi.notify(Af),yf.get(Pt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await boe(),setTimeout(()=>{Rm()},50)):Rf.postMessage({type:Pt.ITC_EVENT_TYPES.RESTART}),Af}a(Xk,"restart");async function jb(e){let{service:t}=e;if(Pt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Ioe(new Error,Moe,Coe.BAD_REQUEST,void 0,void 0,!0);if(Zs.expectedRestartOfChildren(),Bu=await Zs.isServiceRegistered(Pt.HDB_PROC_DESCRIPTOR),!Yb){e.replicated&&Poe(),Rf.postMessage({type:Pt.ITC_EVENT_TYPES.RESTART,workerType:t}),Rf.ref(),await new Promise(s=>{Rf.on("message",i=>{i.type==="restart-complete"&&(s(),Rf.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Doe())continue;let{job_id:i}=await zk(s,e);n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let f=new Error("Timed out waiting for restart job to complete");f.replicated=n,c(f)}let E=(await zk(s,{operation:"get_job",id:i})).results[0];if(E.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:E.message})),E.status==="ERROR"){clearInterval(d);let f=new Error(E.message);f.replicated=n,c(f)}},250)}))}return{replicated:n}}return}let r;switch(t){case vu.clustering:if(!yf.get(Pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Qk;break}ms&&console.log("Restarting clustering"),wi.notify("Restarting clustering"),await Zk();break;case vu.clustering_config:case vu["clustering config"]:if(!yf.get(Pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Qk;break}ms&&console.log("Restarting clustering_config"),wi.notify("Restarting clustering_config"),await Zs.reloadClustering();break;case"custom_functions":case"custom functions":case vu.harperdb:case vu.http_workers:case vu.http:if(ms&&!Bu){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}ms&&console.log("Restarting http_workers"),wi.notify("Restarting http_workers"),ms?await Zs.restart(Pt.HDB_PROC_DESCRIPTOR):await Rm("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(wi.error(r),ms&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(jb,"restartService");async function Uoe(){await Zk(),await Zs.restart(Pt.HDB_PROC_DESCRIPTOR),await Wb.async_set_timeout(2e3),yf.get(Pt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Kb(),ms&&(await gm.closeConnection(),process.exit(0))}a(Uoe,"restartPM2Mode");async function Zk(){if(!Jk.getConfigFromFile(Pt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await jk.getHDBProcessInfo()).clustering.length===0)wi.trace("Clustering not running, restart will start clustering services"),await Am.generateNatsConfig(!0),await Zs.startClusteringProcesses(),await Zs.startClusteringThreads(),await Kb(),ms&&await gm.closeConnection();else{await Am.generateNatsConfig(!0),Bu?(wi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Zs.restart(Pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Zs.restart(Pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await jk.getHDBProcessInfo()).clustering.forEach(s=>{wi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await Wb.async_set_timeout(3e3),await Kb(),await gm.updateLocalStreams(),ms&&await gm.closeConnection(),wi.trace("Restart clustering restarting ingest and reply service threads");let t=Rm(Pt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Rm(Pt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(Zk,"restartClustering");async function Kb(){await Am.removeNatsConfig(Pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Am.removeNatsConfig(Pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Kb,"removeNatsConfig")});var dF=N((Zwe,uF)=>{"use strict";var Xwe=require("lodash"),gn=M(),{handleHDBError:tF,hdb_errors:voe}=_e(),{HDB_ERROR_MSGS:Boe,HTTP_STATUS_CODES:Hoe}=voe,zb=j();uF.exports={getRolePermissions:koe};var Fc=Object.create(null),xoe=a(e=>({key:e,perms:{}}),"perms_template_obj"),iF=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),oF=a((e=!1,t=!1,r=!1,n=!1)=>({[gn.PERMS_CRUD_ENUM.READ]:e,[gn.PERMS_CRUD_ENUM.INSERT]:t,[gn.PERMS_CRUD_ENUM.UPDATE]:r,[gn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),Qb=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...oF(t,r,n,s)}),"table_perms_template"),rF=a((e,t=oF())=>({attribute_name:e,describe:lF(t),[bf]:t[bf],[Jb]:t[Jb],[Xb]:t[Xb]}),"attr_perms_template"),nF=a((e,t=!1)=>({attribute_name:e,describe:t,[bf]:t}),"timestamp_attr_perms_template"),{READ:bf,INSERT:Jb,UPDATE:Xb}=gn.PERMS_CRUD_ENUM,aF=Object.values(gn.PERMS_CRUD_ENUM),cF=[bf,Jb,Xb];function koe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[gn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Fc[t]&&Fc[t].key===n)return Fc[t].perms;let s=Foe(e,r);return Fc[t]?Fc[t].key=n:Fc[t]=xoe(n),Fc[t].perms=s,s}catch(r){if(!e[gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<gn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw zb.error(n),zb.debug(r),tF(new Error,Boe.OUTDATED_PERMS_TRANSLATION_ERROR,Hoe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
16
- ${r.stack}`;throw zb.error(n),tF(new Error)}}}a(koe,"getRolePermissions");function Foe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[gn.SYSTEM_SCHEMA_NAME]=n[gn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Goe(t[i]);return}r[i]=iF(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=qoe(c,l);r[i].describe||aF.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Qb()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Qb()})}),r}a(Foe,"translateRolePermissions");function Goe(e){let t=iF(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Qb(!0,!0,!0,!0,!0)}),t}a(Goe,"createStructureUserPermissions");function qoe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:_}=d,E=d;return gn.TIME_STAMP_NAMES.includes(_)&&(E=nF(_,d[bf])),u[_]=E,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=rF(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=lF(d),s.attribute_permissions.push(d),c||$oe(d,l)}else if(u!==o){let d;gn.TIME_STAMP_NAMES.includes(u)?d=nF(u):d=rF(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=sF(s),s}else return e.describe=sF(e),e}a(qoe,"getTableAttrPerms");function sF(e){return aF.filter(t=>e[t]).length>0}a(sF,"getSchemaTableDescribePerm");function lF(e){return cF.filter(t=>e[t]).length>0}a(lF,"getAttributeDescribePerm");function $oe(e,t){cF.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a($oe,"checkForHashPerms")});var _F={};je(_F,{Headers:()=>ho,appendHeader:()=>ym,mergeHeaders:()=>Zb});function ym(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function Zb(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new ho(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var ho,Of=Ie(()=>{ho=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(ym,"appendHeader");a(Zb,"mergeHeaders")});var Nf={};je(Nf,{authentication:()=>TF,bypassAuth:()=>Qoe,login:()=>Xoe,logout:()=>Zoe,start:()=>Joe});function Qoe(){SF=!0}async function TF(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?Woe?Yoe:[]:Koe?Voe:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new ho([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return bm&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),bm&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(bm){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let T of h)if(T.startsWith(f)){let m=T.indexOf(";");l=T.slice(f.length,m===-1?T.length:m),u=await fF.get(l);break}e.session=u||(u={})}let d=a((f,h,T)=>{let m=new xu.AuthAuditLog(f,h,br.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);m.auth_strategy=T,l&&(m.session_id=l),r.referer&&(m.referer=r.referer),r.origin&&(m.origin=r.origin),h===br.AUTH_AUDIT_STATUS.SUCCESS?eO.notify(m):eO.error(m)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&eO.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await it.getUser(f,null,e),d(f,br.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,xu.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let _;if(!e.user)if(n){if(_=Gc.get(n),!_){let f=n.indexOf(" "),h=n.slice(0,f),T=n.slice(f+1),m,g;try{switch(h){case"Basic":let S=atob(T),y=S.indexOf(":");m=S.slice(0,y),g=S.slice(y+1),_=m||g?await it.getUser(m,g,e):null;break;case"Bearer":try{_=await(0,Om.validateOperationToken)(T)}catch(I){if(I.message==="invalid token")try{return await(0,Om.validateRefreshToken)(T),c({status:-1})}catch{throw I}}break}}catch(S){return zoe&&(Gc.get(T)||(Gc.set(T,T),d(m,br.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:qc({error:S.message},e)})}Gc.set(n,_),joe&&d(_.username,br.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=_}else u?.user?e.user=await it.getUser(u.user,null,e):(SF&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,hF.getSuperUser)());bm&&(e.session.update=function(f){if(!l){l=(0,pF.v4)();let T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):E?.headers?.set&&E.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=l,fF.put(f)},e.login=async function(f,h){e.user=await it.getUser(f,h,e),e.session.update({user:e.user&&(e.user.getId?.()??e.user.username)})});let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Oi.loginPath?(E.status=302,E.headers.set("Location",Oi.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new ho);for(let _=0;_<u;){let E=o[_++];d.set(E,o[_++])}}return o=null,l}a(c,"applyResponseHeaders")}function Joe({server:e,port:t,securePort:r}){e.http(TF,t||r?{port:t,securePort:r}:{port:"all"}),EF||(EF=!0,setInterval(()=>{Gc=new Map},Ss.get(br.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),mF.user.addListener(()=>{Gc=new Map}))}async function Xoe(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password??""),"Login successful"}async function Zoe(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var hF,Om,pF,Ss,br,xu,mF,eO,Voe,Koe,Yoe,Woe,fF,bm,SF,joe,zoe,Gc,EF,Nm=Ie(()=>{hF=L(xn());qr();Zl();Om=L(cu());De();pF=require("uuid"),Ss=L(se()),br=L(M()),xu=L(j()),mF=L(h_());Of();$c();eO=(0,xu.loggerWithTag)("auth-event");Ss.initSync();Voe=Ss.get(br.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Koe=Ss.get(br.CONFIG_PARAMS.HTTP_CORS),Yoe=Ss.get(br.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Woe=Ss.get(br.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),fF=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),bm=Ss.get(br.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,SF=process.env.AUTHENTICATION_AUTHORIZELOCAL??Ss.get(br.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,joe=Ss.get(br.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,zoe=Ss.get(br.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Gc=new Map;it.onInvalidatedUser(()=>{Gc=new Map});a(Qoe,"bypassAuth");a(TF,"authentication");a(Joe,"start");a(Xoe,"login");a(Zoe,"logout")});var NF=N((cCe,OF)=>{"use strict";var ye=require("joi"),gF=require("fs-extra"),AF=require("path"),Yn=gt(),RF=se(),yF=M(),bF=j(),{hdb_errors:eae}=_e(),{HDB_ERROR_MSGS:Qr}=eae,po=/^[a-zA-Z0-9-_]+$/,tae=/^[a-zA-Z0-9-_]+$/;OF.exports={getDropCustomFunctionValidator:nae,setCustomFunctionValidator:sae,addComponentValidator:cae,dropCustomFunctionProjectValidator:lae,packageComponentValidator:uae,deployComponentValidator:dae,setComponentFileValidator:iae,getComponentFileValidator:aae,dropComponentFileValidator:oae,addSSHKeyValidator:_ae,updateSSHKeyValidator:fae,deleteSSHKeyValidator:Eae,setSSHKnownHostsValidator:hae};function Im(e,t,r){try{let n=RF.get(yF.CONFIG_PARAMS.COMPONENTSROOT),s=AF.join(n,t);return gF.existsSync(s)?e?t:r.message(Qr.PROJECT_EXISTS):e?r.message(Qr.NO_PROJECT):t}catch(n){return bF.error(n),r.message(Qr.VALIDATION_ERR)}}a(Im,"checkProjectExists");function If(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(If,"checkFilePath");function rae(e,t,r,n){try{let s=RF.get(yF.CONFIG_PARAMS.COMPONENTSROOT),i=AF.join(s,e,t,r+".js");return gF.existsSync(i)?r:n.message(Qr.NO_FILE)}catch(s){return bF.error(s),n.message(Qr.VALIDATION_ERR)}}a(rae,"checkFileExists");function nae(e){let t=ye.object({project:ye.string().pattern(po).custom(Im.bind(null,!0)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().pattern(po).custom(rae.bind(null,e.project,e.type)).custom(If).required().messages({"string.pattern.base":Qr.BAD_FILE_NAME})});return Yn.validateBySchema(e,t)}a(nae,"getDropCustomFunctionValidator");function sae(e){let t=ye.object({project:ye.string().pattern(po).custom(Im.bind(null,!0)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().custom(If).required(),function_content:ye.string().required()});return Yn.validateBySchema(e,t)}a(sae,"setCustomFunctionValidator");function iae(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),file:ye.string().custom(If).required(),payload:ye.string().allow("").optional(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Yn.validateBySchema(e,t)}a(iae,"setComponentFileValidator");function oae(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),file:ye.string().custom(If).optional()});return Yn.validateBySchema(e,t)}a(oae,"dropComponentFileValidator");function aae(e){let t=ye.object({project:ye.string().required(),file:ye.string().custom(If).required(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Yn.validateBySchema(e,t)}a(aae,"getComponentFileValidator");function cae(e){let t=ye.object({project:ye.string().pattern(po).custom(Im.bind(null,!1)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME})});return Yn.validateBySchema(e,t)}a(cae,"addComponentValidator");function lae(e){let t=ye.object({project:ye.string().pattern(po).custom(Im.bind(null,!0)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME})});return Yn.validateBySchema(e,t)}a(lae,"dropCustomFunctionProjectValidator");function uae(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),skip_node_modules:ye.boolean(),skip_symlinks:ye.boolean()});return Yn.validateBySchema(e,t)}a(uae,"packageComponentValidator");function dae(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),package:ye.string().optional(),restart:ye.alternatives().try(ye.boolean(),ye.string().valid("rolling")).optional()});return Yn.validateBySchema(e,t)}a(dae,"deployComponentValidator");function _ae(e){let t=ye.object({name:ye.string().pattern(tae).required().messages({"string.pattern.base":Qr.BAD_SSH_KEY_NAME}),key:ye.string().required(),host:ye.string().required(),hostname:ye.string().required(),known_hosts:ye.string().optional()});return Yn.validateBySchema(e,t)}a(_ae,"addSSHKeyValidator");function fae(e){let t=ye.object({name:ye.string().required(),key:ye.string().required()});return Yn.validateBySchema(e,t)}a(fae,"updateSSHKeyValidator");function Eae(e){let t=ye.object({name:ye.string().required()});return Yn.validateBySchema(e,t)}a(Eae,"deleteSSHKeyValidator");function hae(e){let t=ye.object({known_hosts:ye.string().required()});return Yn.validateBySchema(e,t)}a(hae,"setSSHKnownHostsValidator")});var wf=N((uCe,LF)=>{"use strict";var wm=require("joi"),ma=require("path"),ku=require("fs-extra"),{exec:pae}=require("child_process"),mae=require("util"),IF=mae.promisify(pae),Vc=M(),{handleHDBError:Fu,hdb_errors:Sae}=_e(),{HTTP_STATUS_CODES:Gu}=Sae,Kc=se(),Tae=gt(),Yc=j();Kc.initSync();var tO=Kc.get(Vc.CONFIG_PARAMS.COMPONENTSROOT),wF="npm install --force --omit=dev --json",gae=`${wF} --dry-run`,Aae=Kc.get(Vc.CONFIG_PARAMS.ROOTPATH),Cm=ma.join(Aae,"ssh");LF.exports={installModules:Oae,auditModules:Nae,installAllRootModules:Rae,uninstallRootModule:yae,linkHarperdb:bae,runCommand:qu};async function Rae(e=!1,t=Kc.get(Vc.CONFIG_PARAMS.ROOTPATH)){await Dm();let r=!1,n=process.env;ku.pathExistsSync(Cm)&&ku.readdirSync(Cm).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+ma.join(Cm,"config")+" -o UserKnownHostsFile="+ma.join(Cm,"known_hosts"),...process.env},r=!0)});try{let s=Kc.get(Vc.CONFIG_PARAMS.ROOTPATH),i=ma.join(s,"node_modules","harperdb");ku.lstatSync(i).isSymbolicLink()&&ku.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&Yc.error("Error removing symlink:",s)}await qu(e?"npm install --force --ignore-scripts --no-bin-links":"npm install --force --no-bin-links",t,n)}a(Rae,"installAllRootModules");async function yae(e){await qu(`npm uninstall ${e}`,Kc.get(Vc.CONFIG_PARAMS.ROOTPATH))}a(yae,"uninstallRootModule");async function bae(){await Dm(),await qu(`npm link ${Vc.PACKAGE_ROOT}`,Kc.get(Vc.CONFIG_PARAMS.ROOTPATH))}a(bae,"linkHarperdb");async function qu(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await IF(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
15
+ Database backup has not been removed and can be found here: ${s}`;ha.error(l),console.error(l)}(0,Gb.get)(pa.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,kc.remove)(s))}}async function qk(e){let t=await(0,Yk.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function Wk(e,t){console.log("copyDb start");let r=ut()[e],n;for(let _ in r){n=r[_].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,$k.open)(new Vk.default(t)),c=o.openDB(Sm.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:E,value:f}of s.getRange({transaction:d})){let h=f.is_hash_attribute||f.isPrimaryKey,T,m;if(h&&(T=f.compression,m=Tm(),m?f.compression=m:delete f.compression,T?.dictionary?.toString()===m?.dictionary?.toString()&&(T=null,m=null)),c.put(E,f),!(h||f.indexed))continue;let g=new Kk.default(!h,h);g.encoding="binary",g.compression=T;let S=n.openDB(E,g);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",g.compression=m;let y=o.openDB(E,g);y.encoder=null,console.log("copying",E,"from",e,"to",t),await _(S,y,h,d)}if(i){let E=n.openDB(Sm.AUDIT_STORE_NAME,Sf);console.log("copying audit log for",e,"to",t),_(i,E,!1,d)}async function _(E,f,h,T){let m=0,g=0,S=1e7,y=null;for(;S-- >0;)try{for(let I of E.getKeys({start:y,transaction:T}))try{y=I;let{value:U,version:H}=E.getEntry(I,{transaction:T});l=f.put(I,U,h?H:void 0),m++,T.openTimer&&(T.openTimer=0),g+=(I?.length||10)+U.length,u++>5e3&&(await l,console.log("copied",m,"entries",g,"bytes"),u=0)}catch(U){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,U)}console.log("finish copying, copied",m,"entries",g,"bytes");return}catch{if(typeof y=="string"){if(y==="z")return console.error("Reached end of dbi",y,"for",e,"to",t);y=y.slice(0,-2)+"z"}else if(typeof y=="number")y++;else return console.error("Unknown key type",y,"for",e,"to",t)}}a(_,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var $k,mm,kc,Gb,Vk,Kk,Sm,pa,Yk,qb,ha,Vb=Ie(()=>{De();$k=require("lmdb"),mm=require("path"),kc=require("fs-extra"),Gb=L(se()),Vk=L(t_()),Kk=L(e_()),Sm=L(Ht()),pa=L(M());ji();Yk=L(Zi()),qb=L(Ct()),ha=L(j());a(Roe,"compactOnStart");a(qk,"getTotalDBRecordCount");a(Wk,"copyDb")});var Hu=N((Qwe,eF)=>{"use strict";var yoe=require("minimist"),{isMainThread:Yb,parentPort:gf,threadId:Wwe}=require("worker_threads"),Pt=M(),{PROCESS_DESCRIPTORS_VALIDATE:vu}=Pt,wi=j(),Wb=re(),Am=_m(),gm=Tr(),jwe=It(),Jk=Ct(),Zs=mf(),jk=bu(),{compactOnStart:boe}=(Vb(),oe($b)),Ooe=Wa(),{restartWorkers:Rm,onMessageByType:Noe}=dt(),{handleHDBError:Ioe,hdb_errors:woe}=_e(),{HTTP_STATUS_CODES:Coe}=woe,Af=se(),{sendOperationToNode:zk,getThisNodeName:Doe,monitorNodeCAs:Poe}=(us(),oe(oa)),{getHDBNodeTable:zwe}=(su(),oe(E0));Af.initSync();var Tf=`Restarting HarperDB. This may take up to ${Pt.RESTART_TIMEOUT_MS/1e3} seconds.`,Loe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",Qk="Clustering is not enabled so cannot be restarted",Moe="Invalid service",Bu,Ss;eF.exports={restart:Xk,restartService:jb};Yb&&Noe(Pt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await jb({service:e.workerType}):Xk({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function Xk(e){Ss=Object.keys(e).length===0,Bu=await Zs.isServiceRegistered(Pt.HDB_PROC_DESCRIPTOR);let t=yoe(process.argv);if(t.service){await jb(t);return}if(Ss&&!Bu){console.error(Loe);return}if(Ss&&console.log(Tf),Bu){Zs.enterPM2Mode(),wi.notify(Tf);let r=Ooe(Object.keys(Pt.CONFIG_PARAM_MAP),!0);return Wb.isEmptyOrZeroLength(Object.keys(r))||Jk.updateConfigValue(void 0,void 0,r,!0,!0),Uoe(),Tf}return Yb?(wi.notify(Tf),Af.get(Pt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await boe(),setTimeout(()=>{Rm()},50)):gf.postMessage({type:Pt.ITC_EVENT_TYPES.RESTART}),Tf}a(Xk,"restart");async function jb(e){let{service:t}=e;if(Pt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Ioe(new Error,Moe,Coe.BAD_REQUEST,void 0,void 0,!0);if(Zs.expectedRestartOfChildren(),Bu=await Zs.isServiceRegistered(Pt.HDB_PROC_DESCRIPTOR),!Yb){e.replicated&&Poe(),gf.postMessage({type:Pt.ITC_EVENT_TYPES.RESTART,workerType:t}),gf.ref(),await new Promise(s=>{gf.on("message",i=>{i.type==="restart-complete"&&(s(),gf.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Doe())continue;let{job_id:i}=await zk(s,e);n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let f=new Error("Timed out waiting for restart job to complete");f.replicated=n,c(f)}let E=(await zk(s,{operation:"get_job",id:i})).results[0];if(E.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:E.message})),E.status==="ERROR"){clearInterval(d);let f=new Error(E.message);f.replicated=n,c(f)}},250)}))}return{replicated:n}}return}let r;switch(t){case vu.clustering:if(!Af.get(Pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Qk;break}Ss&&console.log("Restarting clustering"),wi.notify("Restarting clustering"),await Zk();break;case vu.clustering_config:case vu["clustering config"]:if(!Af.get(Pt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Qk;break}Ss&&console.log("Restarting clustering_config"),wi.notify("Restarting clustering_config"),await Zs.reloadClustering();break;case"custom_functions":case"custom functions":case vu.harperdb:case vu.http_workers:case vu.http:if(Ss&&!Bu){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Ss&&console.log("Restarting http_workers"),wi.notify("Restarting http_workers"),Ss?await Zs.restart(Pt.HDB_PROC_DESCRIPTOR):await Rm("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(wi.error(r),Ss&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(jb,"restartService");async function Uoe(){await Zk(),await Zs.restart(Pt.HDB_PROC_DESCRIPTOR),await Wb.async_set_timeout(2e3),Af.get(Pt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await Kb(),Ss&&(await gm.closeConnection(),process.exit(0))}a(Uoe,"restartPM2Mode");async function Zk(){if(!Jk.getConfigFromFile(Pt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await jk.getHDBProcessInfo()).clustering.length===0)wi.trace("Clustering not running, restart will start clustering services"),await Am.generateNatsConfig(!0),await Zs.startClusteringProcesses(),await Zs.startClusteringThreads(),await Kb(),Ss&&await gm.closeConnection();else{await Am.generateNatsConfig(!0),Bu?(wi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Zs.restart(Pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Zs.restart(Pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await jk.getHDBProcessInfo()).clustering.forEach(s=>{wi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await Wb.async_set_timeout(3e3),await Kb(),await gm.updateLocalStreams(),Ss&&await gm.closeConnection(),wi.trace("Restart clustering restarting ingest and reply service threads");let t=Rm(Pt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Rm(Pt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(Zk,"restartClustering");async function Kb(){await Am.removeNatsConfig(Pt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Am.removeNatsConfig(Pt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(Kb,"removeNatsConfig")});var dF=N((Zwe,uF)=>{"use strict";var Xwe=require("lodash"),gn=M(),{handleHDBError:tF,hdb_errors:voe}=_e(),{HDB_ERROR_MSGS:Boe,HTTP_STATUS_CODES:Hoe}=voe,zb=j();uF.exports={getRolePermissions:koe};var Fc=Object.create(null),xoe=a(e=>({key:e,perms:{}}),"perms_template_obj"),iF=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),oF=a((e=!1,t=!1,r=!1,n=!1)=>({[gn.PERMS_CRUD_ENUM.READ]:e,[gn.PERMS_CRUD_ENUM.INSERT]:t,[gn.PERMS_CRUD_ENUM.UPDATE]:r,[gn.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),Qb=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...oF(t,r,n,s)}),"table_perms_template"),rF=a((e,t=oF())=>({attribute_name:e,describe:lF(t),[Rf]:t[Rf],[Jb]:t[Jb],[Xb]:t[Xb]}),"attr_perms_template"),nF=a((e,t=!1)=>({attribute_name:e,describe:t,[Rf]:t}),"timestamp_attr_perms_template"),{READ:Rf,INSERT:Jb,UPDATE:Xb}=gn.PERMS_CRUD_ENUM,aF=Object.values(gn.PERMS_CRUD_ENUM),cF=[Rf,Jb,Xb];function koe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[gn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Fc[t]&&Fc[t].key===n)return Fc[t].perms;let s=Foe(e,r);return Fc[t]?Fc[t].key=n:Fc[t]=xoe(n),Fc[t].perms=s,s}catch(r){if(!e[gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[gn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<gn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw zb.error(n),zb.debug(r),tF(new Error,Boe.OUTDATED_PERMS_TRANSLATION_ERROR,Hoe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
16
+ ${r.stack}`;throw zb.error(n),tF(new Error)}}}a(koe,"getRolePermissions");function Foe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[gn.SYSTEM_SCHEMA_NAME]=n[gn.SYSTEM_SCHEMA_NAME],r.structure_user=n.structure_user;let s=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(s===!0||s.indexOf(i)>-1){r[i]=Goe(t[i]);return}r[i]=iF(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],l=t[i][o],u=qoe(c,l);r[i].describe||aF.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=Qb()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=Qb()})}),r}a(Foe,"translateRolePermissions");function Goe(e){let t=iF(!0);return Object.keys(e).forEach(r=>{t.tables[r]=Qb(!0,!0,!0,!0,!0)}),t}a(Goe,"createStructureUserPermissions");function qoe(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:_}=d,E=d;return gn.TIME_STAMP_NAMES.includes(_)&&(E=nF(_,d[Rf])),u[_]=E,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=rF(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=lF(d),s.attribute_permissions.push(d),c||$oe(d,l)}else if(u!==o){let d;gn.TIME_STAMP_NAMES.includes(u)?d=nF(u):d=rF(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=sF(s),s}else return e.describe=sF(e),e}a(qoe,"getTableAttrPerms");function sF(e){return aF.filter(t=>e[t]).length>0}a(sF,"getSchemaTableDescribePerm");function lF(e){return cF.filter(t=>e[t]).length>0}a(lF,"getAttributeDescribePerm");function $oe(e,t){cF.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a($oe,"checkForHashPerms")});var _F={};je(_F,{Headers:()=>ho,appendHeader:()=>ym,mergeHeaders:()=>Zb});function ym(e,t,r,n){if(e.append)e.append(t,r,n);else if(e.set){let s=e.get(t);if(s)if(n)r=(typeof s=="string"?s:s.join(", "))+", "+r;else if(typeof s=="string")r=[s,r];else{s.push(r);return}return e.set(t,r)}else e[t]=(e[t]?e[t]+", ":"")+r}function Zb(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new ho(e));for(let[r,n]of t)e.has(r)?r.toLowerCase()==="set-cookie"&&e.append?.(r,n,!0):e.set(r,n);return e}var ho,yf=Ie(()=>{ho=class extends Map{static{a(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(ym,"appendHeader");a(Zb,"mergeHeaders")});var bf={};je(bf,{authentication:()=>TF,bypassAuth:()=>Qoe,login:()=>Xoe,logout:()=>Zoe,start:()=>Joe});function Qoe(){SF=!0}async function TF(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?Woe?Yoe:[]:Koe?Voe:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=Yn.get(gr.CONFIG_PARAMS.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",T=new ho([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return bm&&T.set("Access-Control-Allow-Credentials","true"),{status:200,headers:T}}o.push("Access-Control-Allow-Origin",i),bm&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(bm){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let T of h)if(T.startsWith(f)){let m=T.indexOf(";");l=T.slice(f.length,m===-1?T.length:m),u=await fF.get(l);break}e.session=u||(u={})}let d=a((f,h,T)=>{let m=new xu.AuthAuditLog(f,h,gr.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);m.auth_strategy=T,l&&(m.session_id=l),r.referer&&(m.referer=r.referer),r.origin&&(m.origin=r.origin),h===gr.AUTH_AUDIT_STATUS.SUCCESS?eO.notify(m):eO.error(m)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&eO.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await it.getUser(f,null,e),d(f,gr.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,xu.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let _;if(!e.user)if(n){if(_=Gc.get(n),!_){let f=n.indexOf(" "),h=n.slice(0,f),T=n.slice(f+1),m,g;try{switch(h){case"Basic":let S=atob(T),y=S.indexOf(":");m=S.slice(0,y),g=S.slice(y+1),_=m||g?await it.getUser(m,g,e):null;break;case"Bearer":try{_=await(0,Om.validateOperationToken)(T)}catch(I){if(I.message==="invalid token")try{return await(0,Om.validateRefreshToken)(T),c({status:-1})}catch{throw I}}break}}catch(S){return zoe&&(Gc.get(T)||(Gc.set(T,T),d(m,gr.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:qc({error:S.message},e)})}Gc.set(n,_),joe&&d(_.username,gr.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=_}else u?.user?e.user=await it.getUser(u.user,null,e):(SF&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,hF.getSuperUser)());bm&&(e.session.update=function(f){if(!l){l=(0,pF.v4)();let T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):E?.headers?.set&&E.headers.set("Set-Cookie",T)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=l,fF.put(f)},e.login=async function(f,h){e.user=await it.getUser(f,h,e),e.session.update({user:e.user&&(e.user.getId?.()??e.user.username)})});let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Oi.loginPath?(E.status=302,E.headers.set("Location",Oi.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new ho);for(let _=0;_<u;){let E=o[_++];d.set(E,o[_++])}}return o=null,l}a(c,"applyResponseHeaders")}function Joe({server:e,port:t,securePort:r}){e.http(TF,t||r?{port:t,securePort:r}:{port:"all"}),EF||(EF=!0,setInterval(()=>{Gc=new Map},Yn.get(gr.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),mF.user.addListener(()=>{Gc=new Map}))}async function Xoe(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password??""),"Login successful"}async function Zoe(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var hF,Om,pF,Yn,gr,xu,mF,eO,Voe,Koe,Yoe,Woe,fF,bm,SF,joe,zoe,Gc,EF,Nm=Ie(()=>{hF=L(xn());qr();Zl();Om=L(cu());De();pF=require("uuid"),Yn=L(se()),gr=L(M()),xu=L(j()),mF=L(f_());yf();$c();eO=(0,xu.loggerWithTag)("auth-event");Yn.initSync();Voe=Yn.get(gr.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Koe=Yn.get(gr.CONFIG_PARAMS.HTTP_CORS),Yoe=Yn.get(gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Woe=Yn.get(gr.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),fF=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),bm=Yn.get(gr.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,SF=process.env.AUTHENTICATION_AUTHORIZELOCAL??Yn.get(gr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,joe=Yn.get(gr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,zoe=Yn.get(gr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Gc=new Map;it.onInvalidatedUser(()=>{Gc=new Map});a(Qoe,"bypassAuth");a(TF,"authentication");a(Joe,"start");a(Xoe,"login");a(Zoe,"logout")});var NF=N((cCe,OF)=>{"use strict";var ye=require("joi"),gF=require("fs-extra"),AF=require("path"),Wn=gt(),RF=se(),yF=M(),bF=j(),{hdb_errors:eae}=_e(),{HDB_ERROR_MSGS:Qr}=eae,po=/^[a-zA-Z0-9-_]+$/,tae=/^[a-zA-Z0-9-_]+$/;OF.exports={getDropCustomFunctionValidator:nae,setCustomFunctionValidator:sae,addComponentValidator:cae,dropCustomFunctionProjectValidator:lae,packageComponentValidator:uae,deployComponentValidator:dae,setComponentFileValidator:iae,getComponentFileValidator:aae,dropComponentFileValidator:oae,addSSHKeyValidator:_ae,updateSSHKeyValidator:fae,deleteSSHKeyValidator:Eae,setSSHKnownHostsValidator:hae};function Im(e,t,r){try{let n=RF.get(yF.CONFIG_PARAMS.COMPONENTSROOT),s=AF.join(n,t);return gF.existsSync(s)?e?t:r.message(Qr.PROJECT_EXISTS):e?r.message(Qr.NO_PROJECT):t}catch(n){return bF.error(n),r.message(Qr.VALIDATION_ERR)}}a(Im,"checkProjectExists");function Of(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Of,"checkFilePath");function rae(e,t,r,n){try{let s=RF.get(yF.CONFIG_PARAMS.COMPONENTSROOT),i=AF.join(s,e,t,r+".js");return gF.existsSync(i)?r:n.message(Qr.NO_FILE)}catch(s){return bF.error(s),n.message(Qr.VALIDATION_ERR)}}a(rae,"checkFileExists");function nae(e){let t=ye.object({project:ye.string().pattern(po).custom(Im.bind(null,!0)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().pattern(po).custom(rae.bind(null,e.project,e.type)).custom(Of).required().messages({"string.pattern.base":Qr.BAD_FILE_NAME})});return Wn.validateBySchema(e,t)}a(nae,"getDropCustomFunctionValidator");function sae(e){let t=ye.object({project:ye.string().pattern(po).custom(Im.bind(null,!0)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),type:ye.string().valid("helpers","routes").required(),file:ye.string().custom(Of).required(),function_content:ye.string().required()});return Wn.validateBySchema(e,t)}a(sae,"setCustomFunctionValidator");function iae(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),file:ye.string().custom(Of).required(),payload:ye.string().allow("").optional(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Wn.validateBySchema(e,t)}a(iae,"setComponentFileValidator");function oae(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),file:ye.string().custom(Of).optional()});return Wn.validateBySchema(e,t)}a(oae,"dropComponentFileValidator");function aae(e){let t=ye.object({project:ye.string().required(),file:ye.string().custom(Of).required(),encoding:ye.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Wn.validateBySchema(e,t)}a(aae,"getComponentFileValidator");function cae(e){let t=ye.object({project:ye.string().pattern(po).custom(Im.bind(null,!1)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME})});return Wn.validateBySchema(e,t)}a(cae,"addComponentValidator");function lae(e){let t=ye.object({project:ye.string().pattern(po).custom(Im.bind(null,!0)).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME})});return Wn.validateBySchema(e,t)}a(lae,"dropCustomFunctionProjectValidator");function uae(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),skip_node_modules:ye.boolean(),skip_symlinks:ye.boolean()});return Wn.validateBySchema(e,t)}a(uae,"packageComponentValidator");function dae(e){let t=ye.object({project:ye.string().pattern(po).required().messages({"string.pattern.base":Qr.BAD_PROJECT_NAME}),package:ye.string().optional(),restart:ye.alternatives().try(ye.boolean(),ye.string().valid("rolling")).optional()});return Wn.validateBySchema(e,t)}a(dae,"deployComponentValidator");function _ae(e){let t=ye.object({name:ye.string().pattern(tae).required().messages({"string.pattern.base":Qr.BAD_SSH_KEY_NAME}),key:ye.string().required(),host:ye.string().required(),hostname:ye.string().required(),known_hosts:ye.string().optional()});return Wn.validateBySchema(e,t)}a(_ae,"addSSHKeyValidator");function fae(e){let t=ye.object({name:ye.string().required(),key:ye.string().required()});return Wn.validateBySchema(e,t)}a(fae,"updateSSHKeyValidator");function Eae(e){let t=ye.object({name:ye.string().required()});return Wn.validateBySchema(e,t)}a(Eae,"deleteSSHKeyValidator");function hae(e){let t=ye.object({known_hosts:ye.string().required()});return Wn.validateBySchema(e,t)}a(hae,"setSSHKnownHostsValidator")});var wf=N((uCe,LF)=>{"use strict";var wm=require("joi"),ma=require("path"),ku=require("fs-extra"),{exec:pae}=require("child_process"),mae=require("util"),IF=mae.promisify(pae),Vc=M(),{handleHDBError:Nf,hdb_errors:Sae}=_e(),{HTTP_STATUS_CODES:If}=Sae,Kc=se(),Tae=gt(),Yc=j();Kc.initSync();var tO=Kc.get(Vc.CONFIG_PARAMS.COMPONENTSROOT),wF="npm install --force --omit=dev --json",gae=`${wF} --dry-run`,Aae=Kc.get(Vc.CONFIG_PARAMS.ROOTPATH),Cm=ma.join(Aae,"ssh");LF.exports={installModules:Oae,auditModules:Nae,installAllRootModules:Rae,uninstallRootModule:yae,linkHarperdb:bae,runCommand:Fu};async function Rae(e=!1,t=Kc.get(Vc.CONFIG_PARAMS.ROOTPATH)){await Dm();let r=!1,n=process.env;ku.pathExistsSync(Cm)&&ku.readdirSync(Cm).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+ma.join(Cm,"config")+" -o UserKnownHostsFile="+ma.join(Cm,"known_hosts"),...process.env},r=!0)});try{let s=Kc.get(Vc.CONFIG_PARAMS.ROOTPATH),i=ma.join(s,"node_modules","harperdb");ku.lstatSync(i).isSymbolicLink()&&ku.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&Yc.error("Error removing symlink:",s)}await Fu(e?"npm install --force --ignore-scripts --no-bin-links":"npm install --force --no-bin-links",t,n)}a(Rae,"installAllRootModules");async function yae(e){await Fu(`npm uninstall ${e}`,Kc.get(Vc.CONFIG_PARAMS.ROOTPATH))}a(yae,"uninstallRootModule");async function bae(){await Dm(),await Fu(`npm link ${Vc.PACKAGE_ROOT}`,Kc.get(Vc.CONFIG_PARAMS.ROOTPATH))}a(bae,"linkHarperdb");async function Fu(e,t=void 0,r=process.env){let n,s;try{({stdout:n,stderr:s}=await IF(e,{cwd:t,env:r}))}catch(i){throw new Error(i.stderr.replace(`
17
17
  `,""))}return s&&!s.includes("Debugger listening")&&!s.includes("warn using --force")&&Yc.error("Error running NPM command:",e,s),Yc.trace(n,s),n?.replace(`
18
- `,"")}a(qu,"runCommand");async function Oae(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Yc.warn(t,e);let r=PF(e);if(r)throw Fu(r,r.message,Gu.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?gae:wF;await Dm(),await DF(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let d=ma.join(tO,u),_,E=null;try{let{stdout:f,stderr:h}=await IF(i,{cwd:d});_=f?f.replace(`
18
+ `,"")}a(Fu,"runCommand");async function Oae(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Yc.warn(t,e);let r=PF(e);if(r)throw Nf(r,r.message,If.BAD_REQUEST);let{projects:n,dry_run:s}=e,i=s===!0?gae:wF;await Dm(),await DF(n);let o={};for(let c=0,l=n.length;c<l;c++){let u=n[c];o[u]={npm_output:null,npm_error:null};let d=ma.join(tO,u),_,E=null;try{let{stdout:f,stderr:h}=await IF(i,{cwd:d});_=f?f.replace(`
19
19
  `,""):null,E=h?h.replace(`
20
20
  `,""):null}catch(f){f.stderr?o[u].npm_error=CF(f.stderr):o[u].npm_error=f.message;continue}try{o[u].npm_output=JSON.parse(_)}catch{o[u].npm_output=_}try{o[u].npm_error=JSON.parse(E)}catch{o[u].npm_error=E}}return Yc.info(`finished installModules with response ${o}`),o.warning=t,o}a(Oae,"installModules");function CF(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
21
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(CF,"parseNPMStdErr");async function Nae(e){Yc.info(`starting auditModules for request: ${e}`);let t=PF(e);if(t)throw Fu(t,t.message,Gu.BAD_REQUEST);let{projects:r}=e;await Dm(),await DF(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=ma.join(tO,o);n[o]={npm_output:null,npm_error:null};try{let l=await qu("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=CF(l.stderr)}}return Yc.info(`finished auditModules with response ${n}`),n}a(Nae,"auditModules");async function Dm(){try{return await qu("npm -v"),!0}catch{throw Fu(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Gu.BAD_REQUEST,void 0,void 0,!0)}}a(Dm,"checkNPMInstalled");async function DF(e){if(!Array.isArray(e)||e.length===0)throw Fu(new Error,"projects argument must be an array with at least 1 element",Gu.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=ma.join(tO,i.toString());if(!await ku.pathExists(o)){t.push(i);continue}let l=ma.join(o,"package.json");await ku.pathExists(l)||r.push(i)}if(t.length>0)throw Fu(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Gu.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Fu(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Gu.BAD_REQUEST,void 0,void 0,!0)}a(DF,"checkProjectPaths");function PF(e){let t=wm.object({projects:wm.array().min(1).items(wm.string()).required(),dry_run:wm.boolean().default(!1)});return Tae.validateBySchema(e,t)}a(PF,"modulesValidator")});var rO=N((_Ce,xF)=>{"use strict";var Ts=require("fs-extra"),Df=require("path"),Cf=j(),MF=re(),Pm=M(),HF=se(),Iae=Ct();xF.exports=wae;async function wae(){let e=Cae(),t=HF.get(Pm.CONFIG_PARAMS.ROOTPATH),r=Df.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Pm.PACKAGE_ROOT}},s=Df.join(t,"node_modules");Ts.ensureDirSync(s);let i,o=!0,c=!1;try{i=Ts.readJsonSync(r)}catch(l){if(MF.isEmptyOrZeroLength(e))return;if(l.code!==Pm.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!MF.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=vF(u);n.dependencies[l]=d+u}if(!o){Cf.notify("Installing components"),await BF(r,n,null),await UF(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],_=vF(u);if(d===void 0||d!==_+u){c=!0;break}if(u.startsWith("file:"))try{if(Ts.statSync(new URL(u+"/package.json")).mtimeMs>Ts.statSync(r).mtimeMs){c=!0;break}}catch(E){Cf.info(`Error checking ${u}/package.json modification time`,E);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Cf.notify("Removing component",l),c=!0);c&&(Cf.notify("Updating components."),await BF(r,n,i),await UF(t,e))}a(wae,"installComponents");function UF(e,t){return Promise.all(t.map(({name:r})=>{let n=Df.join(e,"node_modules",r),s=Df.join(e,"components",r);if(Ts.existsSync(n)&&Ts.lstatSync(n).isDirectory())return Ts.move(n,s,{overwrite:!0}).then(()=>{Ts.symlink(s,n)})}))}a(UF,"moveModuleToComponents");function Cae(){let e=Iae.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Cae,"getComponentsConfig");function vF(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Df.extname(e)||Ts.existsSync(e)?"file:":"github:"}a(vF,"getPkgPrefix");async function BF(e,t,r){Cf.trace("npm installing components package.json",t),Ts.writeFileSync(e,JSON.stringify(t,null," "));try{await wf().installAllRootModules(HF.get(Pm.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ts.writeFileSync(e,JSON.stringify(r,null," ")):Ts.unlinkSync(e),n}}a(BF,"installPackages")});var qF={};je(qF,{packageDirectory:()=>Dae});function Dae(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];FF.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,kF.join)("cache","webpack")):void 0}).pipe((0,GF.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var kF,FF,GF,$F=Ie(()=>{kF=require("path"),FF=L(require("tar-fs")),GF=require("node:zlib");a(Dae,"packageDirectory")});var cO=N((mCe,WF)=>{var vm=require("clone"),Bm=gt(),Pae=re(),Mm=M(),hCe=j(),nO=require("fs"),iO=require("joi"),{string:Um}=iO.types(),{hdb_errors:Lae,handleHDBError:Lm}=_e(),{HDB_ERROR_MSGS:pCe,HTTP_STATUS_CODES:sO}=Lae,{common_validators:$u}=mi(),VF=" is required",Mae=["insert","update","upsert"],oO={database:{presence:!1,format:$u.schema_format,length:$u.schema_length},schema:{presence:!1,format:$u.schema_format,length:$u.schema_length},table:{presence:!0,format:$u.schema_format,length:$u.schema_length},action:{inclusion:{within:Mae,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Uae={schema:Um.required(),table:Um.required(),action:Um.valid("insert","update","upsert")},{AWS_ACCESS_KEY:vae,AWS_SECRET:Bae,AWS_BUCKET:Hae,AWS_FILE_KEY:xae,REGION:kae}=Mm.S3_BUCKET_AUTH_KEYS,Fae={s3:{presence:!0},[`s3.${vae}`]:{presence:!0,type:"String"},[`s3.${Bae}`]:{presence:!0,type:"String"},[`s3.${Hae}`]:{presence:!0,type:"String"},[`s3.${xae}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${kae}`]:{presence:!0,type:"String"}},KF=vm(oO);KF.data.presence={message:VF};var YF=vm(oO);YF.file_path.presence={message:VF};var Gae=Object.assign(vm(oO),Fae),aO=vm(Uae);aO.csv_url=Um.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();aO.passthrough_headers=iO.object();function qae(e){let t=Bm.validateObject(e,KF);return Hm(e,t)}a(qae,"dataObject");function $ae(e){let t=Bm.validateBySchema(e,iO.object(aO));return Hm(e,t)}a($ae,"urlObject");function Vae(e){let t=Bm.validateObject(e,YF);return Hm(e,t)}a(Vae,"fileObject");function Kae(e){let t=Bm.validateObject(e,Gae);return Hm(e,t)}a(Kae,"s3FileObject");function Hm(e,t){if(!t){let r=Pae.checkGlobalSchemaTable(e.schema,e.table);if(r)return Lm(new Error,r,sO.BAD_REQUEST);if(e.operation===Mm.OPERATIONS_ENUM.CSV_FILE_LOAD)try{nO.accessSync(e.file_path,nO.constants.R_OK|nO.constants.F_OK)}catch(n){return n.code===Mm.NODE_ERROR_CODES.ENOENT?Lm(n,`No such file or directory ${n.path}`,sO.BAD_REQUEST):n.code===Mm.NODE_ERROR_CODES.EACCES?Lm(n,`Permission denied ${n.path}`,sO.BAD_REQUEST):Lm(n)}}return t}a(Hm,"postValidateChecks");WF.exports={dataObject:qae,urlObject:$ae,fileObject:Vae,s3FileObject:Kae}});var lO=N((TCe,jF)=>{"use strict";var Pf=j(),xm=M();async function Yae(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===xm.OPERATIONS_ENUM.INSERT||t.operation===xm.OPERATIONS_ENUM.UPDATE||t.operation===xm.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===xm.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Pf.info(i.message),i):i.http_resp_msg?(Pf.error(`Error calling operation: ${e.name}`),Pf.error(i.http_resp_msg),i):(Pf.error(`Error calling operation: ${e.name}`),Pf.error(i),i)}}a(Yae,"callOperationFunctionAsAwait");jF.exports={callOperationFunctionAsAwait:Yae}});var uO=N((ACe,QF)=>{"use strict";var{S3:Wae,GetObjectCommand:jae}=require("@aws-sdk/client-s3");QF.exports={getFileStreamFromS3:zae,getS3AuthObj:zF};async function zae(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await zF(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new jae(r))).Body}a(zae,"getFileStreamFromS3");function zF(e,t,r){return new Wae({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(zF,"getS3AuthObj")});var XF=N((yCe,JF)=>{"use strict";var dO=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}},_O=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};JF.exports={BulkLoadFileObject:dO,BulkLoadDataObject:_O}});var eG=N((OCe,ZF)=>{"use strict";var fO=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}};ZF.exports=fO});var rG=N((ICe,tG)=>{"use strict";var EO=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};tG.exports=EO});var pO=N((CCe,sG)=>{"use strict";var nG=eG(),Qae=rG(),{HDB_ERROR_MSGS:Jae}=Dn(),hO=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Jae.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 nG(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Qae(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 nG(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}};sG.exports=hO});var oG=N((PCe,iG)=>{"use strict";var mO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};iG.exports=mO});var yO=N((HCe,yG)=>{"use strict";var km=cn(),Gm=cO(),Xae=require("needle"),ei=M(),MCe=It(),Vu=re(),{handleHDBError:kt,hdb_errors:hG}=_e(),{HTTP_STATUS_CODES:Lr,HDB_ERROR_MSGS:gr,CHECK_LOGS_WRAPPER:jc}=hG,Ku=j(),SO=require("papaparse");Vu.promisifyPapaParse();var ti=require("fs-extra"),Zae=require("path"),{chain:aG}=require("stream-chain"),cG=require("stream-json/streamers/StreamArray"),lG=require("stream-json/utils/Batch"),uG=require("stream-chain/utils/comp"),{finished:dG}=require("stream"),ece=se(),pG=lO(),tce=uO(),{BulkLoadFileObject:gO,BulkLoadDataObject:rce}=XF(),AO=pO(),{verifyBulkLoadAttributePerms:mG}=qm(),UCe=oG(),vCe=Tr(),BCe=Xi(),{databases:nce}=(De(),oe(lt)),{coerceType:sce}=(Lf(),oe(bO)),_G="No records parsed from csv file.",Wc=`${ece.get("HDB_ROOT")}/tmp`,{schema_regex:ice}=mi(),fG=1024*1024*2,EG=5e3,oce={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};yG.exports={csvDataLoad:ace,csvURLLoad:cce,csvFileLoad:lce,importFromS3:uce};async function ace(e,t){let r=Gm.dataObject(e);if(r)throw kt(r,r.message,Lr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=gG(e.schema,e.table),i=SO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:TO.bind(null,s),dynamicTyping:!1}),o=new AO;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&mG(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw kt(new Error,c,Lr.BAD_REQUEST,void 0,void 0,!0);let l=new rce(e.action,e.schema,e.table,i.data);return n=await pG.callOperationFunctionAsAwait(AG,l,null),n.message===_G?_G:RG(n.records,n.number_written)}catch(s){throw zc(s)}}a(ace,"csvDataLoad");async function cce(e){let t=Gm.urlObject(e);if(t)throw kt(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Wc}/${r}`;try{await dce(e,r)}catch(s){throw Ku.error(gr.DOWNLOAD_FILE_ERR(r)+" - "+s),kt(s,jc(gr.DOWNLOAD_FILE_ERR(r)))}try{let s=new gO(this.job_operation_function.name,e.action,e.schema,e.table,n,ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await RO(s);return await Fm(n),i}catch(s){throw await Fm(n),zc(s)}}a(cce,"csvURLLoad");async function lce(e){let t=Gm.fileObject(e);if(t)throw kt(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r=new gO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await RO(r)}catch(n){throw zc(n)}}a(lce,"csvFileLoad");async function uce(e){let t=Gm.s3FileObject(e);if(t)throw kt(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Zae.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Wc}/${s}`;let i=new gO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await _ce(s,e);let o=await RO(i);return await Fm(r),o}catch(n){throw await Fm(r),zc(n)}}a(uce,"importFromS3");async function dce(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Xae("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw kt(n,s,n.statusCode,ei.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Ece(r,e.csv_url),await fce(t,r.raw)}a(dce,"downloadCSVFile");async function _ce(e,t){try{let r=`${Wc}/${e}`;await ti.mkdirp(Wc),await ti.writeFile(`${Wc}/${e}`,"",{flag:"a+"});let n=await ti.createWriteStream(r),s=await tce.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){Ku.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ku.error(gr.S3_DOWNLOAD_ERR+" - "+r),kt(r,jc(gr.S3_DOWNLOAD_ERR))}}a(_ce,"downloadFileFromS3");async function fce(e,t){try{await ti.mkdirp(Wc),await ti.writeFile(`${Wc}/${e}`,t)}catch(r){throw Ku.error(gr.WRITE_TEMP_FILE_ERR),kt(r,jc(gr.DEFAULT_BULK_LOAD_ERR))}}a(fce,"writeFileToTempFolder");async function Fm(e){if(e)try{await ti.access(e),await ti.unlink(e)}catch{Ku.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Fm,"deleteTempFile");function Ece(e,t){if(e.statusCode!==hG.HTTP_STATUS_CODES.OK)throw kt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Lr.BAD_REQUEST);if(!oce[e.headers["content-type"]])throw kt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Lr.BAD_REQUEST);if(!e.raw)throw kt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Lr.BAD_REQUEST)}a(Ece,"validateURLResponse");async function RO(e){try{let t;switch(e.file_type){case ei.VALID_S3_FILE_TYPES.CSV:t=await hce(e);break;case ei.VALID_S3_FILE_TYPES.JSON:t=await pce(e);break;default:throw kt(new Error,gr.DEFAULT_BULK_LOAD_ERR,Lr.BAD_REQUEST,ei.LOG_LEVELS.ERROR,gr.INVALID_FILE_EXT_ERR(e))}return RG(t.records,t.number_written)}catch(t){throw zc(t)}}a(RO,"fileLoad");async function SG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await km.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&mG(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=kt(c);r(l)}}a(SG,"validateChunk");async function TG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Vu.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Vu.isEmpty(c)&&!Vu.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await pG.callOperationFunctionAsAwait(AG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=kt(c,jc(gr.INSERT_CSV_ERR),Lr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,gr.INSERT_CSV_ERR+" - "+c);r(l)}}a(TG,"insertChunk");async function hce(e){let t={records:0,number_written:0},r=gG(e.schema,e.table);try{let n=new AO,s=ti.createReadStream(e.file_path,{highWaterMark:fG});s.setEncoding("utf8"),await SO.parsePromise(s,SG.bind(null,e,n),TO.bind(null,r));let i=n.getPermsResponse();if(i)throw kt(new Error,i,Lr.BAD_REQUEST);return s=ti.createReadStream(e.file_path,{highWaterMark:fG}),s.setEncoding("utf8"),await SO.parsePromise(s,TG.bind(null,e,t),TO.bind(null,r)),s.destroy(),t}catch(n){throw kt(n,jc(gr.PAPA_PARSE_ERR),Lr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,gr.PAPA_PARSE_ERR+n)}}a(hce,"callPapaParse");function gG(e,t){let r=nce[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>sce(i,s));return n}a(gG,"createTransformMap");function TO(e,t,r){let n=e.get(r);return n?n(t):Vu.autoCast(t)}a(TO,"typeFunction");async function pce(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new AO,s=aG([ti.createReadStream(e.file_path,{encoding:"utf-8"}),cG.withParser(),c=>c.value,new lG({batchSize:EG}),uG(async c=>{await SG(e,n,r,c)})]);await new Promise((c,l)=>{dG(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw kt(new Error,i,Lr.BAD_REQUEST);let o=aG([ti.createReadStream(e.file_path,{encoding:"utf-8"}),cG.withParser(),c=>c.value,new lG({batchSize:EG}),uG(async c=>{await TG(e,t,r,c)})]);return await new Promise((c,l)=>{dG(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw kt(n,jc(gr.INSERT_JSON_ERR),Lr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,gr.INSERT_JSON_ERR+n)}}a(pce,"insertJson");async function AG(e){let t={};try{e.data&&e.data.length>0&&mce(e.data[0])?t=await Sce(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ku.info(t.message))}catch(r){throw zc(r)}return t}a(AG,"callBulkFileLoad");function mce(e){let t=Object.keys(e);for(let r of t)if(!ice.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(mce,"validateColumnNames");async function Sce(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=km.insert;break;case"update":i=km.update;break;case"upsert":i=km.upsert;break;default:throw kt(new Error,gr.INVALID_ACTION_PARAM_ERR(n),Lr.BAD_REQUEST,ei.LOG_LEVELS.ERROR,gr.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,_=e.length;for(;_--;)o.skipped_hashes.indexOf(e[_][d])>=0&&e.splice(_,1)}let l=Vu.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw zc(o)}}a(Sce,"bulkFileLoad");function RG(e,t){return`successfully loaded ${t} of ${e} records`}a(RG,"buildResponseMsg");function zc(e){return kt(e,jc(gr.DEFAULT_BULK_LOAD_ERR),Lr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,gr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(zc,"buildTopLevelErrMsg")});var OG=N((kCe,bG)=>{"use strict";var OO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};bG.exports=OO});var wG=N((GCe,IG)=>{"use strict";var Tce=M(),NG=require("moment"),gce=require("uuid").v4,NO=class{static{a(this,"JobObject")}constructor(){this.id=gce(),this.type=void 0,this.start_datetime=NG().valueOf(),this.created_datetime=NG().valueOf(),this.end_datetime=void 0,this.status=Tce.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};IG.exports=NO});var IO=N(($Ce,DG)=>{"use strict";var gs=require("joi"),CG=gt();DG.exports={readTransactionLogValidator:Ace,deleteTransactionLogsBeforeValidator:Rce};function Ace(e){let t=gs.object({schema:gs.string(),database:gs.string(),table:gs.string().required(),from:gs.date().timestamp(),to:gs.date().timestamp(),limit:gs.number().min(1)});return CG.validateBySchema(e,t)}a(Ace,"readTransactionLogValidator");function Rce(e){let t=gs.object({schema:gs.string(),database:gs.string(),table:gs.string().required(),timestamp:gs.date().timestamp().required()});return CG.validateBySchema(e,t)}a(Rce,"deleteTransactionLogsBeforeValidator")});var wO=N((KCe,xG)=>{"use strict";var yce=require("uuid").v4,vG=cn(),BG=$r(),bce=$s(),Oce=Wl(),Nce=OG(),bt=M(),Ice=wG(),wce=gp(),ri=j(),Cce=Yd(),Yu=re(),{promisify:Dce}=require("util"),Qc=require("moment"),Pce=Vm(),$m=cO(),PG=EA(),{deleteTransactionLogsBeforeValidator:Lce}=IO(),{handleHDBError:LG,hdb_errors:Mce,ClientError:Uce}=_e(),{HTTP_STATUS_CODES:MG}=Mce,UG=BG.searchByValue,vce=BG.searchByHash,Bce=vG.insert,Hce=Dce(Pce.evaluateSQL),xce=vG.update;xG.exports={addJob:Gce,updateJob:$ce,handleGetJob:kce,handleGetJobsByStartDate:Fce,getJobById:HG};async function kce(e){if(e.id===void 0)throw new Uce("'id' is required");let t=await HG(e.id);return Yu.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(kce,"handleGetJob");async function Fce(e){try{let t=await qce(e);if(ri.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Qc(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Qc(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw ri.error(r),new Error(r)}}a(Fce,"handleGetJobsByStartDate");async function Gce(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Yu.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return ri.info(d),t.error=d,t}if(!bt.JOB_TYPE_ENUM[e.operation])return ri.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case bt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=$m.fileObject(e);break;case bt.OPERATIONS_ENUM.CSV_URL_LOAD:n=$m.urlObject(e);break;case bt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=$m.dataObject(e);break;case bt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=$m.s3FileObject(e);break;case bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=PG(e,"date");break;case bt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=PG(e,"timestamp");break;case bt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Lce(e);break;case bt.OPERATIONS_ENUM.RESTART_SERVICE:if(bt.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw LG(new Error,"Invalid service",MG.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw LG(n,n.message,MG.BAD_REQUEST,void 0,void 0,!0);let s=new Ice;s.type=e.operation===bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new bce(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await UG(i))}catch(d){let _=`There was an error inserting a new job: ${d}`;return ri.error(_),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=yce();try{o=await UG(i)}catch(d){let _=`There was an error inserting a new job: ${d}`;return ri.error(_),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ri.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Cce(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await Bce(l)}catch(d){return ri.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,ri.trace(d)}return t}a(Gce,"addJob");async function qce(e){let t=Qc(e.from_date,Qc.ISO_8601),r=Qc(e.to_date,Qc.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new Nce(n,e.hdb_user);try{return await Hce(s)}catch(i){throw ri.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(qce,"getJobsInDateRange");async function HG(e){if(Yu.isEmptyOrZeroLength(e))return Yu.errorizeMessage("Invalid job ID specified.");let t=new Oce(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await vce(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ri.error(n),Yu.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(HG,"getJobById");async function $ce(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Yu.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===bt.JOB_STATUS_ENUM.COMPLETE||e.status===bt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Qc().valueOf());let t=new wce(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await xce(t),r}a($ce,"updateJob")});var Wm=N((WCe,VG)=>{"use strict";var CO=M(),Mf=Tr(),kG=re(),FG=se(),GG=Xi(),qG=j(),{handleHDBError:Km,hdb_errors:Vce}=_e(),{HTTP_STATUS_CODES:Ym}=Vce,{readTransactionLogValidator:Kce,deleteTransactionLogsBeforeValidator:Yce}=IO(),$G=Un(),Wce="Logs successfully deleted from transaction log.",jce="All logs successfully deleted from transaction log.";VG.exports={readTransactionLog:zce,deleteTransactionLogsBefore:Jce};async function zce(e){let t=Kce(e);if(t)throw Km(t,t.message,Ym.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=kG.checkSchemaTableExist(e.database,e.table);if(r)throw Km(new Error,r,Ym.NOT_FOUND,void 0,void 0,!0);return FG.get(CO.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Qce(e):(qG.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),$G.readAuditLog(e))}a(zce,"readTransactionLog");async function*Qce(e){let t=GG.createNatsTableStreamName(e.database,e.table),r=await Mf.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===CO.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Qce,"readTransactionLogNats");async function Jce(e){let t=Yce(e);if(t)throw Km(t,t.message,Ym.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!FG.get(CO.CONFIG_PARAMS.CLUSTERING_ENABLED))return qG.info("Delete transaction logs called for Plexus"),$G.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=kG.checkSchemaTableExist(r,n);if(i)throw Km(new Error,i,Ym.NOT_FOUND,void 0,void 0,!0);let o=GG.createNatsTableStreamName(r,n),{jsm:c}=await Mf.getNATSReferences(),l=await Mf.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=Wce,_,E=new Date(l.state.last_ts).getTime();return s>E?(_=l.state.last_seq+1,d=jce):_=(await Mf.viewStream(o,parseInt(s),1))[0].nats_sequence,await Mf.purgeTableStream(r,n,{seq:_}),d}a(Jce,"deleteTransactionLogsBefore")});var XG=N((zCe,JG)=>{"use strict";var KG=re(),Ar=M(),Xce=require("moment"),jm=yO(),Uf=j(),YG=wO(),WG=zm(),jG=oc(),zG=dt(),Zce=Wm(),ele=Hu(),{parentPort:tle,isMainThread:QG}=require("worker_threads"),{onMessageByType:rle}=dt(),DO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function nle(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(KG.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(KG.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ar.JOB_TYPE_ENUM.csv_file_load:await Ci(e,jm.csvFileLoad);break;case Ar.JOB_TYPE_ENUM.csv_url_load:await Ci(e,jm.csvURLLoad);break;case Ar.JOB_TYPE_ENUM.csv_data_load:await Ci(e,jm.csvDataLoad);break;case Ar.JOB_TYPE_ENUM.import_from_s3:await Ci(e,jm.importFromS3);break;case Ar.JOB_TYPE_ENUM.empty_trash:break;case Ar.JOB_TYPE_ENUM.export_local:await Ci(e,WG.export_local);break;case Ar.JOB_TYPE_ENUM.export_to_s3:await Ci(e,WG.export_to_s3);break;case Ar.JOB_TYPE_ENUM.delete_files_before:case Ar.JOB_TYPE_ENUM.delete_records_before:await Ci(e,jG.deleteFilesBefore);break;case Ar.JOB_TYPE_ENUM.delete_audit_logs_before:await Ci(e,jG.deleteAuditLogsBefore);break;case Ar.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ci(e,Zce.deleteTransactionLogsBefore);break;case Ar.JOB_TYPE_ENUM.restart_service:return await Ci(e,ele.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(nle,"parseMessage");async function Ci(e,t){try{e.job.status=Ar.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Xce().valueOf(),await YG.updateJob(e.job),await sle(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Uf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Uf.error(n),e.job.message=n,e.job.status=Ar.JOB_STATUS_ENUM.ERROR;try{await YG.updateJob(e.job)}catch(s){throw Uf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ci,"runJob");async function sle(e){Uf.trace("launching job thread:",e),QG?zG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ar.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):tle.postMessage({type:Ar.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(sle,"launchJobThread");QG&&rle(Ar.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{zG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ar.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Uf.error(r)}});JG.exports={parseMessage:nle,RunnerMessage:DO}});var eq=N((JCe,ZG)=>{"use strict";var PO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};ZG.exports=PO});var xO=N((eDe,HO)=>{"use strict";var eS=$r(),UO=Vm(),Qm=yO(),mo=Gp(),Jm=Zi(),Bf=oc(),ile=Ly(),vf=xn(),Xm=Z_(),Lt=kO(),Zm=j(),ole=$y(),ale=tm(),tq=hb(),cle=nm(),lle=Sb(),ule=Tb(),dle=Rb(),_le=bb(),LO=am(),rq=zm(),fle=qm(),vO=wO(),$=M(),{hdb_errors:xf,handleHDBError:Hf}=_e(),{HTTP_STATUS_CODES:nq}=xf,MO=Pb(),sq=Hu(),Eq=require("util"),ju=cn(),Ele=Fs(),hle=bu(),iq=XG(),oq=cu(),aq=(Nm(),oe(Nf)),cq=Ct(),lq=Wm(),uq=wf(),{setServerUtilities:ple}=(Lf(),oe(bO)),{CONTEXT:ZCe}=(Vs(),oe(uR)),{_assignPackageExport:mle}=_i(),{transformReq:Sle}=re(),{server:Tle}=(qr(),oe(ja)),Jr=Zm.loggerWithTag("operation"),Wu=Js(),dq=(Mc(),oe(Lc)),gle=lO(),_q=eS.searchByHash,Ale=eS.searchByValue,Rle=Eq.promisify(eS.search),yle=Eq.promisify(UO.evaluateSQL),ble={[$.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.CREATE_TABLE]:!0,[$.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[$.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.DROP_TABLE]:!0,[$.OPERATIONS_ENUM.DROP_SCHEMA]:!0},J=eq();async function hq(e,t){try{if(e.body.operation!=="read_log"&&(Zm.log_level===$.LOG_LEVELS.INFO||Zm.log_level===$.LOG_LEVELS.DEBUG||Zm.log_level===$.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;Jr.info(c)}}catch(n){Jr.error(n)}let r=await gle.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ble[e.body.operation]&&Ele.setSchemaDataToGlobal(n=>{n&&Jr.error(n)}),r}a(hq,"processLocalTransaction");var fq=Nle();HO.exports={chooseOperation:pq,getOperationFunction:mq,operation:BO,processLocalTransaction:hq,executeJob:As};ple(HO.exports);Tle.operation=BO;function pq(e){let t;try{t=mq(e)}catch(s){throw Jr.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=UO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=UO.checkASTPermissions(e,i);if(o)throw Jr.error(`${nq.FORBIDDEN} from operation ${e.operation}`),Jr.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),Hf(new Error,o,xf.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==$.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==$.OPERATIONS_ENUM.LOGIN&&e.operation!==$.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=fle.verifyPerms(i,s);if(o)throw Jr.error(`${nq.FORBIDDEN} from operation ${e.operation}`),Jr.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),Hf(new Error,o,xf.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Hf(s,"There was an error when trying to choose an operation path")}return r}a(pq,"chooseOperation");function mq(e){if(Jr.trace(`getOperationFunction with operation: ${e.operation}`),fq.has(e.operation))return fq.get(e.operation);throw Hf(new Error,xf.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),xf.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(mq,"getOperationFunction");mle("operation",BO);function BO(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=pq(e);return hq({body:e},n)}a(BO,"operation");async function Ole(e){Jr.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[$.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case $.OPERATIONS_ENUM.INSERT:o=await ju.insert(i);break;case $.OPERATIONS_ENUM.UPDATE:o=await ju.update(i);break;case $.OPERATIONS_ENUM.UPSERT:o=await ju.upsert(i);break;case $.OPERATIONS_ENUM.DELETE:o=await Bf.deleteRecord(i);break;default:Jr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Jr.info("Invalid operation in transaction"),Jr.error(o)}}a(Ole,"catchup");async function As(e){Sle(e);let t,r;try{r=await vO.addJob(e),t=r.createdJob,Jr.info("addJob result",r);let n=new iq.RunnerMessage(t,e);return{message:await iq.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Jr.error(s),Hf(n,s)}}a(As,"executeJob");function Nle(){let e=new Map;return e.set($.OPERATIONS_ENUM.INSERT,new J(ju.insert)),e.set($.OPERATIONS_ENUM.UPDATE,new J(ju.update)),e.set($.OPERATIONS_ENUM.UPSERT,new J(ju.upsert)),e.set($.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new J(eS.searchByConditions)),e.set($.OPERATIONS_ENUM.SEARCH_BY_HASH,new J(_q)),e.set($.OPERATIONS_ENUM.SEARCH_BY_ID,new J(_q)),e.set($.OPERATIONS_ENUM.SEARCH_BY_VALUE,new J(Ale)),e.set($.OPERATIONS_ENUM.SEARCH,new J(Rle)),e.set($.OPERATIONS_ENUM.SQL,new J(yle)),e.set($.OPERATIONS_ENUM.CSV_DATA_LOAD,new J(As,Qm.csvDataLoad)),e.set($.OPERATIONS_ENUM.CSV_FILE_LOAD,new J(As,Qm.csvFileLoad)),e.set($.OPERATIONS_ENUM.CSV_URL_LOAD,new J(As,Qm.csvURLLoad)),e.set($.OPERATIONS_ENUM.IMPORT_FROM_S3,new J(As,Qm.importFromS3)),e.set($.OPERATIONS_ENUM.CREATE_SCHEMA,new J(mo.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_DATABASE,new J(mo.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_TABLE,new J(mo.createTable)),e.set($.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new J(mo.createAttribute)),e.set($.OPERATIONS_ENUM.DROP_SCHEMA,new J(mo.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_DATABASE,new J(mo.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_TABLE,new J(mo.dropTable)),e.set($.OPERATIONS_ENUM.DROP_ATTRIBUTE,new J(mo.dropAttribute)),e.set($.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new J(Jm.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_DATABASE,new J(Jm.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_TABLE,new J(Jm.describeTable)),e.set($.OPERATIONS_ENUM.DESCRIBE_ALL,new J(Jm.describeAll)),e.set($.OPERATIONS_ENUM.DELETE,new J(Bf.deleteRecord)),e.set($.OPERATIONS_ENUM.ADD_USER,new J(vf.addUser)),e.set($.OPERATIONS_ENUM.ALTER_USER,new J(vf.alterUser)),e.set($.OPERATIONS_ENUM.DROP_USER,new J(vf.dropUser)),e.set($.OPERATIONS_ENUM.LIST_USERS,new J(vf.listUsersExternal)),e.set($.OPERATIONS_ENUM.LIST_ROLES,new J(Xm.listRoles)),e.set($.OPERATIONS_ENUM.ADD_ROLE,new J(Xm.addRole)),e.set($.OPERATIONS_ENUM.ALTER_ROLE,new J(Xm.alterRole)),e.set($.OPERATIONS_ENUM.DROP_ROLE,new J(Xm.dropRole)),e.set($.OPERATIONS_ENUM.USER_INFO,new J(vf.userInfo)),e.set($.OPERATIONS_ENUM.READ_LOG,new J(ole)),e.set($.OPERATIONS_ENUM.ADD_NODE,new J(ale)),e.set($.OPERATIONS_ENUM.UPDATE_NODE,new J(tq)),e.set($.OPERATIONS_ENUM.SET_NODE_REPLICATION,new J(tq)),e.set($.OPERATIONS_ENUM.REMOVE_NODE,new J(cle)),e.set($.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new J(lle)),e.set($.OPERATIONS_ENUM.PURGE_STREAM,new J(ule)),e.set($.OPERATIONS_ENUM.SET_CONFIGURATION,new J(cq.setConfiguration)),e.set($.OPERATIONS_ENUM.CLUSTER_STATUS,new J(dle.clusterStatus)),e.set($.OPERATIONS_ENUM.CLUSTER_NETWORK,new J(_le)),e.set($.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new J(LO.setRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new J(LO.getRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new J(LO.deleteRoutes)),e.set($.OPERATIONS_ENUM.EXPORT_TO_S3,new J(As,rq.export_to_s3)),e.set($.OPERATIONS_ENUM.CREATE_CSR,new J(Wu.createCsr)),e.set($.OPERATIONS_ENUM.SIGN_CERTIFICATE,new J(Wu.signCertificate)),e.set($.OPERATIONS_ENUM.LIST_CERTIFICATES,new J(Wu.listCertificates)),e.set($.OPERATIONS_ENUM.ADD_CERTIFICATES,new J(Wu.addCertificate)),e.set($.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new J(Wu.removeCertificate)),e.set($.OPERATIONS_ENUM.GET_KEY,new J(Wu.getKey)),e.set($.OPERATIONS_ENUM.ADD_NODE_BACK,new J(dq.addNodeBack)),e.set($.OPERATIONS_ENUM.REMOVE_NODE_BACK,new J(dq.removeNodeBack)),e.set($.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new J(As,Bf.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new J(As,Bf.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.EXPORT_LOCAL,new J(As,rq.export_local)),e.set($.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new J(vO.handleGetJobsByStartDate)),e.set($.OPERATIONS_ENUM.GET_JOB,new J(vO.handleGetJob)),e.set($.OPERATIONS_ENUM.GET_FINGERPRINT,new J(MO.getFingerprint)),e.set($.OPERATIONS_ENUM.SET_LICENSE,new J(MO.setLicense)),e.set($.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new J(MO.getRegistrationInfo)),e.set($.OPERATIONS_ENUM.RESTART,new J(sq.restart)),e.set($.OPERATIONS_ENUM.RESTART_SERVICE,new J(As,sq.restartService)),e.set($.OPERATIONS_ENUM.CATCHUP,new J(Ole)),e.set($.OPERATIONS_ENUM.SYSTEM_INFORMATION,new J(hle.systemInformation)),e.set($.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new J(As,Bf.deleteAuditLogsBefore)),e.set($.OPERATIONS_ENUM.READ_AUDIT_LOG,new J(ile)),e.set($.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new J(oq.createTokens)),e.set($.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new J(oq.refreshOperationToken)),e.set($.OPERATIONS_ENUM.LOGIN,new J(aq.login)),e.set($.OPERATIONS_ENUM.LOGOUT,new J(aq.logout)),e.set($.OPERATIONS_ENUM.GET_CONFIGURATION,new J(cq.getConfiguration)),e.set($.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new J(Lt.customFunctionsStatus)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new J(Lt.getCustomFunctions)),e.set($.OPERATIONS_ENUM.GET_COMPONENT_FILE,new J(Lt.getComponentFile)),e.set($.OPERATIONS_ENUM.GET_COMPONENTS,new J(Lt.getComponents)),e.set($.OPERATIONS_ENUM.SET_COMPONENT_FILE,new J(Lt.setComponentFile)),e.set($.OPERATIONS_ENUM.DROP_COMPONENT,new J(Lt.dropComponent)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new J(Lt.getCustomFunction)),e.set($.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new J(Lt.setCustomFunction)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new J(Lt.dropCustomFunction)),e.set($.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new J(Lt.addComponent)),e.set($.OPERATIONS_ENUM.ADD_COMPONENT,new J(Lt.addComponent)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new J(Lt.dropCustomFunctionProject)),e.set($.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(Lt.packageComponent)),e.set($.OPERATIONS_ENUM.PACKAGE_COMPONENT,new J(Lt.packageComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(Lt.deployComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_COMPONENT,new J(Lt.deployComponent)),e.set($.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new J(lq.readTransactionLog)),e.set($.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new J(As,lq.deleteTransactionLogsBefore)),e.set($.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new J(uq.installModules)),e.set($.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new J(uq.auditModules)),e.set($.OPERATIONS_ENUM.GET_BACKUP,new J(mo.getBackup)),e.set($.OPERATIONS_ENUM.ADD_SSH_KEY,new J(Lt.addSSHKey)),e.set($.OPERATIONS_ENUM.UPDATE_SSH_KEY,new J(Lt.updateSSHKey)),e.set($.OPERATIONS_ENUM.DELETE_SSH_KEY,new J(Lt.deleteSSHKey)),e.set($.OPERATIONS_ENUM.LIST_SSH_KEYS,new J(Lt.listSSHKeys)),e.set($.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new J(Lt.setSSHKnownHosts)),e.set($.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new J(Lt.getSSHKnownHosts)),e}a(Nle,"initializeOperationFunctionMap")});var kO=N(Aq=>{"use strict";var Te=require("fs-extra"),FO=require("fast-glob"),be=require("path"),Ile=require("tar-fs"),wle=require("gunzip-maybe"),rDe=require("uuid").v4,GO=require("normalize-path"),An=NF(),Gt=j(),ft=M(),Ft=se(),tS=Ct(),Cle=re(),{PACKAGE_ROOT:Dle}=M(),{handleHDBError:qt,hdb_errors:Ple}=_e(),{basename:Lle}=require("path"),Mle=rO(),Tq=se(),Ule=M(),{Readable:vle}=require("stream"),{isMainThread:Ble}=require("worker_threads"),{HDB_ERROR_MSGS:Jc,HTTP_STATUS_CODES:$t}=Ple,gq=dt(),{replicateOperation:ni}=(ls(),oe(oa)),{packageDirectory:Hle}=($F(),oe(qF)),Sq=wf(),xle=be.join(Dle,"application-template"),nDe=be.join(Ft.get(ft.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp"),kle=Ft.get(ft.CONFIG_PARAMS.ROOTPATH),Sa=be.join(kle,"ssh"),So=be.join(Sa,"known_hosts");function Fle(){Gt.trace("getting custom api status");let e={};try{e={port:Ft.get(ft.CONFIG_PARAMS.HTTP_PORT),directory:Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw qt(new Error,Jc.FUNCTION_STATUS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,t)}return e}a(Fle,"customFunctionsStatus");function Gle(){Gt.trace("getting custom api endpoints");let e={},t=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT);try{FO.sync(GO(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:FO.sync(GO(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:FO.sync(GO(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw qt(new Error,Jc.GET_FUNCTIONS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,r)}return e}a(Gle,"getCustomFunctions");function qle(e){e.project&&(e.project=be.parse(e.project).name),e.file&&(e.file=be.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("getting custom api endpoint file content");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=be.join(r,n,s,i+".js");try{return Te.readFileSync(o,{encoding:"utf8"})}catch(c){throw qt(new Error,Jc.GET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(qle,"getCustomFunction");async function $le(e){e.project&&(e.project=be.parse(e.project).name),e.file&&(e.file=be.parse(e.file).name);let t=An.setCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("setting custom function file content");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Te.outputFileSync(be.join(r,n,s,i+".js"),o);let c=await ni(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw qt(new Error,Jc.SET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a($le,"setCustomFunction");async function Vle(e){e.project&&(e.project=be.parse(e.project).name),e.file&&(e.file=be.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function file");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Te.unlinkSync(be.join(r,n,s,i+".js"));let o=await ni(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw qt(new Error,Jc.DROP_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,o)}}a(Vle,"dropCustomFunction");async function Kle(e){e.project&&(e.project=be.parse(e.project).name);let t=An.addComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("adding component");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=be.join(r,n);Te.mkdirSync(s,{recursive:!0}),Te.copySync(xle,s);let i=await ni(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw qt(new Error,Jc.ADD_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,s)}}a(Kle,"addComponent");async function Yle(e){e.project&&(e.project=be.parse(e.project).name);let t=An.dropCustomFunctionProjectValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function project");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ft.get(ft.CONFIG_PARAMS.APPS);if(!Cle.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return tS.updateConfigValue(ft.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=be.join(r,n);Te.rmSync(i,{recursive:!0});let o=await ni(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw qt(new Error,Jc.DROP_FUNCTION_PROJECT,$t.INTERNAL_SERVER_ERROR,Gt.ERR,i)}}a(Yle,"dropCustomFunctionProject");async function Wle(e){e.project&&(e.project=be.parse(e.project).name);let t=An.packageComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Gt.trace("packaging component",n);let s;try{s=await Te.realpath(be.join(r,n))}catch(o){if(o.code!==ft.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Te.realpath(be.join(Ft.get(ft.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ft.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Hle(s,e)).toString("base64");return{project:n,payload:i}}a(Wle,"packageComponent");async function jle(e){e.project?e.project=be.parse(e.project).name:e.package&&(e.project=zle(e.package));let t=An.deployComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(Gt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=be.join(r,n),i="file:"+c,await Te.emptyDir(c);let T=vle.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((S,y)=>{T.pipe(wle()).pipe(Ile.extract(c,{finish:S})).on("error",y)});let m=await Te.readdir(c);m.length===1&&m[0]==="package"&&(await Te.copy(be.join(c,"package"),c),await Te.remove(be.join(c,"package")));let g=be.join(c,"node_modules");o?await Sq.runCommand(o,c):Te.existsSync(g)||await Sq.installAllRootModules(!1,c)}else{await tS.addConfig(n,{package:i}),await Mle();let T=Tq.get(Ule.CONFIG_PARAMS.ROOTPATH);c=be.join(T,"node_modules",n)}if(Ble)return;let l=new Map;l.isWorker=!0;let u=(Ff(),oe(kf)),d;u.setErrorReporter(T=>d=T);let _=Lle(c),E=u.component_errors.get(_);try{await u.loadComponent(c,l)}finally{u.component_errors.set(_,E)}if(d)throw d;Gt.info("Installed component");let f=e.restart==="rolling";e.restart=f?!1:e.restart;let h=await ni(e);if(e.restart===!0)gq.restartWorkers("http"),h.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let m=await xO().executeJob({operation:"restart_service",service:"http",replicated:!0});h.restartJobId=m.job_id,h.message=`Successfully deployed: ${n}, restarting HarperDB`}else h.message=`Successfully deployed: ${n}`;return h}a(jle,"deployComponent");function zle(e){if(e.startsWith("git+ssh://"))return be.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return be.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Te.readFileSync(be.join(e,"package.json"),"utf8"));return be.basename(t)}catch{}return be.basename(e)}a(zle,"getProjectNameFromPackage");async function Qle(){let e=a(async(s,i)=>{try{let o=await Te.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=be.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Te.stat(u),_={name:be.basename(l),mtime:d.mtime,size:d.size};i.entries.push(_)}}return i}catch(o){return Gt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{name:Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT).split(be.sep).slice(-1).pop(),entries:[]}),n=(Ff(),oe(kf)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(Qle,"getComponents");async function Jle(e){let t=An.getComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let n=tS.getConfigObj()[e.project]||e.project==="harperdb"?be.join(Tq.get(ft.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Te.stat(be.join(n,e.project,e.file));return{message:await Te.readFile(be.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ft.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${be.join(e.project,e.file)}'`):i}}a(Jle,"getComponentFile");async function Xle(e){let t=An.setComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=be.join(Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Te.ensureFile(n),await Te.outputFile(n,e.payload,r)):await Te.ensureDir(n);let s=await ni(e);return s.message="Successfully set component: "+e.file,s}a(Xle,"setComponentFile");async function Zle(e){let t=An.dropComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?be.join(r,n):r,i=be.join(Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),s),o=be.join(Ft.get(ft.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Te.pathExists(o)&&await Te.unlink(o),await Te.pathExists(i)&&await Te.remove(i);let c=be.join(Ft.get(ft.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Te.pathExists(c)){let u=JSON.parse(await Te.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Te.writeFile(c,JSON.stringify(u,null,2),"utf8")}tS.deleteConfigFromFile([r]);let l=await ni(e);return e.restart===!0?(gq.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Zle,"dropComponent");async function eue(e){let t=An.addSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Gt.trace("adding ssh key",r);let c=be.join(Sa,r+".key"),l=be.join(Sa,"config");if(await Te.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Te.outputFile(c,n),await Te.chmod(c,"0600");let u=`#${r}
21
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(CF,"parseNPMStdErr");async function Nae(e){Yc.info(`starting auditModules for request: ${e}`);let t=PF(e);if(t)throw Nf(t,t.message,If.BAD_REQUEST);let{projects:r}=e;await Dm(),await DF(r);let n={};for(let s=0,i=r.length;s<i;s++){let o=r[s],c=ma.join(tO,o);n[o]={npm_output:null,npm_error:null};try{let l=await Fu("npm audit --json",c);n[o].npm_output=JSON.parse(l)}catch(l){n[o].npm_error=CF(l.stderr)}}return Yc.info(`finished auditModules with response ${n}`),n}a(Nae,"auditModules");async function Dm(){return await Fu("npm -v"),!0}a(Dm,"checkNPMInstalled");async function DF(e){if(!Array.isArray(e)||e.length===0)throw Nf(new Error,"projects argument must be an array with at least 1 element",If.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],o=ma.join(tO,i.toString());if(!await ku.pathExists(o)){t.push(i);continue}let l=ma.join(o,"package.json");await ku.pathExists(l)||r.push(i)}if(t.length>0)throw Nf(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,If.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Nf(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,If.BAD_REQUEST,void 0,void 0,!0)}a(DF,"checkProjectPaths");function PF(e){let t=wm.object({projects:wm.array().min(1).items(wm.string()).required(),dry_run:wm.boolean().default(!1)});return Tae.validateBySchema(e,t)}a(PF,"modulesValidator")});var rO=N((_Ce,xF)=>{"use strict";var Ts=require("fs-extra"),Df=require("path"),Cf=j(),MF=re(),Pm=M(),HF=se(),Iae=Ct();xF.exports=wae;async function wae(){let e=Cae(),t=HF.get(Pm.CONFIG_PARAMS.ROOTPATH),r=Df.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Pm.PACKAGE_ROOT}},s=Df.join(t,"node_modules");Ts.ensureDirSync(s);let i,o=!0,c=!1;try{i=Ts.readJsonSync(r)}catch(l){if(MF.isEmptyOrZeroLength(e))return;if(l.code!==Pm.NODE_ERROR_CODES.ENOENT)throw l;o=!1}if(!MF.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=vF(u);n.dependencies[l]=d+u}if(!o){Cf.notify("Installing components"),await BF(r,n,null),await UF(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],_=vF(u);if(d===void 0||d!==_+u){c=!0;break}if(u.startsWith("file:"))try{if(Ts.statSync(new URL(u+"/package.json")).mtimeMs>Ts.statSync(r).mtimeMs){c=!0;break}}catch(E){Cf.info(`Error checking ${u}/package.json modification time`,E);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(Cf.notify("Removing component",l),c=!0);c&&(Cf.notify("Updating components."),await BF(r,n,i),await UF(t,e))}a(wae,"installComponents");function UF(e,t){return Promise.all(t.map(({name:r})=>{let n=Df.join(e,"node_modules",r),s=Df.join(e,"components",r);if(Ts.existsSync(n)&&Ts.lstatSync(n).isDirectory())return Ts.move(n,s,{overwrite:!0}).then(()=>{Ts.symlink(s,n)})}))}a(UF,"moveModuleToComponents");function Cae(){let e=Iae.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Cae,"getComponentsConfig");function vF(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":Df.extname(e)||Ts.existsSync(e)?"file:":"github:"}a(vF,"getPkgPrefix");async function BF(e,t,r){Cf.trace("npm installing components package.json",t),Ts.writeFileSync(e,JSON.stringify(t,null," "));try{await wf().installAllRootModules(HF.get(Pm.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ts.writeFileSync(e,JSON.stringify(r,null," ")):Ts.unlinkSync(e),n}}a(BF,"installPackages")});var qF={};je(qF,{packageDirectory:()=>Dae});function Dae(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];FF.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,kF.join)("cache","webpack")):void 0}).pipe((0,GF.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var kF,FF,GF,$F=Ie(()=>{kF=require("path"),FF=L(require("tar-fs")),GF=require("node:zlib");a(Dae,"packageDirectory")});var cO=N((mCe,WF)=>{var vm=require("clone"),Bm=gt(),Pae=re(),Mm=M(),hCe=j(),nO=require("fs"),iO=require("joi"),{string:Um}=iO.types(),{hdb_errors:Lae,handleHDBError:Lm}=_e(),{HDB_ERROR_MSGS:pCe,HTTP_STATUS_CODES:sO}=Lae,{common_validators:Gu}=mi(),VF=" is required",Mae=["insert","update","upsert"],oO={database:{presence:!1,format:Gu.schema_format,length:Gu.schema_length},schema:{presence:!1,format:Gu.schema_format,length:Gu.schema_length},table:{presence:!0,format:Gu.schema_format,length:Gu.schema_length},action:{inclusion:{within:Mae,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Uae={schema:Um.required(),table:Um.required(),action:Um.valid("insert","update","upsert")},{AWS_ACCESS_KEY:vae,AWS_SECRET:Bae,AWS_BUCKET:Hae,AWS_FILE_KEY:xae,REGION:kae}=Mm.S3_BUCKET_AUTH_KEYS,Fae={s3:{presence:!0},[`s3.${vae}`]:{presence:!0,type:"String"},[`s3.${Bae}`]:{presence:!0,type:"String"},[`s3.${Hae}`]:{presence:!0,type:"String"},[`s3.${xae}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${kae}`]:{presence:!0,type:"String"}},KF=vm(oO);KF.data.presence={message:VF};var YF=vm(oO);YF.file_path.presence={message:VF};var Gae=Object.assign(vm(oO),Fae),aO=vm(Uae);aO.csv_url=Um.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();aO.passthrough_headers=iO.object();function qae(e){let t=Bm.validateObject(e,KF);return Hm(e,t)}a(qae,"dataObject");function $ae(e){let t=Bm.validateBySchema(e,iO.object(aO));return Hm(e,t)}a($ae,"urlObject");function Vae(e){let t=Bm.validateObject(e,YF);return Hm(e,t)}a(Vae,"fileObject");function Kae(e){let t=Bm.validateObject(e,Gae);return Hm(e,t)}a(Kae,"s3FileObject");function Hm(e,t){if(!t){let r=Pae.checkGlobalSchemaTable(e.schema,e.table);if(r)return Lm(new Error,r,sO.BAD_REQUEST);if(e.operation===Mm.OPERATIONS_ENUM.CSV_FILE_LOAD)try{nO.accessSync(e.file_path,nO.constants.R_OK|nO.constants.F_OK)}catch(n){return n.code===Mm.NODE_ERROR_CODES.ENOENT?Lm(n,`No such file or directory ${n.path}`,sO.BAD_REQUEST):n.code===Mm.NODE_ERROR_CODES.EACCES?Lm(n,`Permission denied ${n.path}`,sO.BAD_REQUEST):Lm(n)}}return t}a(Hm,"postValidateChecks");WF.exports={dataObject:qae,urlObject:$ae,fileObject:Vae,s3FileObject:Kae}});var lO=N((TCe,jF)=>{"use strict";var Pf=j(),xm=M();async function Yae(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===xm.OPERATIONS_ENUM.INSERT||t.operation===xm.OPERATIONS_ENUM.UPDATE||t.operation===xm.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===xm.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Pf.info(i.message),i):i.http_resp_msg?(Pf.error(`Error calling operation: ${e.name}`),Pf.error(i.http_resp_msg),i):(Pf.error(`Error calling operation: ${e.name}`),Pf.error(i),i)}}a(Yae,"callOperationFunctionAsAwait");jF.exports={callOperationFunctionAsAwait:Yae}});var uO=N((ACe,QF)=>{"use strict";var{S3:Wae,GetObjectCommand:jae}=require("@aws-sdk/client-s3");QF.exports={getFileStreamFromS3:zae,getS3AuthObj:zF};async function zae(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await zF(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new jae(r))).Body}a(zae,"getFileStreamFromS3");function zF(e,t,r){return new Wae({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(zF,"getS3AuthObj")});var XF=N((yCe,JF)=>{"use strict";var dO=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}},_O=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};JF.exports={BulkLoadFileObject:dO,BulkLoadDataObject:_O}});var eG=N((OCe,ZF)=>{"use strict";var fO=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}};ZF.exports=fO});var rG=N((ICe,tG)=>{"use strict";var EO=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};tG.exports=EO});var pO=N((CCe,sG)=>{"use strict";var nG=eG(),Qae=rG(),{HDB_ERROR_MSGS:Jae}=Dn(),hO=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Jae.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 nG(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Qae(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 nG(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}};sG.exports=hO});var oG=N((PCe,iG)=>{"use strict";var mO=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};iG.exports=mO});var yO=N((HCe,yG)=>{"use strict";var km=cn(),Gm=cO(),Xae=require("needle"),ei=M(),MCe=It(),qu=re(),{handleHDBError:kt,hdb_errors:hG}=_e(),{HTTP_STATUS_CODES:Lr,HDB_ERROR_MSGS:Ar,CHECK_LOGS_WRAPPER:jc}=hG,$u=j(),SO=require("papaparse");qu.promisifyPapaParse();var ti=require("fs-extra"),Zae=require("path"),{chain:aG}=require("stream-chain"),cG=require("stream-json/streamers/StreamArray"),lG=require("stream-json/utils/Batch"),uG=require("stream-chain/utils/comp"),{finished:dG}=require("stream"),ece=se(),pG=lO(),tce=uO(),{BulkLoadFileObject:gO,BulkLoadDataObject:rce}=XF(),AO=pO(),{verifyBulkLoadAttributePerms:mG}=qm(),UCe=oG(),vCe=Tr(),BCe=Xi(),{databases:nce}=(De(),oe(lt)),{coerceType:sce}=(Lf(),oe(bO)),_G="No records parsed from csv file.",Wc=`${ece.get("HDB_ROOT")}/tmp`,{schema_regex:ice}=mi(),fG=1024*1024*2,EG=5e3,oce={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};yG.exports={csvDataLoad:ace,csvURLLoad:cce,csvFileLoad:lce,importFromS3:uce};async function ace(e,t){let r=Gm.dataObject(e);if(r)throw kt(r,r.message,Lr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=gG(e.schema,e.table),i=SO.parse(e.data,{header:!0,skipEmptyLines:!0,transform:TO.bind(null,s),dynamicTyping:!1}),o=new AO;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&mG(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw kt(new Error,c,Lr.BAD_REQUEST,void 0,void 0,!0);let l=new rce(e.action,e.schema,e.table,i.data);return n=await pG.callOperationFunctionAsAwait(AG,l,null),n.message===_G?_G:RG(n.records,n.number_written)}catch(s){throw zc(s)}}a(ace,"csvDataLoad");async function cce(e){let t=Gm.urlObject(e);if(t)throw kt(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Wc}/${r}`;try{await dce(e,r)}catch(s){throw $u.error(Ar.DOWNLOAD_FILE_ERR(r)+" - "+s),kt(s,jc(Ar.DOWNLOAD_FILE_ERR(r)))}try{let s=new gO(this.job_operation_function.name,e.action,e.schema,e.table,n,ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await RO(s);return await Fm(n),i}catch(s){throw await Fm(n),zc(s)}}a(cce,"csvURLLoad");async function lce(e){let t=Gm.fileObject(e);if(t)throw kt(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r=new gO(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await RO(r)}catch(n){throw zc(n)}}a(lce,"csvFileLoad");async function uce(e){let t=Gm.s3FileObject(e);if(t)throw kt(t,t.message,Lr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Zae.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Wc}/${s}`;let i=new gO(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await _ce(s,e);let o=await RO(i);return await Fm(r),o}catch(n){throw await Fm(r),zc(n)}}a(uce,"importFromS3");async function dce(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Xae("get",e.csv_url,n)}catch(n){let s=`Error downloading CSV file from ${e.csv_url}, status code: ${n.statusCode}. Check the log for more information.`;throw kt(n,s,n.statusCode,ei.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Ece(r,e.csv_url),await fce(t,r.raw)}a(dce,"downloadCSVFile");async function _ce(e,t){try{let r=`${Wc}/${e}`;await ti.mkdirp(Wc),await ti.writeFile(`${Wc}/${e}`,"",{flag:"a+"});let n=await ti.createWriteStream(r),s=await tce.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){$u.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw $u.error(Ar.S3_DOWNLOAD_ERR+" - "+r),kt(r,jc(Ar.S3_DOWNLOAD_ERR))}}a(_ce,"downloadFileFromS3");async function fce(e,t){try{await ti.mkdirp(Wc),await ti.writeFile(`${Wc}/${e}`,t)}catch(r){throw $u.error(Ar.WRITE_TEMP_FILE_ERR),kt(r,jc(Ar.DEFAULT_BULK_LOAD_ERR))}}a(fce,"writeFileToTempFolder");async function Fm(e){if(e)try{await ti.access(e),await ti.unlink(e)}catch{$u.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Fm,"deleteTempFile");function Ece(e,t){if(e.statusCode!==hG.HTTP_STATUS_CODES.OK)throw kt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Lr.BAD_REQUEST);if(!oce[e.headers["content-type"]])throw kt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Lr.BAD_REQUEST);if(!e.raw)throw kt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Lr.BAD_REQUEST)}a(Ece,"validateURLResponse");async function RO(e){try{let t;switch(e.file_type){case ei.VALID_S3_FILE_TYPES.CSV:t=await hce(e);break;case ei.VALID_S3_FILE_TYPES.JSON:t=await pce(e);break;default:throw kt(new Error,Ar.DEFAULT_BULK_LOAD_ERR,Lr.BAD_REQUEST,ei.LOG_LEVELS.ERROR,Ar.INVALID_FILE_EXT_ERR(e))}return RG(t.records,t.number_written)}catch(t){throw zc(t)}}a(RO,"fileLoad");async function SG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await km.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&mG(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=kt(c);r(l)}}a(SG,"validateChunk");async function TG(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;qu.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!qu.isEmpty(c)&&!qu.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await pG.callOperationFunctionAsAwait(AG,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=kt(c,jc(Ar.INSERT_CSV_ERR),Lr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,Ar.INSERT_CSV_ERR+" - "+c);r(l)}}a(TG,"insertChunk");async function hce(e){let t={records:0,number_written:0},r=gG(e.schema,e.table);try{let n=new AO,s=ti.createReadStream(e.file_path,{highWaterMark:fG});s.setEncoding("utf8"),await SO.parsePromise(s,SG.bind(null,e,n),TO.bind(null,r));let i=n.getPermsResponse();if(i)throw kt(new Error,i,Lr.BAD_REQUEST);return s=ti.createReadStream(e.file_path,{highWaterMark:fG}),s.setEncoding("utf8"),await SO.parsePromise(s,TG.bind(null,e,t),TO.bind(null,r)),s.destroy(),t}catch(n){throw kt(n,jc(Ar.PAPA_PARSE_ERR),Lr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,Ar.PAPA_PARSE_ERR+n)}}a(hce,"callPapaParse");function gG(e,t){let r=nce[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>sce(i,s));return n}a(gG,"createTransformMap");function TO(e,t,r){let n=e.get(r);return n?n(t):qu.autoCast(t)}a(TO,"typeFunction");async function pce(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new AO,s=aG([ti.createReadStream(e.file_path,{encoding:"utf-8"}),cG.withParser(),c=>c.value,new lG({batchSize:EG}),uG(async c=>{await SG(e,n,r,c)})]);await new Promise((c,l)=>{dG(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw kt(new Error,i,Lr.BAD_REQUEST);let o=aG([ti.createReadStream(e.file_path,{encoding:"utf-8"}),cG.withParser(),c=>c.value,new lG({batchSize:EG}),uG(async c=>{await TG(e,t,r,c)})]);return await new Promise((c,l)=>{dG(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw kt(n,jc(Ar.INSERT_JSON_ERR),Lr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,Ar.INSERT_JSON_ERR+n)}}a(pce,"insertJson");async function AG(e){let t={};try{e.data&&e.data.length>0&&mce(e.data[0])?t=await Sce(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",$u.info(t.message))}catch(r){throw zc(r)}return t}a(AG,"callBulkFileLoad");function mce(e){let t=Object.keys(e);for(let r of t)if(!ice.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(mce,"validateColumnNames");async function Sce(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=km.insert;break;case"update":i=km.update;break;case"upsert":i=km.upsert;break;default:throw kt(new Error,Ar.INVALID_ACTION_PARAM_ERR(n),Lr.BAD_REQUEST,ei.LOG_LEVELS.ERROR,Ar.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,_=e.length;for(;_--;)o.skipped_hashes.indexOf(e[_][d])>=0&&e.splice(_,1)}let l=qu.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw zc(o)}}a(Sce,"bulkFileLoad");function RG(e,t){return`successfully loaded ${t} of ${e} records`}a(RG,"buildResponseMsg");function zc(e){return kt(e,jc(Ar.DEFAULT_BULK_LOAD_ERR),Lr.INTERNAL_SERVER_ERROR,ei.LOG_LEVELS.ERROR,Ar.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(zc,"buildTopLevelErrMsg")});var OG=N((kCe,bG)=>{"use strict";var OO=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};bG.exports=OO});var wG=N((GCe,IG)=>{"use strict";var Tce=M(),NG=require("moment"),gce=require("uuid").v4,NO=class{static{a(this,"JobObject")}constructor(){this.id=gce(),this.type=void 0,this.start_datetime=NG().valueOf(),this.created_datetime=NG().valueOf(),this.end_datetime=void 0,this.status=Tce.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};IG.exports=NO});var IO=N(($Ce,DG)=>{"use strict";var gs=require("joi"),CG=gt();DG.exports={readTransactionLogValidator:Ace,deleteTransactionLogsBeforeValidator:Rce};function Ace(e){let t=gs.object({schema:gs.string(),database:gs.string(),table:gs.string().required(),from:gs.date().timestamp(),to:gs.date().timestamp(),limit:gs.number().min(1)});return CG.validateBySchema(e,t)}a(Ace,"readTransactionLogValidator");function Rce(e){let t=gs.object({schema:gs.string(),database:gs.string(),table:gs.string().required(),timestamp:gs.date().timestamp().required()});return CG.validateBySchema(e,t)}a(Rce,"deleteTransactionLogsBeforeValidator")});var wO=N((KCe,xG)=>{"use strict";var yce=require("uuid").v4,vG=cn(),BG=$r(),bce=$s(),Oce=Wl(),Nce=OG(),bt=M(),Ice=wG(),wce=gp(),ri=j(),Cce=Vd(),Vu=re(),{promisify:Dce}=require("util"),Qc=require("moment"),Pce=Vm(),$m=cO(),PG=EA(),{deleteTransactionLogsBeforeValidator:Lce}=IO(),{handleHDBError:LG,hdb_errors:Mce,ClientError:Uce}=_e(),{HTTP_STATUS_CODES:MG}=Mce,UG=BG.searchByValue,vce=BG.searchByHash,Bce=vG.insert,Hce=Dce(Pce.evaluateSQL),xce=vG.update;xG.exports={addJob:Gce,updateJob:$ce,handleGetJob:kce,handleGetJobsByStartDate:Fce,getJobById:HG};async function kce(e){if(e.id===void 0)throw new Uce("'id' is required");let t=await HG(e.id);return Vu.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}a(kce,"handleGetJob");async function Fce(e){try{let t=await qce(e);if(ri.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Qc(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Qc(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw ri.error(r),new Error(r)}}a(Fce,"handleGetJobsByStartDate");async function Gce(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Vu.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return ri.info(d),t.error=d,t}if(!bt.JOB_TYPE_ENUM[e.operation])return ri.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case bt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=$m.fileObject(e);break;case bt.OPERATIONS_ENUM.CSV_URL_LOAD:n=$m.urlObject(e);break;case bt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=$m.dataObject(e);break;case bt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=$m.s3FileObject(e);break;case bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=PG(e,"date");break;case bt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=PG(e,"timestamp");break;case bt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Lce(e);break;case bt.OPERATIONS_ENUM.RESTART_SERVICE:if(bt.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw LG(new Error,"Invalid service",MG.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw LG(n,n.message,MG.BAD_REQUEST,void 0,void 0,!0);let s=new Ice;s.type=e.operation===bt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?bt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new bce(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await UG(i))}catch(d){let _=`There was an error inserting a new job: ${d}`;return ri.error(_),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=yce();try{o=await UG(i)}catch(d){let _=`There was an error inserting a new job: ${d}`;return ri.error(_),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ri.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new Cce(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await Bce(l)}catch(d){return ri.error(`There was an error inserting a job for job type: ${e.operation} -- ${d}`),t.success=!1,t}if(u.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let d=`Created a job with type ${s.type} and id ${s.id}`;t.message=d,t.createdJob=s,t.success=!0,ri.trace(d)}return t}a(Gce,"addJob");async function qce(e){let t=Qc(e.from_date,Qc.ISO_8601),r=Qc(e.to_date,Qc.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let n=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,s=new Nce(n,e.hdb_user);try{return await Hce(s)}catch(i){throw ri.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(qce,"getJobsInDateRange");async function HG(e){if(Vu.isEmptyOrZeroLength(e))return Vu.errorizeMessage("Invalid job ID specified.");let t=new Oce(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await vce(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return ri.error(n),Vu.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(HG,"getJobById");async function $ce(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Vu.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===bt.JOB_STATUS_ENUM.COMPLETE||e.status===bt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Qc().valueOf());let t=new wce(bt.SYSTEM_SCHEMA_NAME,bt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await xce(t),r}a($ce,"updateJob")});var Wm=N((WCe,VG)=>{"use strict";var CO=M(),Mf=Tr(),kG=re(),FG=se(),GG=Xi(),qG=j(),{handleHDBError:Km,hdb_errors:Vce}=_e(),{HTTP_STATUS_CODES:Ym}=Vce,{readTransactionLogValidator:Kce,deleteTransactionLogsBeforeValidator:Yce}=IO(),$G=Un(),Wce="Logs successfully deleted from transaction log.",jce="All logs successfully deleted from transaction log.";VG.exports={readTransactionLog:zce,deleteTransactionLogsBefore:Jce};async function zce(e){let t=Kce(e);if(t)throw Km(t,t.message,Ym.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=kG.checkSchemaTableExist(e.database,e.table);if(r)throw Km(new Error,r,Ym.NOT_FOUND,void 0,void 0,!0);return FG.get(CO.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Qce(e):(qG.info("Reading HarperDB logs used by Plexus"),(e.from||e.to)&&(e.search_type="timestamp",e.search_values=[e.from??0],e.to&&(e.search_values[1]=e.to)),$G.readAuditLog(e))}a(zce,"readTransactionLog");async function*Qce(e){let t=GG.createNatsTableStreamName(e.database,e.table),r=await Mf.viewStreamIterator(t,parseInt(e.from),e.limit);for await(let n of r){let s=Math.floor(n?.nats_timestamp/1e6);if(e.to&&s>e.to)break;let i={operation:n?.entry?.operation,user:n?.entry?.__origin?.user,timestamp:s,records:n?.entry?.records,attributes:n?.entry?.attributes};n?.entry?.operation===CO.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(Qce,"readTransactionLogNats");async function Jce(e){let t=Yce(e);if(t)throw Km(t,t.message,Ym.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!FG.get(CO.CONFIG_PARAMS.CLUSTERING_ENABLED))return qG.info("Delete transaction logs called for Plexus"),$G.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=kG.checkSchemaTableExist(r,n);if(i)throw Km(new Error,i,Ym.NOT_FOUND,void 0,void 0,!0);let o=GG.createNatsTableStreamName(r,n),{jsm:c}=await Mf.getNATSReferences(),l=await Mf.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=Wce,_,E=new Date(l.state.last_ts).getTime();return s>E?(_=l.state.last_seq+1,d=jce):_=(await Mf.viewStream(o,parseInt(s),1))[0].nats_sequence,await Mf.purgeTableStream(r,n,{seq:_}),d}a(Jce,"deleteTransactionLogsBefore")});var XG=N((zCe,JG)=>{"use strict";var KG=re(),Rr=M(),Xce=require("moment"),jm=yO(),Uf=j(),YG=wO(),WG=zm(),jG=oc(),zG=dt(),Zce=Wm(),ele=Hu(),{parentPort:tle,isMainThread:QG}=require("worker_threads"),{onMessageByType:rle}=dt(),DO=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function nle(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(KG.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(KG.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Rr.JOB_TYPE_ENUM.csv_file_load:await Ci(e,jm.csvFileLoad);break;case Rr.JOB_TYPE_ENUM.csv_url_load:await Ci(e,jm.csvURLLoad);break;case Rr.JOB_TYPE_ENUM.csv_data_load:await Ci(e,jm.csvDataLoad);break;case Rr.JOB_TYPE_ENUM.import_from_s3:await Ci(e,jm.importFromS3);break;case Rr.JOB_TYPE_ENUM.empty_trash:break;case Rr.JOB_TYPE_ENUM.export_local:await Ci(e,WG.export_local);break;case Rr.JOB_TYPE_ENUM.export_to_s3:await Ci(e,WG.export_to_s3);break;case Rr.JOB_TYPE_ENUM.delete_files_before:case Rr.JOB_TYPE_ENUM.delete_records_before:await Ci(e,jG.deleteFilesBefore);break;case Rr.JOB_TYPE_ENUM.delete_audit_logs_before:await Ci(e,jG.deleteAuditLogsBefore);break;case Rr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ci(e,Zce.deleteTransactionLogsBefore);break;case Rr.JOB_TYPE_ENUM.restart_service:return await Ci(e,ele.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(nle,"parseMessage");async function Ci(e,t){try{e.job.status=Rr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Xce().valueOf(),await YG.updateJob(e.job),await sle(e.job.id)}catch(r){let n=r.message!==void 0?r.message:r;typeof n=="string"?(n=`There was an error running ${t.name} job with id ${e.job.id} - ${n}`,r.message=n):Uf.error(`There was an error running ${t.name} job with id ${e.job.id}`),Uf.error(n),e.job.message=n,e.job.status=Rr.JOB_STATUS_ENUM.ERROR;try{await YG.updateJob(e.job)}catch(s){throw Uf.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Ci,"runJob");async function sle(e){Uf.trace("launching job thread:",e),QG?zG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):tle.postMessage({type:Rr.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(sle,"launchJobThread");QG&&rle(Rr.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{zG.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Rr.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){Uf.error(r)}});JG.exports={parseMessage:nle,RunnerMessage:DO}});var eq=N((JCe,ZG)=>{"use strict";var PO=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};ZG.exports=PO});var xO=N((eDe,HO)=>{"use strict";var eS=$r(),UO=Vm(),Qm=yO(),mo=Gp(),Jm=Zi(),Bf=oc(),ile=Ly(),vf=xn(),Xm=J_(),Lt=kO(),Zm=j(),ole=$y(),ale=tm(),tq=hb(),cle=nm(),lle=Sb(),ule=Tb(),dle=Rb(),_le=bb(),LO=am(),rq=zm(),fle=qm(),vO=wO(),$=M(),{hdb_errors:xf,handleHDBError:Hf}=_e(),{HTTP_STATUS_CODES:nq}=xf,MO=Pb(),sq=Hu(),Eq=require("util"),Yu=cn(),Ele=Fs(),hle=bu(),iq=XG(),oq=cu(),aq=(Nm(),oe(bf)),cq=Ct(),lq=Wm(),uq=wf(),{setServerUtilities:ple}=(Lf(),oe(bO)),{CONTEXT:ZCe}=(Vs(),oe(uR)),{_assignPackageExport:mle}=_i(),{transformReq:Sle}=re(),{server:Tle}=(qr(),oe(ja)),Jr=Zm.loggerWithTag("operation"),Ku=Js(),dq=(Mc(),oe(Lc)),gle=lO(),_q=eS.searchByHash,Ale=eS.searchByValue,Rle=Eq.promisify(eS.search),yle=Eq.promisify(UO.evaluateSQL),ble={[$.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.CREATE_TABLE]:!0,[$.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[$.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[$.OPERATIONS_ENUM.DROP_TABLE]:!0,[$.OPERATIONS_ENUM.DROP_SCHEMA]:!0},J=eq();async function hq(e,t){try{if(e.body.operation!=="read_log"&&(Zm.log_level===$.LOG_LEVELS.INFO||Zm.log_level===$.LOG_LEVELS.DEBUG||Zm.log_level===$.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,payload:o,...c}=e.body;Jr.info(c)}}catch(n){Jr.error(n)}let r=await gle.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return ble[e.body.operation]&&Ele.setSchemaDataToGlobal(n=>{n&&Jr.error(n)}),r}a(hq,"processLocalTransaction");var fq=Nle();HO.exports={chooseOperation:pq,getOperationFunction:mq,operation:BO,processLocalTransaction:hq,executeJob:As};ple(HO.exports);Tle.operation=BO;function pq(e){let t;try{t=mq(e)}catch(s){throw Jr.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=UO.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=UO.checkASTPermissions(e,i);if(o)throw Jr.error(`${nq.FORBIDDEN} from operation ${e.operation}`),Jr.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),Hf(new Error,o,xf.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==$.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==$.OPERATIONS_ENUM.LOGIN&&e.operation!==$.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=fle.verifyPerms(i,s);if(o)throw Jr.error(`${nq.FORBIDDEN} from operation ${e.operation}`),Jr.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),Hf(new Error,o,xf.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw Hf(s,"There was an error when trying to choose an operation path")}return r}a(pq,"chooseOperation");function mq(e){if(Jr.trace(`getOperationFunction with operation: ${e.operation}`),fq.has(e.operation))return fq.get(e.operation);throw Hf(new Error,xf.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),xf.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(mq,"getOperationFunction");mle("operation",BO);function BO(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=pq(e);return hq({body:e},n)}a(BO,"operation");async function Ole(e){Jr.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[$.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case $.OPERATIONS_ENUM.INSERT:o=await Yu.insert(i);break;case $.OPERATIONS_ENUM.UPDATE:o=await Yu.update(i);break;case $.OPERATIONS_ENUM.UPSERT:o=await Yu.upsert(i);break;case $.OPERATIONS_ENUM.DELETE:o=await Bf.deleteRecord(i);break;default:Jr.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Jr.info("Invalid operation in transaction"),Jr.error(o)}}a(Ole,"catchup");async function As(e){Sle(e);let t,r;try{r=await vO.addJob(e),t=r.createdJob,Jr.info("addJob result",r);let n=new iq.RunnerMessage(t,e);return{message:await iq.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw Jr.error(s),Hf(n,s)}}a(As,"executeJob");function Nle(){let e=new Map;return e.set($.OPERATIONS_ENUM.INSERT,new J(Yu.insert)),e.set($.OPERATIONS_ENUM.UPDATE,new J(Yu.update)),e.set($.OPERATIONS_ENUM.UPSERT,new J(Yu.upsert)),e.set($.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new J(eS.searchByConditions)),e.set($.OPERATIONS_ENUM.SEARCH_BY_HASH,new J(_q)),e.set($.OPERATIONS_ENUM.SEARCH_BY_ID,new J(_q)),e.set($.OPERATIONS_ENUM.SEARCH_BY_VALUE,new J(Ale)),e.set($.OPERATIONS_ENUM.SEARCH,new J(Rle)),e.set($.OPERATIONS_ENUM.SQL,new J(yle)),e.set($.OPERATIONS_ENUM.CSV_DATA_LOAD,new J(As,Qm.csvDataLoad)),e.set($.OPERATIONS_ENUM.CSV_FILE_LOAD,new J(As,Qm.csvFileLoad)),e.set($.OPERATIONS_ENUM.CSV_URL_LOAD,new J(As,Qm.csvURLLoad)),e.set($.OPERATIONS_ENUM.IMPORT_FROM_S3,new J(As,Qm.importFromS3)),e.set($.OPERATIONS_ENUM.CREATE_SCHEMA,new J(mo.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_DATABASE,new J(mo.createSchema)),e.set($.OPERATIONS_ENUM.CREATE_TABLE,new J(mo.createTable)),e.set($.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new J(mo.createAttribute)),e.set($.OPERATIONS_ENUM.DROP_SCHEMA,new J(mo.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_DATABASE,new J(mo.dropSchema)),e.set($.OPERATIONS_ENUM.DROP_TABLE,new J(mo.dropTable)),e.set($.OPERATIONS_ENUM.DROP_ATTRIBUTE,new J(mo.dropAttribute)),e.set($.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new J(Jm.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_DATABASE,new J(Jm.describeSchema)),e.set($.OPERATIONS_ENUM.DESCRIBE_TABLE,new J(Jm.describeTable)),e.set($.OPERATIONS_ENUM.DESCRIBE_ALL,new J(Jm.describeAll)),e.set($.OPERATIONS_ENUM.DELETE,new J(Bf.deleteRecord)),e.set($.OPERATIONS_ENUM.ADD_USER,new J(vf.addUser)),e.set($.OPERATIONS_ENUM.ALTER_USER,new J(vf.alterUser)),e.set($.OPERATIONS_ENUM.DROP_USER,new J(vf.dropUser)),e.set($.OPERATIONS_ENUM.LIST_USERS,new J(vf.listUsersExternal)),e.set($.OPERATIONS_ENUM.LIST_ROLES,new J(Xm.listRoles)),e.set($.OPERATIONS_ENUM.ADD_ROLE,new J(Xm.addRole)),e.set($.OPERATIONS_ENUM.ALTER_ROLE,new J(Xm.alterRole)),e.set($.OPERATIONS_ENUM.DROP_ROLE,new J(Xm.dropRole)),e.set($.OPERATIONS_ENUM.USER_INFO,new J(vf.userInfo)),e.set($.OPERATIONS_ENUM.READ_LOG,new J(ole)),e.set($.OPERATIONS_ENUM.ADD_NODE,new J(ale)),e.set($.OPERATIONS_ENUM.UPDATE_NODE,new J(tq)),e.set($.OPERATIONS_ENUM.SET_NODE_REPLICATION,new J(tq)),e.set($.OPERATIONS_ENUM.REMOVE_NODE,new J(cle)),e.set($.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new J(lle)),e.set($.OPERATIONS_ENUM.PURGE_STREAM,new J(ule)),e.set($.OPERATIONS_ENUM.SET_CONFIGURATION,new J(cq.setConfiguration)),e.set($.OPERATIONS_ENUM.CLUSTER_STATUS,new J(dle.clusterStatus)),e.set($.OPERATIONS_ENUM.CLUSTER_NETWORK,new J(_le)),e.set($.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new J(LO.setRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new J(LO.getRoutes)),e.set($.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new J(LO.deleteRoutes)),e.set($.OPERATIONS_ENUM.EXPORT_TO_S3,new J(As,rq.export_to_s3)),e.set($.OPERATIONS_ENUM.CREATE_CSR,new J(Ku.createCsr)),e.set($.OPERATIONS_ENUM.SIGN_CERTIFICATE,new J(Ku.signCertificate)),e.set($.OPERATIONS_ENUM.LIST_CERTIFICATES,new J(Ku.listCertificates)),e.set($.OPERATIONS_ENUM.ADD_CERTIFICATES,new J(Ku.addCertificate)),e.set($.OPERATIONS_ENUM.REMOVE_CERTIFICATE,new J(Ku.removeCertificate)),e.set($.OPERATIONS_ENUM.GET_KEY,new J(Ku.getKey)),e.set($.OPERATIONS_ENUM.ADD_NODE_BACK,new J(dq.addNodeBack)),e.set($.OPERATIONS_ENUM.REMOVE_NODE_BACK,new J(dq.removeNodeBack)),e.set($.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new J(As,Bf.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new J(As,Bf.deleteFilesBefore)),e.set($.OPERATIONS_ENUM.EXPORT_LOCAL,new J(As,rq.export_local)),e.set($.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new J(vO.handleGetJobsByStartDate)),e.set($.OPERATIONS_ENUM.GET_JOB,new J(vO.handleGetJob)),e.set($.OPERATIONS_ENUM.GET_FINGERPRINT,new J(MO.getFingerprint)),e.set($.OPERATIONS_ENUM.SET_LICENSE,new J(MO.setLicense)),e.set($.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new J(MO.getRegistrationInfo)),e.set($.OPERATIONS_ENUM.RESTART,new J(sq.restart)),e.set($.OPERATIONS_ENUM.RESTART_SERVICE,new J(As,sq.restartService)),e.set($.OPERATIONS_ENUM.CATCHUP,new J(Ole)),e.set($.OPERATIONS_ENUM.SYSTEM_INFORMATION,new J(hle.systemInformation)),e.set($.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new J(As,Bf.deleteAuditLogsBefore)),e.set($.OPERATIONS_ENUM.READ_AUDIT_LOG,new J(ile)),e.set($.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new J(oq.createTokens)),e.set($.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new J(oq.refreshOperationToken)),e.set($.OPERATIONS_ENUM.LOGIN,new J(aq.login)),e.set($.OPERATIONS_ENUM.LOGOUT,new J(aq.logout)),e.set($.OPERATIONS_ENUM.GET_CONFIGURATION,new J(cq.getConfiguration)),e.set($.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new J(Lt.customFunctionsStatus)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new J(Lt.getCustomFunctions)),e.set($.OPERATIONS_ENUM.GET_COMPONENT_FILE,new J(Lt.getComponentFile)),e.set($.OPERATIONS_ENUM.GET_COMPONENTS,new J(Lt.getComponents)),e.set($.OPERATIONS_ENUM.SET_COMPONENT_FILE,new J(Lt.setComponentFile)),e.set($.OPERATIONS_ENUM.DROP_COMPONENT,new J(Lt.dropComponent)),e.set($.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new J(Lt.getCustomFunction)),e.set($.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new J(Lt.setCustomFunction)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new J(Lt.dropCustomFunction)),e.set($.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new J(Lt.addComponent)),e.set($.OPERATIONS_ENUM.ADD_COMPONENT,new J(Lt.addComponent)),e.set($.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new J(Lt.dropCustomFunctionProject)),e.set($.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new J(Lt.packageComponent)),e.set($.OPERATIONS_ENUM.PACKAGE_COMPONENT,new J(Lt.packageComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new J(Lt.deployComponent)),e.set($.OPERATIONS_ENUM.DEPLOY_COMPONENT,new J(Lt.deployComponent)),e.set($.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new J(lq.readTransactionLog)),e.set($.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new J(As,lq.deleteTransactionLogsBefore)),e.set($.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new J(uq.installModules)),e.set($.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new J(uq.auditModules)),e.set($.OPERATIONS_ENUM.GET_BACKUP,new J(mo.getBackup)),e.set($.OPERATIONS_ENUM.ADD_SSH_KEY,new J(Lt.addSSHKey)),e.set($.OPERATIONS_ENUM.UPDATE_SSH_KEY,new J(Lt.updateSSHKey)),e.set($.OPERATIONS_ENUM.DELETE_SSH_KEY,new J(Lt.deleteSSHKey)),e.set($.OPERATIONS_ENUM.LIST_SSH_KEYS,new J(Lt.listSSHKeys)),e.set($.OPERATIONS_ENUM.SET_SSH_KNOWN_HOSTS,new J(Lt.setSSHKnownHosts)),e.set($.OPERATIONS_ENUM.GET_SSH_KNOWN_HOSTS,new J(Lt.getSSHKnownHosts)),e}a(Nle,"initializeOperationFunctionMap")});var kO=N(Aq=>{"use strict";var Te=require("fs-extra"),FO=require("fast-glob"),be=require("path"),Ile=require("tar-fs"),wle=require("gunzip-maybe"),rDe=require("uuid").v4,GO=require("normalize-path"),An=NF(),Gt=j(),ft=M(),Ft=se(),tS=Ct(),Cle=re(),{PACKAGE_ROOT:Dle}=M(),{handleHDBError:qt,hdb_errors:Ple}=_e(),{basename:Lle}=require("path"),Mle=rO(),Tq=se(),Ule=M(),{Readable:vle}=require("stream"),{isMainThread:Ble}=require("worker_threads"),{HDB_ERROR_MSGS:Jc,HTTP_STATUS_CODES:$t}=Ple,gq=dt(),{replicateOperation:ni}=(us(),oe(oa)),{packageDirectory:Hle}=($F(),oe(qF)),Sq=wf(),xle=be.join(Dle,"application-template"),nDe=be.join(Ft.get(ft.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp"),kle=Ft.get(ft.CONFIG_PARAMS.ROOTPATH),Sa=be.join(kle,"ssh"),So=be.join(Sa,"known_hosts");function Fle(){Gt.trace("getting custom api status");let e={};try{e={port:Ft.get(ft.CONFIG_PARAMS.HTTP_PORT),directory:Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw qt(new Error,Jc.FUNCTION_STATUS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,t)}return e}a(Fle,"customFunctionsStatus");function Gle(){Gt.trace("getting custom api endpoints");let e={},t=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT);try{FO.sync(GO(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:FO.sync(GO(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:FO.sync(GO(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw qt(new Error,Jc.GET_FUNCTIONS,$t.INTERNAL_SERVER_ERROR,Gt.ERR,r)}return e}a(Gle,"getCustomFunctions");function qle(e){e.project&&(e.project=be.parse(e.project).name),e.file&&(e.file=be.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("getting custom api endpoint file content");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=be.join(r,n,s,i+".js");try{return Te.readFileSync(o,{encoding:"utf8"})}catch(c){throw qt(new Error,Jc.GET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a(qle,"getCustomFunction");async function $le(e){e.project&&(e.project=be.parse(e.project).name),e.file&&(e.file=be.parse(e.file).name);let t=An.setCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("setting custom function file content");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Te.outputFileSync(be.join(r,n,s,i+".js"),o);let c=await ni(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw qt(new Error,Jc.SET_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,c)}}a($le,"setCustomFunction");async function Vle(e){e.project&&(e.project=be.parse(e.project).name),e.file&&(e.file=be.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function file");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Te.unlinkSync(be.join(r,n,s,i+".js"));let o=await ni(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw qt(new Error,Jc.DROP_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,o)}}a(Vle,"dropCustomFunction");async function Kle(e){e.project&&(e.project=be.parse(e.project).name);let t=An.addComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("adding component");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=be.join(r,n);Te.mkdirSync(s,{recursive:!0}),Te.copySync(xle,s);let i=await ni(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw qt(new Error,Jc.ADD_FUNCTION,$t.INTERNAL_SERVER_ERROR,Gt.ERR,s)}}a(Kle,"addComponent");async function Yle(e){e.project&&(e.project=be.parse(e.project).name);let t=An.dropCustomFunctionProjectValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);Gt.trace("dropping custom function project");let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Ft.get(ft.CONFIG_PARAMS.APPS);if(!Cle.isEmptyOrZeroLength(s)){let i=!1;for(let[o,c]of s.entries())if(c.name===n){s.splice(o,1),i=!0;break}if(i)return tS.updateConfigValue(ft.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=be.join(r,n);Te.rmSync(i,{recursive:!0});let o=await ni(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw qt(new Error,Jc.DROP_FUNCTION_PROJECT,$t.INTERNAL_SERVER_ERROR,Gt.ERR,i)}}a(Yle,"dropCustomFunctionProject");async function Wle(e){e.project&&(e.project=be.parse(e.project).name);let t=An.packageComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Gt.trace("packaging component",n);let s;try{s=await Te.realpath(be.join(r,n))}catch(o){if(o.code!==ft.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Te.realpath(be.join(Ft.get(ft.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ft.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await Hle(s,e)).toString("base64");return{project:n,payload:i}}a(Wle,"packageComponent");async function jle(e){e.project?e.project=be.parse(e.project).name:e.package&&(e.project=zle(e.package));let t=An.deployComponentValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:o}=e;if(Gt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=be.join(r,n),i="file:"+c,await Te.emptyDir(c);let T=vle.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((S,y)=>{T.pipe(wle()).pipe(Ile.extract(c,{finish:S})).on("error",y)});let m=await Te.readdir(c);m.length===1&&m[0]==="package"&&(await Te.copy(be.join(c,"package"),c),await Te.remove(be.join(c,"package")));let g=be.join(c,"node_modules");o?await Sq.runCommand(o,c):Te.existsSync(g)||await Sq.installAllRootModules(!1,c)}else{await tS.addConfig(n,{package:i}),await Mle();let T=Tq.get(Ule.CONFIG_PARAMS.ROOTPATH);c=be.join(T,"node_modules",n)}if(Ble)return;let l=new Map;l.isWorker=!0;let u=(Ff(),oe(kf)),d;u.setErrorReporter(T=>d=T);let _=Lle(c),E=u.component_errors.get(_);try{await u.loadComponent(c,l)}finally{u.component_errors.set(_,E)}if(d)throw d;Gt.info("Installed component");let f=e.restart==="rolling";e.restart=f?!1:e.restart;let h=await ni(e);if(e.restart===!0)gq.restartWorkers("http"),h.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(f){let m=await xO().executeJob({operation:"restart_service",service:"http",replicated:!0});h.restartJobId=m.job_id,h.message=`Successfully deployed: ${n}, restarting HarperDB`}else h.message=`Successfully deployed: ${n}`;return h}a(jle,"deployComponent");function zle(e){if(e.startsWith("git+ssh://"))return be.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return be.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Te.readFileSync(be.join(e,"package.json"),"utf8"));return be.basename(t)}catch{}return be.basename(e)}a(zle,"getProjectNameFromPackage");async function Qle(){let e=a(async(s,i)=>{try{let o=await Te.readdir(s,{withFileTypes:!0});for(let c of o){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=be.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Te.stat(u),_={name:be.basename(l),mtime:d.mtime,size:d.size};i.entries.push(_)}}return i}catch(o){return Gt.warn("Error loading package",o),{error:o.toString(),entries:[]}}},"walkDir"),t=await e(Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),{name:Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT).split(be.sep).slice(-1).pop(),entries:[]}),n=(Ff(),oe(kf)).component_errors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}a(Qle,"getComponents");async function Jle(e){let t=An.getComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let n=tS.getConfigObj()[e.project]||e.project==="harperdb"?be.join(Tq.get(ft.CONFIG_PARAMS.ROOTPATH),"node_modules"):Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Te.stat(be.join(n,e.project,e.file));return{message:await Te.readFile(be.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ft.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${be.join(e.project,e.file)}'`):i}}a(Jle,"getComponentFile");async function Xle(e){let t=An.setComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=be.join(Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Te.ensureFile(n),await Te.outputFile(n,e.payload,r)):await Te.ensureDir(n);let s=await ni(e);return s.message="Successfully set component: "+e.file,s}a(Xle,"setComponentFile");async function Zle(e){let t=An.dropComponentFileValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?be.join(r,n):r,i=be.join(Ft.get(ft.CONFIG_PARAMS.COMPONENTSROOT),s),o=be.join(Ft.get(ft.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Te.pathExists(o)&&await Te.unlink(o),await Te.pathExists(i)&&await Te.remove(i);let c=be.join(Ft.get(ft.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Te.pathExists(c)){let u=JSON.parse(await Te.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Te.writeFile(c,JSON.stringify(u,null,2),"utf8")}tS.deleteConfigFromFile([r]);let l=await ni(e);return e.restart===!0?(gq.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(Zle,"dropComponent");async function eue(e){let t=An.addSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;Gt.trace("adding ssh key",r);let c=be.join(Sa,r+".key"),l=be.join(Sa,"config");if(await Te.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Te.outputFile(c,n),await Te.chmod(c,"0600");let u=`#${r}
22
22
  Host ${s}
23
23
  HostName ${i}
24
24
  User git
25
25
  IdentityFile ${c}
26
26
  IdentitiesOnly yes`;await Te.pathExists(l)?await Te.appendFile(l,`
27
27
  `+u):await Te.outputFile(l,u);let d="";if(await Te.pathExists(So)||(await Te.writeFile(So,""),await Te.chmod(So,"0600")),i=="github.com"&&!(await Te.readFile(So,"utf8")).includes("github.com"))try{let T=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let m of T)Te.appendFile(So,"github.com "+m+`
28
- `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Te.appendFile(So,o);let _=await ni(e);return _.message=`Added ssh key: ${r}${d}`,_}a(eue,"addSSHKey");async function tue(e){let t=An.updateSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n}=e;Gt.trace("updating ssh key",r);let s=be.join(Sa,r+".key");if(!await Te.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Te.outputFile(s,n);let i=await ni(e);return i.message=`Updated ssh key: ${r}`,i}a(tue,"updateSSHKey");async function rue(e){let t=An.deleteSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r}=e;Gt.trace("deleting ssh key",r);let n=be.join(Sa,r+".key"),s=be.join(Sa,"config");if(!await Te.pathExists(n))throw new Error("Key does not exist");let i=await Te.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Te.outputFile(s,i),Te.removeSync(n);let c=await ni(e);return c.message=`Deleted ssh key: ${r}`,c}a(rue,"deleteSSHKey");async function nue(e){let t=[];return await Te.pathExists(Sa)&&(await Te.readdir(Sa)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(nue,"listSSHKeys");async function sue(e){let t=An.setSSHKnownHostsValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{known_hosts:r}=e;await Te.outputFile(So,r);let n=await ni(e);return n.message="Known hosts successfully set",n}a(sue,"setSSHKnownHosts");async function iue(e){return await Te.pathExists(So)?{known_hosts:await Te.readFile(So,"utf8")}:{known_hosts:null}}a(iue,"getSSHKnownHosts");Object.assign(Aq,{customFunctionsStatus:Fle,getCustomFunctions:Gle,getCustomFunction:qle,setCustomFunction:$le,dropCustomFunction:Vle,addComponent:Kle,dropCustomFunctionProject:Yle,packageComponent:Wle,deployComponent:jle,getComponents:Qle,getComponentFile:Jle,setComponentFile:Xle,dropComponent:Zle,addSSHKey:eue,updateSSHKey:tue,deleteSSHKey:rue,listSSHKeys:nue,setSSHKnownHosts:sue,getSSHKnownHosts:iue})});var qm=N((cDe,xq)=>{"use strict";var qO=cn(),rS=$r(),Rs=Gp(),$f=Zi(),$O=oc(),oue=Ly(),aue=uH(),Vf=xn(),nS=Z_(),Rr=j(),cue=$y(),lue=tm(),uue=hb(),due=nm(),_ue=Sb(),fue=Tb(),Eue=Rb(),hue=bb(),VO=am(),To=re(),pue=ik(),KO=Pb(),bq=Hu(),Xr=M(),Oq=dF(),mue=bu(),Nq=cu(),Iq=(Nm(),oe(Nf)),wq=Ct(),or=kO(),Sue=require("alasql"),Cq=Wm(),Dq=wf(),zu=Js(),Pq=(Mc(),oe(Lc)),Lq=pO(),{handleHDBError:Rn,hdb_errors:Mq}=_e(),{addNodeBack:oDe,removeNodeBack:aDe}=(Mc(),oe(Lc)),{HDB_ERROR_MSGS:Mr,HTTP_STATUS_CODES:Gf}=Mq,z=new Map,Uq="delete",Ta="insert",go="read",Xc="update",qf="describe",Rq=$f.describeSchema.name,yq=$f.describeTable.name,vq={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Tue={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},gue="catchup",Aue="handleGetJob",Rue="handleGetJobsByStartDate",sS={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},yue=[Rs.createTable.name,Rs.createAttribute.name,Rs.dropTable.name,Rs.dropAttribute.name],Bq={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Z=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};z.set(qO.insert.name,new Z(!1,[Ta]));z.set(qO.update.name,new Z(!1,[Xc]));z.set(qO.upsert.name,new Z(!1,[Ta,Xc]));z.set(rS.searchByConditions.name,new Z(!1,[go]));z.set(rS.searchByHash.name,new Z(!1,[go]));z.set(rS.searchByValue.name,new Z(!1,[go]));z.set(rS.search.name,new Z(!1,[go]));z.set(Rs.createSchema.name,new Z(!0,[]));z.set(Rs.createTable.name,new Z(!0,[]));z.set(Rs.createAttribute.name,new Z(!1,[Ta]));z.set(Rs.dropSchema.name,new Z(!0,[]));z.set(Rs.dropTable.name,new Z(!0,[]));z.set(Rs.dropAttribute.name,new Z(!0,[]));z.set($f.describeSchema.name,new Z(!1,[go]));z.set($f.describeTable.name,new Z(!1,[go]));z.set($O.deleteRecord.name,new Z(!1,[Uq]));z.set(Vf.addUser.name,new Z(!0,[]));z.set(Vf.alterUser.name,new Z(!0,[]));z.set(Vf.dropUser.name,new Z(!0,[]));z.set(Vf.listUsersExternal.name,new Z(!0,[]));z.set(nS.listRoles.name,new Z(!0,[]));z.set(nS.addRole.name,new Z(!0,[]));z.set(nS.alterRole.name,new Z(!0,[]));z.set(nS.dropRole.name,new Z(!0,[]));z.set(cue.name,new Z(!0,[]));z.set(lue.name,new Z(!0,[]));z.set(uue.name,new Z(!0,[]));z.set(due.name,new Z(!0,[]));z.set(_ue.name,new Z(!0,[]));z.set(fue.name,new Z(!0,[]));z.set(VO.setRoutes.name,new Z(!0,[]));z.set(VO.getRoutes.name,new Z(!0,[]));z.set(VO.deleteRoutes.name,new Z(!0,[]));z.set(wq.setConfiguration.name,new Z(!0,[]));z.set(Eue.clusterStatus.name,new Z(!0,[]));z.set(hue.name,new Z(!0,[]));z.set(KO.getFingerprint.name,new Z(!0,[]));z.set(KO.setLicense.name,new Z(!0,[]));z.set($O.deleteFilesBefore.name,new Z(!0,[]));z.set($O.deleteAuditLogsBefore.name,new Z(!0,[]));z.set(bq.restart.name,new Z(!0,[]));z.set(bq.restartService.name,new Z(!0,[]));z.set(oue.name,new Z(!0,[]));z.set(aue.name,new Z(!0,[go]));z.set(mue.systemInformation.name,new Z(!0,[]));z.set(wq.getConfiguration.name,new Z(!0,[]));z.set(Cq.readTransactionLog.name,new Z(!0,[]));z.set(Cq.deleteTransactionLogsBefore.name,new Z(!0,[]));z.set(Dq.installModules.name,new Z(!0,[]));z.set(Dq.auditModules.name,new Z(!0,[]));z.set(zu.createCsr.name,new Z(!0,[]));z.set(zu.signCertificate.name,new Z(!0,[]));z.set(zu.listCertificates.name,new Z(!0,[]));z.set(zu.addCertificate.name,new Z(!0,[]));z.set(zu.removeCertificate.name,new Z(!0,[]));z.set(zu.getKey.name,new Z(!0,[]));z.set(Pq.addNodeBack.name,new Z(!0,[]));z.set(Pq.removeNodeBack.name,new Z(!0,[]));z.set(Nq.createTokens.name,new Z(!1,[]));z.set(Nq.refreshOperationToken.name,new Z(!1,[]));z.set(Iq.login.name,new Z(!1,[]));z.set(Iq.logout.name,new Z(!1,[]));z.set(or.customFunctionsStatus.name,new Z(!0,[]));z.set(or.getCustomFunctions.name,new Z(!0,[]));z.set(or.getComponents.name,new Z(!0,[]));z.set(or.getComponentFile.name,new Z(!0,[]));z.set(or.setComponentFile.name,new Z(!0,[]));z.set(or.dropComponent.name,new Z(!0,[]));z.set(or.getCustomFunction.name,new Z(!0,[]));z.set(or.setCustomFunction.name,new Z(!0,[]));z.set(or.dropCustomFunction.name,new Z(!0,[]));z.set(or.addComponent.name,new Z(!0,[]));z.set(or.dropCustomFunctionProject.name,new Z(!0,[]));z.set(or.packageComponent.name,new Z(!0,[]));z.set(or.deployComponent.name,new Z(!0,[]));z.set(or.addSSHKey.name,new Z(!0,[]));z.set(or.updateSSHKey.name,new Z(!0,[]));z.set(or.deleteSSHKey.name,new Z(!0,[]));z.set(or.listSSHKeys.name,new Z(!0,[]));z.set(or.setSSHKnownHosts.name,new Z(!0,[]));z.set(or.getSSHKnownHosts.name,new Z(!0,[]));z.set(KO.getRegistrationInfo.name,new Z(!1,[]));z.set(Vf.userInfo.name,new Z(!1,[]));z.set($f.describeAll.name,new Z(!1,[]));z.set(Aue,new Z(!1,[]));z.set(Rue,new Z(!0,[]));z.set(gue,new Z(!0,[]));z.set(sS.CSV_DATA_LOAD,new Z(!1,[Ta,Xc]));z.set(sS.CSV_URL_LOAD,new Z(!1,[Ta,Xc]));z.set(sS.CSV_FILE_LOAD,new Z(!1,[Ta,Xc]));z.set(sS.IMPORT_FROM_S3,new Z(!1,[Ta,Xc]));z.set(Bq.EXPORT_TO_S3,new Z(!0,[]));z.set(Bq.EXPORT_LOCAL,new Z(!0,[]));z.set(Xr.VALID_SQL_OPS_ENUM.DELETE,new Z(!1,[Uq]));z.set(Xr.VALID_SQL_OPS_ENUM.SELECT,new Z(!1,[go]));z.set(Xr.VALID_SQL_OPS_ENUM.INSERT,new Z(!1,[Ta]));z.set(Xr.VALID_SQL_OPS_ENUM.UPDATE,new Z(!1,[Xc]));xq.exports={verifyPerms:Oue,verifyPermsAst:bue,verifyBulkLoadAttributePerms:Iue};function bue(e,t,r){if(To.isEmptyOrZeroLength(e))throw Rr.info("verify_perms_ast has an empty user parameter"),Rn(new Error);if(To.isEmptyOrZeroLength(t))throw Rr.info("verify_perms_ast has an empty user parameter"),Rn(new Error);if(To.isEmptyOrZeroLength(r))throw Rr.info("verify_perms_ast has a null operation parameter"),Rn(new Error);try{let n=new Lq,s=new pue(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Rr.info("No schemas defined in verifyPermsAst(), will not continue."),Rn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&vq[r])throw Rn(new Error,Mr.DROP_SYSTEM,Gf.FORBIDDEN);if(c&&!l)return null;let u=Oq.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof Sue.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let _=0;_<i.length;_++){let E=s.getTablesBySchemaName(i[_]);E&&o.set(i[_],E)}let d=Hq(t,r,o,n);return d||(o.forEach((_,E)=>{for(let f=0;f<_.length;f++){let h=s.getAttributesBySchemaTableName(E,_[f]),T=WO(t.role.permission,E,_[f]);YO(h,T,r,_[f],E,n)}}),n.getPermsResponse())}catch(n){throw Rn(n)}}a(bue,"verifyPermsAst");function Oue(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Rr.info("null required parameter in verifyPerms"),Rn(new Error,Mr.DEFAULT_INVALID_REQUEST,Gf.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new Lq;if(To.isEmptyOrZeroLength(e.hdb_user?.role)||To.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Rr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Mr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=o.has(Xr.SYSTEM_SCHEMA_NAME)||s===Xr.SYSTEM_SCHEMA_NAME;if(l&&d&&Tue[e.operation]&&(i===Xr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&vq[r])throw Rn(new Error,Mr.DROP_SYSTEM,Gf.FORBIDDEN);if(l&&!d||u===!0&&(r===Rs.createSchema.name||r===Rs.dropSchema.name))return null;if(yue.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let _=Oq.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=_),r===Rq||r===yq){if(s===Xr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Mr.SCHEMA_PERM_ERROR(s));if(!_.super_user){if(r===Rq&&(!_[s]||!_[s][qf]))return c.handleInvalidItem(Mr.SCHEMA_NOT_FOUND(s));if(r===yq&&(!_[s]||!_[s].tables[i]||!_[s].tables[i][qf]))return c.handleInvalidItem(Mr.TABLE_NOT_FOUND(s,i))}}let E=Hq(e.hdb_user,r,o,c,n);if(E)return E;if(z.get(r)&&z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Xr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],m=_[s].tables[i];m[Xr.PERMS_CRUD_ENUM.READ]&&(m.attribute_permissions.length>0?m.attribute_permissions.filter(S=>S[Xr.PERMS_CRUD_ENUM.READ]).forEach(S=>{T.push(S.attribute_name)}):T=global.hdb_schema[s][i].attributes.map(g=>g.attribute),e.get_attributes=T)}let f=Nue(e),h=WO(e.hdb_user?.role?.permission,s,i);return YO(f,h,r,i,s,c,n),c.getPermsResponse()}a(Oue,"verifyPerms");function Hq(e,t,r,n,s){if(To.arrayHasEmptyValues([e,t,r]))throw Rr.info("hasPermissions has an invalid parameter"),Rn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||z.get(t).requires_su))return null;if(!z.get(t))throw Rr.info(`operation ${t} not found.`),Rn(new Error,Mr.OP_NOT_FOUND(t),Gf.BAD_REQUEST);if(z.get(t)&&z.get(t).requires_su)return Rr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Mr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][qf]===!1){n.addInvalidItem(Mr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Mr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let _=o[l].tables[d];if(!_||_[qf]===!1)n.addInvalidItem(Mr.TABLE_NOT_FOUND(l,d));else try{let E=[],f=z.get(t).perms;!To.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let T=f[h],m=_[T];(m==null||m===!1)&&(Rr.info(`Required ${T} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&n.addUnauthorizedTable(l,d,E)}catch(E){let f=Mr.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Rr.error(f),Rr.error(E),Rn(Mq.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(Hq,"hasPermissions");function YO(e,t,r,n,s,i,o){if(!e||!t)throw Rr.info("no attributes specified in checkAttributePerms."),Rn(new Error);let c=z.get(r).perms;if(!c||c==="")throw Rr.info(`no permissions found for ${r} in checkAttributePerms().`),Rn(new Error);if(To.isEmptyOrZeroLength(t))return Rr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let _=t.get(d);if(_){if(_[qf]===!1){i.addInvalidItem(Mr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let E of c){if(Xr.TIME_STAMP_NAMES.includes(_.attribute_name)&&E!==go)throw Rn(new Error,Mr.SYSTEM_TIMESTAMP_PERMS_ERR,Gf.FORBIDDEN);_[E]===!1&&(l[_.attribute_name]?l[_.attribute_name].push(E):l[_.attribute_name]=[E])}}else i.addInvalidItem(Mr.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(YO,"checkAttributePerms");function Nue(e){let t=new Set;try{if(e.action)return t;if(e.operation===Xr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Rr.info(r)}return t}a(Nue,"getRecordAttributes");function WO(e,t,r){let n=new Map;if(To.isEmpty(e))return Rr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{Rr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(WO,"getAttributePermissions");function Iue(e,t,r,n,s,i,o){let c=new Set(i),l=WO(e,n,s);YO(c,l,t,s,n,o,r)}a(Iue,"verifyBulkLoadAttributePerms")});var Vm=N((uDe,$q)=>{"use strict";$q.exports={evaluateSQL:Fue,processAST:qq,convertSQLToAST:Gq,checkASTPermissions:Fq};var wue=cn(),kq=require("util"),Cue=kq.callbackify(wue.insert),Due=$r().search,Pue=Kv().update,Lue=kq.callbackify(Pue),Mue=Wv().convertDelete,ga=require("alasql"),Uue=qm(),iS=j(),vue=lp(),Bue=re(),Kf=M(),{hdb_errors:Hue,handleHDBError:jO}=_e(),{HTTP_STATUS_CODES:zO}=Hue;vue(ga);var xue=403,kue="There was a problem performing this insert. Please check the logs and try again.",QO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Fue(e,t){let r=e.parsed_sql_object;if(!r){r=Gq(e.sql);let n,s=r.ast.statements[0];if(s instanceof ga.yy.Insert?n=s.into.databaseid:s instanceof ga.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof ga.yy.Update||s instanceof ga.yy.Delete?n=s.table.databaseid:iS.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof ga.yy.Select)&&Bue.isEmptyOrZeroLength(n))return t("No schema specified",null)}qq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Fue,"evaluateSQL");function Fq(e,t){let r;try{r=Uue.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(Fq,"checkASTPermissions");function Gq(e){let t=new QO;if(!e)throw jO(new Error,"The 'sql' parameter is missing from the request body",zO.BAD_REQUEST);try{let r=e.trim(),n=ga.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
29
- `);throw n[1]?jO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,zO.BAD_REQUEST):jO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",zO.BAD_REQUEST)}return t}a(Gq,"convertSQLToAST");function qq(e,t,r){try{let n=Gue;if(!e.bypass_auth&&!t.permissions_checked){let i=Fq(e,t);if(i&&i.length>0)return r(xue,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Kf.VALID_SQL_OPS_ENUM.SELECT:n=Due,s=t.ast.statements[0];break;case Kf.VALID_SQL_OPS_ENUM.INSERT:n=que;break;case Kf.VALID_SQL_OPS_ENUM.UPDATE:n=Lue;break;case Kf.VALID_SQL_OPS_ENUM.DELETE:n=Mue;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(qq,"processAST");function Gue(e,t){iS.info(e),t("unknown sql statement")}a(Gue,"nullFunction");function que({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=$ue(i,e.values)}catch(o){return r(o)}Cue(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){iS.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(que,"convertInsert");function $ue(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=ga.compile(`SELECT ${s.toString()} AS [${Kf.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw iS.error(r),new Error(kue)}}a($ue,"createDataObjects")});var zm=N((_De,Xq)=>{"use strict";var XO=$r(),Vue=Vm(),Kue=uO(),{AsyncParser:Yue,Transform:Wue}=require("json2csv"),Wf=require("stream"),Wn=re(),JO=require("fs-extra"),jue=require("path"),ys=j(),{promisify:Yq}=require("util"),Yf=re(),{handleHDBError:ar,hdb_errors:zue}=_e(),{HDB_ERROR_MSGS:yn,HTTP_STATUS_CODES:cr}=zue,{streamAsJSON:Que}=(Og(),oe(aD)),{Upload:Jue}=require("@aws-sdk/lib-storage"),Vq=["search_by_value","search_by_hash","sql","search_by_conditions"],Kq=["json","csv"],Wq="json",jq="csv",Xue="Successfully exported JSON locally.",Zue="Successfully exported CSV locally.",ede=1e3,tde=XO.searchByHash,rde=XO.searchByValue,nde=Yq(Vue.evaluateSQL),sde=Yq(Wf.finished);Xq.exports={export_to_s3:cde,export_local:ide,toCsvStream:zq};async function ide(e){ys.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Qq(e);if(!Wn.isEmpty(t))throw ys.error(t),ar(new Error,t,cr.BAD_REQUEST,void 0,void 0,!0);if(Wn.isEmpty(e.path))throw ys.error(yn.MISSING_VALUE("path")),ar(new Error,yn.MISSING_VALUE("path"),cr.BAD_REQUEST,void 0,void 0,!0);let r=(Wn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(jue.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Wn.buildFolderPath(e.path,r);await ode(e.path);let s=await Jq(e);return await ade(n,e.format,s)}a(ide,"export_local");async function ode(e){if(ys.trace("in confirmPath"),Wn.isEmptyOrZeroLength(e))throw ar(new Error,`Invalid path: ${e}`,cr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await JO.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,ys.error(n),ar(new Error,n,cr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw ys.error(r),ar(new Error,r,cr.BAD_REQUEST,void 0,void 0,!0)}return!0}a(ode,"confirmPath");async function ade(e,t,r){if(ys.trace("in saveToLocal"),Yf.isEmptyOrZeroLength(e))throw ar(new Error,yn.INVALID_VALUE("file_path"),cr.BAD_REQUEST,void 0,void 0,!0);if(Yf.isEmptyOrZeroLength(t))throw ar(new Error,yn.INVALID_VALUE("Source format"),cr.BAD_REQUEST,void 0,void 0,!0);if(Yf.isEmpty(r))throw ar(new Error,yn.NOT_FOUND("Data"),cr.BAD_REQUEST,void 0,void 0,!0);if(t===Wq){let n=JO.createWriteStream(e);return Que(r).pipe(n),await sde(n),{message:Xue,path:e}}else if(t===jq){let n=JO.createWriteStream(e),s=Wf.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Yue(i,c).fromInput(s).toOutput(n).promise(!1),{message:Zue,path:e}}throw ar(new Error,yn.INVALID_VALUE("format"),cr.BAD_REQUEST)}a(ade,"saveToLocal");async function cde(e){if(!e.s3||Object.keys(e.s3).length===0)throw ar(new Error,yn.MISSING_VALUE("S3 object"),cr.BAD_REQUEST);if(Wn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ar(new Error,yn.MISSING_VALUE("aws_access_key_id"),cr.BAD_REQUEST);if(Wn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ar(new Error,yn.MISSING_VALUE("aws_secret_access_key"),cr.BAD_REQUEST);if(Wn.isEmptyOrZeroLength(e.s3.bucket))throw ar(new Error,yn.MISSING_VALUE("bucket"),cr.BAD_REQUEST);if(Wn.isEmptyOrZeroLength(e.s3.key))throw ar(new Error,yn.MISSING_VALUE("key"),cr.BAD_REQUEST);if(Wn.isEmptyOrZeroLength(e.s3.region))throw ar(new Error,yn.MISSING_VALUE("region"),cr.BAD_REQUEST);let t=Qq(e);if(!Wn.isEmpty(t))throw ar(new Error,t,cr.BAD_REQUEST);ys.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Jq(e)}catch(l){throw ys.error(l),l}let n,s=await Kue.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Wf.PassThrough;if(e.format===jq){i=e.s3.key+".csv";let l=zq(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===Wq){i=e.s3.key+".json";let l=new Wf.Readable;l.pipe(o),l.on("error",_=>{throw _}),l.push("[");let u=r.length,d="";for(let[_,E]of r.entries()){let f=_===u-1?JSON.stringify(E):JSON.stringify(E)+",";d+=f,_!==0&&_%ede===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw ar(new Error,yn.INVALID_VALUE("format"),cr.BAD_REQUEST);return new Jue({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(cde,"export_to_s3");function zq(e,t){let r=Wf.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 Wue(n,s);return r.pipe(i)}a(zq,"toCsvStream");function Qq(e){if(ys.trace("in exportCoreValidation"),Wn.isEmpty(e.format))return"format missing";if(Kq.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Kq.join(", ")}`;let t=e.search_operation.operation;if(Wn.isEmpty(t))return"search_operation.operation missing";if(Vq.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Vq.join(", ")}`}a(Qq,"exportCoreValidation");async function Jq(e){ys.trace("in getRecords");let t,r;if(Yf.isEmpty(e.search_operation)||Yf.isEmptyOrZeroLength(e.search_operation.operation))throw ar(new Error,yn.INVALID_VALUE("Search operation"),cr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=rde;break;case"search_by_hash":t=tde;break;case"search_by_conditions":t=XO.searchByConditions;break;case"sql":t=nde;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ys.error(r),ar(new Error,r,cr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Jq,"getRecords")});var o$={};je(o$,{contentTypes:()=>nN,findBestSerializer:()=>cS,getDeserializer:()=>Ro,registerContentHandlers:()=>sN,serialize:()=>Qf,serializeMessage:()=>qc});function lde(e){try{return e?.[0]===123?rN(e):e}catch{return e}}function sN(e){e.register(dde,{serializers:[{regex:/^application\/json$/,serializer:jd},{regex:/^application\/cbor$/,serializer:a(function(t){return new Zc.EncoderStream(zf).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?aS.Readable.from((0,Di.encodeIter)(t,zf)):(0,Di.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,oS.toCsvStream)(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Di.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Zc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function cS(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*/),_=1,E={q:1};for(let h of d){let T=h.indexOf("=");E[h.substring(0,T)]=h.substring(T+1)}_=+E.q;let f=Zr.get(u);if(f){let h=(f.q||1)*_;h>s&&(n=f,i=f.type||u,s=h,o=E)}}if(!n){if(r)throw new t$.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Zr.keys()).join(", "),406);n=Zr.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Qf(e,t,r){let n=e$&&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)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=cS(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}),tN.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,Ao.createBrotliCompress)({params:{[Ao.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ao.constants.BROTLI_MODE_TEXT:Ao.constants.BROTLI_MODE_GENERIC,[Ao.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>e$?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ao.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function qc(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return jf(e);let r=t.serialize;if(r)return r(e);let n=cS(t);return r=t.serialize=n.serializer.serialize,r(e)}function _de(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 Ede(e){return fde.includes(e)}function hde(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 Ro(e="",t=!1){let r=hde(e),n=r.type&&Zr.get(r.type)?.deserialize||pde(r);return t?s=>_de(s).then(n):n}function pde(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!Ede(e.parameters.charset)&&tN.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 rN(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function mde(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)}}}}}var oS,Di,Zc,Ao,t$,aS,r$,ZO,eN,n$,tN,s$,jf,rN,zf,Zr,nN,Zq,i$,ude,dde,e$,fde,$c=Ie(()=>{Og();oS=L(zm()),Di=require("msgpackr"),Zc=require("cbor-x"),Ao=require("zlib"),t$=L(_e()),aS=require("stream");qr();r$=L(_i()),ZO=L(se()),eN=L(M()),n$=L(require("yaml")),tN=L(Sc()),s$=ZO.default.get(eN.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,jf=s$?za:JSON.stringify,rN=s$?bg:JSON.parse,zf={useRecords:!1,useToJSON:!0},Zr=new Map,nN=Zr;it.contentTypes=nN;(0,r$._assignPackageExport)("contentTypes",nN);Zr.set("application/json",{serializeStream:jd,serialize:jf,deserialize(e){return rN(e)},q:.8});Zq=new Zc.Encoder(zf);Zr.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Zc.EncoderStream(zf).end(e)},serialize:Zq.encode,deserialize:Zq.decode,q:1});Zr.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?aS.Readable.from((0,Di.encodeIter)(e,zf)):(0,Di.pack)(e)},serialize:Di.pack,deserialize:Di.unpack,q:.9});Zr.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,oS.toCsvStream)(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]),(0,oS.toCsvStream)(e,e?.getColumns?.())},q:.1});Zr.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Zr.set("text/yaml",{serialize(e){return n$.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Zr.set("text/event-stream",{serializeStream:a(function(e){return aS.Readable.from(mde(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+`
28
+ `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Te.appendFile(So,o);let _=await ni(e);return _.message=`Added ssh key: ${r}${d}`,_}a(eue,"addSSHKey");async function tue(e){let t=An.updateSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r,key:n}=e;Gt.trace("updating ssh key",r);let s=be.join(Sa,r+".key");if(!await Te.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Te.outputFile(s,n);let i=await ni(e);return i.message=`Updated ssh key: ${r}`,i}a(tue,"updateSSHKey");async function rue(e){let t=An.deleteSSHKeyValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{name:r}=e;Gt.trace("deleting ssh key",r);let n=be.join(Sa,r+".key"),s=be.join(Sa,"config");if(!await Te.pathExists(n))throw new Error("Key does not exist");let i=await Te.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Te.outputFile(s,i),Te.removeSync(n);let c=await ni(e);return c.message=`Deleted ssh key: ${r}`,c}a(rue,"deleteSSHKey");async function nue(e){let t=[];return await Te.pathExists(Sa)&&(await Te.readdir(Sa)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(nue,"listSSHKeys");async function sue(e){let t=An.setSSHKnownHostsValidator(e);if(t)throw qt(t,t.message,$t.BAD_REQUEST);let{known_hosts:r}=e;await Te.outputFile(So,r);let n=await ni(e);return n.message="Known hosts successfully set",n}a(sue,"setSSHKnownHosts");async function iue(e){return await Te.pathExists(So)?{known_hosts:await Te.readFile(So,"utf8")}:{known_hosts:null}}a(iue,"getSSHKnownHosts");Object.assign(Aq,{customFunctionsStatus:Fle,getCustomFunctions:Gle,getCustomFunction:qle,setCustomFunction:$le,dropCustomFunction:Vle,addComponent:Kle,dropCustomFunctionProject:Yle,packageComponent:Wle,deployComponent:jle,getComponents:Qle,getComponentFile:Jle,setComponentFile:Xle,dropComponent:Zle,addSSHKey:eue,updateSSHKey:tue,deleteSSHKey:rue,listSSHKeys:nue,setSSHKnownHosts:sue,getSSHKnownHosts:iue})});var qm=N((cDe,xq)=>{"use strict";var qO=cn(),rS=$r(),Rs=Gp(),$f=Zi(),$O=oc(),oue=Ly(),aue=uH(),Vf=xn(),nS=J_(),yr=j(),cue=$y(),lue=tm(),uue=hb(),due=nm(),_ue=Sb(),fue=Tb(),Eue=Rb(),hue=bb(),VO=am(),To=re(),pue=ik(),KO=Pb(),bq=Hu(),Xr=M(),Oq=dF(),mue=bu(),Nq=cu(),Iq=(Nm(),oe(bf)),wq=Ct(),or=kO(),Sue=require("alasql"),Cq=Wm(),Dq=wf(),Wu=Js(),Pq=(Mc(),oe(Lc)),Lq=pO(),{handleHDBError:Rn,hdb_errors:Mq}=_e(),{addNodeBack:oDe,removeNodeBack:aDe}=(Mc(),oe(Lc)),{HDB_ERROR_MSGS:Mr,HTTP_STATUS_CODES:Gf}=Mq,z=new Map,Uq="delete",Ta="insert",go="read",Xc="update",qf="describe",Rq=$f.describeSchema.name,yq=$f.describeTable.name,vq={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Tue={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},gue="catchup",Aue="handleGetJob",Rue="handleGetJobsByStartDate",sS={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},yue=[Rs.createTable.name,Rs.createAttribute.name,Rs.dropTable.name,Rs.dropAttribute.name],Bq={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Z=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};z.set(qO.insert.name,new Z(!1,[Ta]));z.set(qO.update.name,new Z(!1,[Xc]));z.set(qO.upsert.name,new Z(!1,[Ta,Xc]));z.set(rS.searchByConditions.name,new Z(!1,[go]));z.set(rS.searchByHash.name,new Z(!1,[go]));z.set(rS.searchByValue.name,new Z(!1,[go]));z.set(rS.search.name,new Z(!1,[go]));z.set(Rs.createSchema.name,new Z(!0,[]));z.set(Rs.createTable.name,new Z(!0,[]));z.set(Rs.createAttribute.name,new Z(!1,[Ta]));z.set(Rs.dropSchema.name,new Z(!0,[]));z.set(Rs.dropTable.name,new Z(!0,[]));z.set(Rs.dropAttribute.name,new Z(!0,[]));z.set($f.describeSchema.name,new Z(!1,[go]));z.set($f.describeTable.name,new Z(!1,[go]));z.set($O.deleteRecord.name,new Z(!1,[Uq]));z.set(Vf.addUser.name,new Z(!0,[]));z.set(Vf.alterUser.name,new Z(!0,[]));z.set(Vf.dropUser.name,new Z(!0,[]));z.set(Vf.listUsersExternal.name,new Z(!0,[]));z.set(nS.listRoles.name,new Z(!0,[]));z.set(nS.addRole.name,new Z(!0,[]));z.set(nS.alterRole.name,new Z(!0,[]));z.set(nS.dropRole.name,new Z(!0,[]));z.set(cue.name,new Z(!0,[]));z.set(lue.name,new Z(!0,[]));z.set(uue.name,new Z(!0,[]));z.set(due.name,new Z(!0,[]));z.set(_ue.name,new Z(!0,[]));z.set(fue.name,new Z(!0,[]));z.set(VO.setRoutes.name,new Z(!0,[]));z.set(VO.getRoutes.name,new Z(!0,[]));z.set(VO.deleteRoutes.name,new Z(!0,[]));z.set(wq.setConfiguration.name,new Z(!0,[]));z.set(Eue.clusterStatus.name,new Z(!0,[]));z.set(hue.name,new Z(!0,[]));z.set(KO.getFingerprint.name,new Z(!0,[]));z.set(KO.setLicense.name,new Z(!0,[]));z.set($O.deleteFilesBefore.name,new Z(!0,[]));z.set($O.deleteAuditLogsBefore.name,new Z(!0,[]));z.set(bq.restart.name,new Z(!0,[]));z.set(bq.restartService.name,new Z(!0,[]));z.set(oue.name,new Z(!0,[]));z.set(aue.name,new Z(!0,[go]));z.set(mue.systemInformation.name,new Z(!0,[]));z.set(wq.getConfiguration.name,new Z(!0,[]));z.set(Cq.readTransactionLog.name,new Z(!0,[]));z.set(Cq.deleteTransactionLogsBefore.name,new Z(!0,[]));z.set(Dq.installModules.name,new Z(!0,[]));z.set(Dq.auditModules.name,new Z(!0,[]));z.set(Wu.createCsr.name,new Z(!0,[]));z.set(Wu.signCertificate.name,new Z(!0,[]));z.set(Wu.listCertificates.name,new Z(!0,[]));z.set(Wu.addCertificate.name,new Z(!0,[]));z.set(Wu.removeCertificate.name,new Z(!0,[]));z.set(Wu.getKey.name,new Z(!0,[]));z.set(Pq.addNodeBack.name,new Z(!0,[]));z.set(Pq.removeNodeBack.name,new Z(!0,[]));z.set(Nq.createTokens.name,new Z(!1,[]));z.set(Nq.refreshOperationToken.name,new Z(!1,[]));z.set(Iq.login.name,new Z(!1,[]));z.set(Iq.logout.name,new Z(!1,[]));z.set(or.customFunctionsStatus.name,new Z(!0,[]));z.set(or.getCustomFunctions.name,new Z(!0,[]));z.set(or.getComponents.name,new Z(!0,[]));z.set(or.getComponentFile.name,new Z(!0,[]));z.set(or.setComponentFile.name,new Z(!0,[]));z.set(or.dropComponent.name,new Z(!0,[]));z.set(or.getCustomFunction.name,new Z(!0,[]));z.set(or.setCustomFunction.name,new Z(!0,[]));z.set(or.dropCustomFunction.name,new Z(!0,[]));z.set(or.addComponent.name,new Z(!0,[]));z.set(or.dropCustomFunctionProject.name,new Z(!0,[]));z.set(or.packageComponent.name,new Z(!0,[]));z.set(or.deployComponent.name,new Z(!0,[]));z.set(or.addSSHKey.name,new Z(!0,[]));z.set(or.updateSSHKey.name,new Z(!0,[]));z.set(or.deleteSSHKey.name,new Z(!0,[]));z.set(or.listSSHKeys.name,new Z(!0,[]));z.set(or.setSSHKnownHosts.name,new Z(!0,[]));z.set(or.getSSHKnownHosts.name,new Z(!0,[]));z.set(KO.getRegistrationInfo.name,new Z(!1,[]));z.set(Vf.userInfo.name,new Z(!1,[]));z.set($f.describeAll.name,new Z(!1,[]));z.set(Aue,new Z(!1,[]));z.set(Rue,new Z(!0,[]));z.set(gue,new Z(!0,[]));z.set(sS.CSV_DATA_LOAD,new Z(!1,[Ta,Xc]));z.set(sS.CSV_URL_LOAD,new Z(!1,[Ta,Xc]));z.set(sS.CSV_FILE_LOAD,new Z(!1,[Ta,Xc]));z.set(sS.IMPORT_FROM_S3,new Z(!1,[Ta,Xc]));z.set(Bq.EXPORT_TO_S3,new Z(!0,[]));z.set(Bq.EXPORT_LOCAL,new Z(!0,[]));z.set(Xr.VALID_SQL_OPS_ENUM.DELETE,new Z(!1,[Uq]));z.set(Xr.VALID_SQL_OPS_ENUM.SELECT,new Z(!1,[go]));z.set(Xr.VALID_SQL_OPS_ENUM.INSERT,new Z(!1,[Ta]));z.set(Xr.VALID_SQL_OPS_ENUM.UPDATE,new Z(!1,[Xc]));xq.exports={verifyPerms:Oue,verifyPermsAst:bue,verifyBulkLoadAttributePerms:Iue};function bue(e,t,r){if(To.isEmptyOrZeroLength(e))throw yr.info("verify_perms_ast has an empty user parameter"),Rn(new Error);if(To.isEmptyOrZeroLength(t))throw yr.info("verify_perms_ast has an empty user parameter"),Rn(new Error);if(To.isEmptyOrZeroLength(r))throw yr.info("verify_perms_ast has a null operation parameter"),Rn(new Error);try{let n=new Lq,s=new pue(e),i=s.getSchemas(),o=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw yr.info("No schemas defined in verifyPermsAst(), will not continue."),Rn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&vq[r])throw Rn(new Error,Mr.DROP_SYSTEM,Gf.FORBIDDEN);if(c&&!l)return null;let u=Oq.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof Sue.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let _=0;_<i.length;_++){let E=s.getTablesBySchemaName(i[_]);E&&o.set(i[_],E)}let d=Hq(t,r,o,n);return d||(o.forEach((_,E)=>{for(let f=0;f<_.length;f++){let h=s.getAttributesBySchemaTableName(E,_[f]),T=WO(t.role.permission,E,_[f]);YO(h,T,r,_[f],E,n)}}),n.getPermsResponse())}catch(n){throw Rn(n)}}a(bue,"verifyPermsAst");function Oue(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw yr.info("null required parameter in verifyPerms"),Rn(new Error,Mr.DEFAULT_INVALID_REQUEST,Gf.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,o=new Map;s&&i&&o.set(s,[i]);let c=new Lq;if(To.isEmptyOrZeroLength(e.hdb_user?.role)||To.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return yr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Mr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=o.has(Xr.SYSTEM_SCHEMA_NAME)||s===Xr.SYSTEM_SCHEMA_NAME;if(l&&d&&Tue[e.operation]&&(i===Xr.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&vq[r])throw Rn(new Error,Mr.DROP_SYSTEM,Gf.FORBIDDEN);if(l&&!d||u===!0&&(r===Rs.createSchema.name||r===Rs.dropSchema.name))return null;if(yue.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let _=Oq.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=_),r===Rq||r===yq){if(s===Xr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Mr.SCHEMA_PERM_ERROR(s));if(!_.super_user){if(r===Rq&&(!_[s]||!_[s][qf]))return c.handleInvalidItem(Mr.SCHEMA_NOT_FOUND(s));if(r===yq&&(!_[s]||!_[s].tables[i]||!_[s].tables[i][qf]))return c.handleInvalidItem(Mr.TABLE_NOT_FOUND(s,i))}}let E=Hq(e.hdb_user,r,o,c,n);if(E)return E;if(z.get(r)&&z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Xr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],m=_[s].tables[i];m[Xr.PERMS_CRUD_ENUM.READ]&&(m.attribute_permissions.length>0?m.attribute_permissions.filter(S=>S[Xr.PERMS_CRUD_ENUM.READ]).forEach(S=>{T.push(S.attribute_name)}):T=global.hdb_schema[s][i].attributes.map(g=>g.attribute),e.get_attributes=T)}let f=Nue(e),h=WO(e.hdb_user?.role?.permission,s,i);return YO(f,h,r,i,s,c,n),c.getPermsResponse()}a(Oue,"verifyPerms");function Hq(e,t,r,n,s){if(To.arrayHasEmptyValues([e,t,r]))throw yr.info("hasPermissions has an invalid parameter"),Rn(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||z.get(t).requires_su))return null;if(!z.get(t))throw yr.info(`operation ${t} not found.`),Rn(new Error,Mr.OP_NOT_FOUND(t),Gf.BAD_REQUEST);if(z.get(t)&&z.get(t).requires_su)return yr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(Mr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][qf]===!1){n.addInvalidItem(Mr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(Mr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let _=o[l].tables[d];if(!_||_[qf]===!1)n.addInvalidItem(Mr.TABLE_NOT_FOUND(l,d));else try{let E=[],f=z.get(t).perms;!To.isEmpty(s)&&f.includes(s)&&(f=[s]);for(let h=0;h<f.length;h++){let T=f[h],m=_[T];(m==null||m===!1)&&(yr.info(`Required ${T} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&n.addUnauthorizedTable(l,d,E)}catch(E){let f=Mr.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw yr.error(f),yr.error(E),Rn(Mq.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?n.getPermsResponse():null}a(Hq,"hasPermissions");function YO(e,t,r,n,s,i,o){if(!e||!t)throw yr.info("no attributes specified in checkAttributePerms."),Rn(new Error);let c=z.get(r).perms;if(!c||c==="")throw yr.info(`no permissions found for ${r} in checkAttributePerms().`),Rn(new Error);if(To.isEmptyOrZeroLength(t))return yr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let _=t.get(d);if(_){if(_[qf]===!1){i.addInvalidItem(Mr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let E of c){if(Xr.TIME_STAMP_NAMES.includes(_.attribute_name)&&E!==go)throw Rn(new Error,Mr.SYSTEM_TIMESTAMP_PERMS_ERR,Gf.FORBIDDEN);_[E]===!1&&(l[_.attribute_name]?l[_.attribute_name].push(E):l[_.attribute_name]=[E])}}else i.addInvalidItem(Mr.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(YO,"checkAttributePerms");function Nue(e){let t=new Set;try{if(e.action)return t;if(e.operation===Xr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){yr.info(r)}return t}a(Nue,"getRecordAttributes");function WO(e,t,r){let n=new Map;if(To.isEmpty(e))return yr.info("no hdb_user specified in getAttributePermissions"),n;if(e.super_user||!t||!r)return n;try{e[t].tables[r].attribute_permissions.forEach(s=>{n.has(s.attribute_name)||n.set(s.attribute_name,s)})}catch{yr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(WO,"getAttributePermissions");function Iue(e,t,r,n,s,i,o){let c=new Set(i),l=WO(e,n,s);YO(c,l,t,s,n,o,r)}a(Iue,"verifyBulkLoadAttributePerms")});var Vm=N((uDe,$q)=>{"use strict";$q.exports={evaluateSQL:Fue,processAST:qq,convertSQLToAST:Gq,checkASTPermissions:Fq};var wue=cn(),kq=require("util"),Cue=kq.callbackify(wue.insert),Due=$r().search,Pue=Kv().update,Lue=kq.callbackify(Pue),Mue=Wv().convertDelete,ga=require("alasql"),Uue=qm(),iS=j(),vue=lp(),Bue=re(),Kf=M(),{hdb_errors:Hue,handleHDBError:jO}=_e(),{HTTP_STATUS_CODES:zO}=Hue;vue(ga);var xue=403,kue="There was a problem performing this insert. Please check the logs and try again.",QO=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Fue(e,t){let r=e.parsed_sql_object;if(!r){r=Gq(e.sql);let n,s=r.ast.statements[0];if(s instanceof ga.yy.Insert?n=s.into.databaseid:s instanceof ga.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof ga.yy.Update||s instanceof ga.yy.Delete?n=s.table.databaseid:iS.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof ga.yy.Select)&&Bue.isEmptyOrZeroLength(n))return t("No schema specified",null)}qq(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(Fue,"evaluateSQL");function Fq(e,t){let r;try{r=Uue.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(Fq,"checkASTPermissions");function Gq(e){let t=new QO;if(!e)throw jO(new Error,"The 'sql' parameter is missing from the request body",zO.BAD_REQUEST);try{let r=e.trim(),n=ga.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
29
+ `);throw n[1]?jO(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,zO.BAD_REQUEST):jO(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",zO.BAD_REQUEST)}return t}a(Gq,"convertSQLToAST");function qq(e,t,r){try{let n=Gue;if(!e.bypass_auth&&!t.permissions_checked){let i=Fq(e,t);if(i&&i.length>0)return r(xue,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Kf.VALID_SQL_OPS_ENUM.SELECT:n=Due,s=t.ast.statements[0];break;case Kf.VALID_SQL_OPS_ENUM.INSERT:n=que;break;case Kf.VALID_SQL_OPS_ENUM.UPDATE:n=Lue;break;case Kf.VALID_SQL_OPS_ENUM.DELETE:n=Mue;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(n){return r(n)}}a(qq,"processAST");function Gue(e,t){iS.info(e),t("unknown sql statement")}a(Gue,"nullFunction");function que({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{s.records=$ue(i,e.values)}catch(o){return r(o)}Cue(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){iS.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(que,"convertInsert");function $ue(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let n={};return r.forEach((s,i)=>{if(s.columnid)throw"cannot use a column in insert value";"value"in s?n[e[i]]=s.value:n[e[i]]=ga.compile(`SELECT ${s.toString()} AS [${Kf.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw iS.error(r),new Error(kue)}}a($ue,"createDataObjects")});var zm=N((_De,Xq)=>{"use strict";var XO=$r(),Vue=Vm(),Kue=uO(),{AsyncParser:Yue,Transform:Wue}=require("json2csv"),Wf=require("stream"),jn=re(),JO=require("fs-extra"),jue=require("path"),ys=j(),{promisify:Yq}=require("util"),Yf=re(),{handleHDBError:ar,hdb_errors:zue}=_e(),{HDB_ERROR_MSGS:yn,HTTP_STATUS_CODES:cr}=zue,{streamAsJSON:Que}=(Og(),oe(aD)),{Upload:Jue}=require("@aws-sdk/lib-storage"),Vq=["search_by_value","search_by_hash","sql","search_by_conditions"],Kq=["json","csv"],Wq="json",jq="csv",Xue="Successfully exported JSON locally.",Zue="Successfully exported CSV locally.",ede=1e3,tde=XO.searchByHash,rde=XO.searchByValue,nde=Yq(Vue.evaluateSQL),sde=Yq(Wf.finished);Xq.exports={export_to_s3:cde,export_local:ide,toCsvStream:zq};async function ide(e){ys.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Qq(e);if(!jn.isEmpty(t))throw ys.error(t),ar(new Error,t,cr.BAD_REQUEST,void 0,void 0,!0);if(jn.isEmpty(e.path))throw ys.error(yn.MISSING_VALUE("path")),ar(new Error,yn.MISSING_VALUE("path"),cr.BAD_REQUEST,void 0,void 0,!0);let r=(jn.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(jue.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=jn.buildFolderPath(e.path,r);await ode(e.path);let s=await Jq(e);return await ade(n,e.format,s)}a(ide,"export_local");async function ode(e){if(ys.trace("in confirmPath"),jn.isEmptyOrZeroLength(e))throw ar(new Error,`Invalid path: ${e}`,cr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await JO.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${e}' does not exist`:r.code==="EACCES"?n=`access to path '${e}' is denied`:n=r.message,ys.error(n),ar(new Error,n,cr.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw ys.error(r),ar(new Error,r,cr.BAD_REQUEST,void 0,void 0,!0)}return!0}a(ode,"confirmPath");async function ade(e,t,r){if(ys.trace("in saveToLocal"),Yf.isEmptyOrZeroLength(e))throw ar(new Error,yn.INVALID_VALUE("file_path"),cr.BAD_REQUEST,void 0,void 0,!0);if(Yf.isEmptyOrZeroLength(t))throw ar(new Error,yn.INVALID_VALUE("Source format"),cr.BAD_REQUEST,void 0,void 0,!0);if(Yf.isEmpty(r))throw ar(new Error,yn.NOT_FOUND("Data"),cr.BAD_REQUEST,void 0,void 0,!0);if(t===Wq){let n=JO.createWriteStream(e);return Que(r).pipe(n),await sde(n),{message:Xue,path:e}}else if(t===jq){let n=JO.createWriteStream(e),s=Wf.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new Yue(i,c).fromInput(s).toOutput(n).promise(!1),{message:Zue,path:e}}throw ar(new Error,yn.INVALID_VALUE("format"),cr.BAD_REQUEST)}a(ade,"saveToLocal");async function cde(e){if(!e.s3||Object.keys(e.s3).length===0)throw ar(new Error,yn.MISSING_VALUE("S3 object"),cr.BAD_REQUEST);if(jn.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ar(new Error,yn.MISSING_VALUE("aws_access_key_id"),cr.BAD_REQUEST);if(jn.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ar(new Error,yn.MISSING_VALUE("aws_secret_access_key"),cr.BAD_REQUEST);if(jn.isEmptyOrZeroLength(e.s3.bucket))throw ar(new Error,yn.MISSING_VALUE("bucket"),cr.BAD_REQUEST);if(jn.isEmptyOrZeroLength(e.s3.key))throw ar(new Error,yn.MISSING_VALUE("key"),cr.BAD_REQUEST);if(jn.isEmptyOrZeroLength(e.s3.region))throw ar(new Error,yn.MISSING_VALUE("region"),cr.BAD_REQUEST);let t=Qq(e);if(!jn.isEmpty(t))throw ar(new Error,t,cr.BAD_REQUEST);ys.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Jq(e)}catch(l){throw ys.error(l),l}let n,s=await Kue.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Wf.PassThrough;if(e.format===jq){i=e.s3.key+".csv";let l=zq(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===Wq){i=e.s3.key+".json";let l=new Wf.Readable;l.pipe(o),l.on("error",_=>{throw _}),l.push("[");let u=r.length,d="";for(let[_,E]of r.entries()){let f=_===u-1?JSON.stringify(E):JSON.stringify(E)+",";d+=f,_!==0&&_%ede===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw ar(new Error,yn.INVALID_VALUE("format"),cr.BAD_REQUEST);return new Jue({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(cde,"export_to_s3");function zq(e,t){let r=Wf.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 Wue(n,s);return r.pipe(i)}a(zq,"toCsvStream");function Qq(e){if(ys.trace("in exportCoreValidation"),jn.isEmpty(e.format))return"format missing";if(Kq.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${Kq.join(", ")}`;let t=e.search_operation.operation;if(jn.isEmpty(t))return"search_operation.operation missing";if(Vq.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Vq.join(", ")}`}a(Qq,"exportCoreValidation");async function Jq(e){ys.trace("in getRecords");let t,r;if(Yf.isEmpty(e.search_operation)||Yf.isEmptyOrZeroLength(e.search_operation.operation))throw ar(new Error,yn.INVALID_VALUE("Search operation"),cr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=rde;break;case"search_by_hash":t=tde;break;case"search_by_conditions":t=XO.searchByConditions;break;case"sql":t=nde;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ys.error(r),ar(new Error,r,cr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Jq,"getRecords")});var o$={};je(o$,{contentTypes:()=>nN,findBestSerializer:()=>cS,getDeserializer:()=>Ro,registerContentHandlers:()=>sN,serialize:()=>Qf,serializeMessage:()=>qc});function lde(e){try{return e?.[0]===123?rN(e):e}catch{return e}}function sN(e){e.register(dde,{serializers:[{regex:/^application\/json$/,serializer:Yd},{regex:/^application\/cbor$/,serializer:a(function(t){return new Zc.EncoderStream(zf).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?aS.Readable.from((0,Di.encodeIter)(t,zf)):(0,Di.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,oS.toCsvStream)(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Di.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Zc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function cS(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*/),_=1,E={q:1};for(let h of d){let T=h.indexOf("=");E[h.substring(0,T)]=h.substring(T+1)}_=+E.q;let f=Zr.get(u);if(f){let h=(f.q||1)*_;h>s&&(n=f,i=f.type||u,s=h,o=E)}}if(!n){if(r)throw new t$.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(Zr.keys()).join(", "),406);n=Zr.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function Qf(e,t,r){let n=e$&&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)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=cS(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}),tN.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,Ao.createBrotliCompress)({params:{[Ao.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Ao.constants.BROTLI_MODE_TEXT:Ao.constants.BROTLI_MODE_GENERIC,[Ao.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>e$?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Ao.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function qc(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return jf(e);let r=t.serialize;if(r)return r(e);let n=cS(t);return r=t.serialize=n.serializer.serialize,r(e)}function _de(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 Ede(e){return fde.includes(e)}function hde(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 Ro(e="",t=!1){let r=hde(e),n=r.type&&Zr.get(r.type)?.deserialize||pde(r);return t?s=>_de(s).then(n):n}function pde(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!Ede(e.parameters.charset)&&tN.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 rN(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function mde(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)}}}}}var oS,Di,Zc,Ao,t$,aS,r$,ZO,eN,n$,tN,s$,jf,rN,zf,Zr,nN,Zq,i$,ude,dde,e$,fde,$c=Ie(()=>{Og();oS=L(zm()),Di=require("msgpackr"),Zc=require("cbor-x"),Ao=require("zlib"),t$=L(_e()),aS=require("stream");qr();r$=L(_i()),ZO=L(se()),eN=L(M()),n$=L(require("yaml")),tN=L(Sc()),s$=ZO.default.get(eN.CONFIG_PARAMS.SERIALIZATION_BIGINT)!==!1,jf=s$?za:JSON.stringify,rN=s$?bg:JSON.parse,zf={useRecords:!1,useToJSON:!0},Zr=new Map,nN=Zr;it.contentTypes=nN;(0,r$._assignPackageExport)("contentTypes",nN);Zr.set("application/json",{serializeStream:Yd,serialize:jf,deserialize(e){return rN(e)},q:.8});Zq=new Zc.Encoder(zf);Zr.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Zc.EncoderStream(zf).end(e)},serialize:Zq.encode,deserialize:Zq.decode,q:1});Zr.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?aS.Readable.from((0,Di.encodeIter)(e,zf)):(0,Di.pack)(e)},serialize:Di.pack,deserialize:Di.unpack,q:.9});Zr.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),(0,oS.toCsvStream)(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]),(0,oS.toCsvStream)(e,e?.getColumns?.())},q:.1});Zr.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.2});Zr.set("text/yaml",{serialize(e){return n$.stringify(e,{aliasDuplicateObjects:!1})},q:.7});Zr.set("text/event-stream",{serializeStream:a(function(e){return aS.Readable.from(mde(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+`
30
30
  `),e.data){let r=e.data;typeof r=="object"&&(r=jf(r)),t+="data: "+r+`
31
31
  `}return e.id&&(t+="id: "+e.id+`
32
32
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -35,7 +35,7 @@ Host ${s}
35
35
 
36
36
  `:`data: ${e}
37
37
 
38
- `},"serialize"),compressible:!1,q:.8});Zr.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});i$={type:"application/json",serializeStream:jd,serialize:jf,deserialize:lde,q:.5};Zr.set("*/*",i$);Zr.set("",i$);a(lde,"tryJSONParse");a(sN,"registerContentHandlers");ude=require("fastify-plugin"),dde=ude(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=cS(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(_=>(_.toJSON=()=>({error:_.name,message:_.message,..._.partialObject}),_)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,_)=>{s.header(d,_)},"set")}})})}),r()},{name:"content-type-negotiation"});a(cS,"findBestSerializer");e$=ZO.default.get(eN.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Qf,"serialize");a(qc,"serializeMessage");a(_de,"streamToBuffer");fde=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(Ede,"isBufferEncoding");a(hde,"parseContentType");a(Ro,"getDeserializer");a(pde,"deserializerUnknownType");a(mde,"transformIterable")});var oN={};je(oN,{start:()=>Nde});function Sde(e){if(e.kind!==Pe.Kind.OPERATION_DEFINITION&&e.kind!==Pe.Kind.FRAGMENT_DEFINITION)throw new Ur(`Unexpected non-executable definition type ${e.kind}.`)}function a$(e){if(typeof e!="object"||e===null)throw new Pi("Request body must be an object.");if(!("query"in e))throw new Pi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Pi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Pi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Pi("Request body `operationName` field must be a string.")}function iN(e){return parseInt(e.value,10)}function l$(e){return parseFloat(e.value)}function u$(e,t,r){let n=r.get(e.name.value);return d$(n)?_$(n,t):{attribute:t,value:n}}function d$(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function _$(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],d$(n)?_$(n,t):{attribute:t,value:n}))}function Tde(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Pe.Kind.NULL:return{attribute:t,value:null};case Pe.Kind.INT:return{attribute:t,value:iN(e.value)};case Pe.Kind.FLOAT:return{attribute:t,value:l$(e.value)};case Pe.Kind.BOOLEAN:case Pe.Kind.STRING:return{attribute:t,value:e.value.value};case Pe.Kind.VARIABLE:return u$(e.value,t,r);case Pe.Kind.OBJECT:return f$(e.value,t,r);case Pe.Kind.LIST:case Pe.Kind.ENUM:default:throw new Ur(`Value type, ${e.value.kind}, is not supported.`)}}function f$(e,t,r){return e.fields.flatMap(n=>Tde(n,t,r))}function gde(e,t){switch(e.value.kind){case Pe.Kind.NULL:return{attribute:e.name.value,value:null};case Pe.Kind.INT:return{attribute:e.name.value,value:iN(e.value)};case Pe.Kind.FLOAT:return{attribute:e.name.value,value:l$(e.value)};case Pe.Kind.BOOLEAN:case Pe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Pe.Kind.VARIABLE:return u$(e.value,e.name.value,t);case Pe.Kind.OBJECT:return f$(e.value,[e.name.value],t);case Pe.Kind.LIST:case Pe.Kind.ENUM:default:throw new Ur(`Argument type, ${e.value.kind}, is not supported.`)}}function Ade(e,t){return e.flatMap(r=>gde(r,t))}function lS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Pe.Kind.FIELD:return r;case Pe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Ur(`Fragment \`${n}\` not found.`);return lS(s.selectionSet,t)}case Pe.Kind.INLINE_FRAGMENT:return lS(r.selectionSet,t)}})}function E$(e,t){return lS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:E$(r.selectionSet,t)}:r.name.value)}async function Rde(e,t,r,n){let i=Oi.getMatch(e.name.value,"graphql").Resource,o={select:E$(e.selectionSet,r),conditions:Ade(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 h$(e){switch(e.kind){case Pe.Kind.NULL:return null;case Pe.Kind.INT:return iN(e);case Pe.Kind.FLOAT:return parseFloat(e.value);case Pe.Kind.STRING:case Pe.Kind.BOOLEAN:return e.value;case Pe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:h$(r.value),...t}),{});case Pe.Kind.LIST:case Pe.Kind.ENUM:default:throw new Ur(`Value type, ${e.kind}, is not supported.`)}}function yde(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=h$(n.defaultValue)),n.type.kind===Pe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Ur(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function bde(e,t,r,n){if(e.operation===Pe.OperationTypeNode.SUBSCRIPTION)throw new Ur("Subscriptions are not supported.");if(e.operation===Pe.OperationTypeNode.MUTATION)throw new Ur("Mutations are not supported yet.");let s=yde(e.variableDefinitions,t),i=await Promise.all(lS(e.selectionSet,r).map(c=>Rde(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function c$({query:e,variables:t={},operationName:r},n){let s=Pe.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(Sde(u),u.kind===Pe.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Ur("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 Ur(`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 Ur("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Ur(`Operation \`${r}\` not found.`);let l=await bde(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Ode(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 a$(r),c$(r,e)}case"POST":{let r=await Ro(e.headers.get("content-type"),!0)(e._nodeRequest);return a$(r),c$(r,e)}default:throw new Pi("Method Not Allowed",405,{Allow:"GET, POST"})}}function Nde(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Ode(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Pi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Pe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Ur)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 Pi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Pe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Ur)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}})}var Pe,Ur,Pi,p$=Ie(()=>{Pe=L(require("graphql"));$c();Zl();a(Sde,"assertExecutableDefinitionNode");a(a$,"assertRequestParams");a(iN,"processIntValueNode");a(l$,"processFloatValueNode");a(u$,"processVariableNode");a(d$,"isObject");a(_$,"transformObjectIntoQueryCondition");a(Tde,"processObjectFieldNode");a(f$,"processObjectValueNode");a(gde,"processArgumentNode");a(Ade,"buildConditionsQuery");a(lS,"fillInFragments");a(E$,"buildSelectQuery");a(Rde,"processFieldNode");a(h$,"processConstValueNode");a(yde,"resolveVariables");a(bde,"executeOperation");a(c$,"resolver");Ur=class extends Error{static{a(this,"GraphQLQueryingError")}},Pi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(Ode,"graphqlQueryingHandler");a(Nde,"start")});var aN={};je(aN,{start:()=>T$,startOnMainThread:()=>Cde});function T$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,m$.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(Ide.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 _ in u.attributes){let E=u.attributes[_];E.attribute_name=_,d.push(E)}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 wde(i)}}}async function wde(e){let t=ut().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,S$.isEqual)(i,e)?void 0:(e.id=r.id,(0,uS.alterRole)(e))}return(0,uS.addRole)(e)}var uS,m$,S$,Ide,Cde,g$=Ie(()=>{De();uS=L(Z_()),m$=require("yaml"),S$=require("lodash"),Ide=["super_user","cluster_user","structure_user"];a(T$,"start");a(wde,"ensureRole");Cde=T$});async function dS(e){let t=(0,y$.pathToFileURL)(e).toString();return Dde?(Jf||(Jf=Pde(Mde)),(await(await Jf).import(t)).namespace):import(t)}async function Pde(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Jf=new Compartment({console,Math,Date,fetch:Lde,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,R$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Pr,tables:jn,databases:We})}};let n=await(0,A$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Jf}function Lde(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 Mde(){return{Resource:Pr,tables:jn}}var A$,R$,y$,Dde,Jf,cN=Ie(()=>{Vs();De();A$=require("fs/promises"),R$=require("path"),y$=require("url"),Dde=!1;a(dS,"secureImport");a(Pde,"getCompartment");a(Lde,"secureOnlyFetch");a(Mde,"getGlobalVars")});var uN={};je(uN,{handleFile:()=>Ude});async function Ude(e,t,r,n){let s=new Map,i=await dS(r);c(i.default)&&n.set((0,lN.dirname)(t),i.default),o(i,(0,lN.dirname)(t));function o(l,u){for(let d in l){let _=l[d];c(_)?n.set(u+"/"+d,_):typeof _=="object"&&o(_,u+"/"+d)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var lN,b$=Ie(()=>{cN();lN=require("path");a(Ude,"handleFile")});var _N={};je(_N,{start:()=>vde});function vde({resources:e}){e.set("login",dN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var dN,O$=Ie(()=>{Vs();a(vde,"start");dN=class extends Pr{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 EN(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let _=u(l);for(let f=1;f<e.length;f++){let h=e[f],T=u(h);_=_.concat(T)}let E=new Set;return _.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let _=u(l),E=d(e.slice(1),!0,l.estimated_count);return E.length>0?o(_,E):_}function u(_){return _.conditions?EN(_.conditions,_.operator,r,n,s,i,o,c):Xu(_,n,_.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function d(_,E,f){return _.map((h,T)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,f);return S?(I,U)=>y.some(H=>H(I,U)):(I,U)=>y.every(H=>H(I,U))}let m=(h.attribute||h[0])===r.primaryKey,g=eE(h,r,i,c,m,f);return E&&T<_.length-1&&f&&(f=Vde(r.primaryStore,h.estimated_count,f)),g}).filter(Boolean)}a(d,"mapConditionsToFilters")}function Xu(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new On.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let S=o[0],y=Mi(n.attributes,S);if(y.relationship){if(o.length<2)throw new On.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=y.definition?.tableClass||y.elements?.definition?.tableClass,U=new Map,H=Xu({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,I,s,U);if(y.relationship.to){i[o[0]]=U;let X=!!Mi(I.attributes,y.relationship.to)?.elements;H=Fde(H,y,I.primaryStore,X,U)}if(y.relationship.from){let X=a(Y=>(Y?.key!==void 0&&(Y=Y.key),Xu({attribute:y.relationship.from,value:Y},t,r,n,s,U)),"searchEntry");y.elements?(i[o[0]]=U,H=Gde(H,y,I.primaryStore,U,X)):H=H.flatMap(X)}return H}else if(o.length===1)o=o[0];else throw new On.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,d,_,E;c instanceof Date&&(c=c.getTime());let f;switch(hN[l]||l){case"lt":u=!0,d=c;break;case"le":u=!0,d=c,_=!0;break;case"gt":u=c,E=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,d=c.slice(0),d[d.length-1]=Li.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),d=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),d=c[1],d instanceof Date&&(d=d.getTime()),_=l==="gele"||l==="gtle"||l==="between",E=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,d=c,_=!0;break;case"ne":if(c===null){u=c,E=!0;break}case"sort":case"contains":case"ends_with":u=!0,f=!0;break;default:throw new On.ClientError(`Unknown query comparator "${l}"`)}let h,T=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>bs.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,bs.MAX_SEARCH_KEY_LENGTH)+bs.OVERFLOW_MARKER,E=!1,h=eE(e,n,null,i,T)),typeof d=="string"&&d.length>bs.MAX_SEARCH_KEY_LENGTH&&(d=d.slice(0,bs.MAX_SEARCH_KEY_LENGTH)+bs.OVERFLOW_MARKER,_=!0,h=h??eE(e,n,null,i,T)),r){let S=u;u=d,d=S,S=!E,E=!_,_=S}let m=T?n.primaryStore:n.indices[o];if(!m||m.isIndexing||f||c===null&&!m.indexNulls){if(s===!1&&!m)throw new On.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new On.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(m?.isIndexing)throw new On.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&m&&!m.indexNulls)throw new On.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??eE(e,n,null,i,T),!h)throw new On.ClientError(`Unknown search operator ${e.comparator}`)}let g={start:u,end:d,inclusiveEnd:_,exclusiveStart:E,values:!0,versions:T,transaction:t,reverse:r};if(T){let S=m.getRange(g).map(h?function({key:y,value:I}){return this?.isSync?I&&h(I)?y:Aa.SKIP:new Promise((U,H)=>setImmediate(()=>{try{U(I&&h(I)?y:Aa.SKIP)}catch(X){H(X)}}))}:y=>y.value==null&&!(y.metadataFlags&(Os|ya))?Aa.SKIP:y);return S.hasEntries=!0,S}else return m?m.getRange(g).map(h?function({key:S,value:y}){let I;return typeof S=="string"&&S.length>bs.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(y):I={[o]:S},this.isSync?h(I)?y:Aa.SKIP:new Promise((U,H)=>setImmediate(()=>{try{U(h(I)?y:Aa.SKIP)}catch(X){H(X)}}))}:({value:S})=>S):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:S,value:y}){return this.isSync?y&&h(y)?S:Aa.SKIP:new Promise((I,U)=>setImmediate(()=>{try{I(y&&h(y)?S:Aa.SKIP)}catch(H){U(H)}}))})}function Mi(e,t){if(Array.isArray(t))if(t.length>1){let r=Mi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Mi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Fde(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,d)=>{let _=s.get(u);_?_.push(d):s.set(u,_=[d])},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),_=d?.[c];if(_!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<_.length;E++)l(_[E],u);else l(_,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function Gde(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(_=>u.has(_));for(let d of e){if(n.filters){let _=r.get(d);if(n.filters.some(E=>!E(_)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function eE(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],_=Mi(t.attributes,d),E=_.definition?.tableClass||_.elements.definition?.tableClass,f=n?.[d],h=eE({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},E,r,f?.[d]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let T=t.propertyResolvers?.[d],m,g=a((S,y)=>{let I,U;if(T){if(T.from&&h.idFilter){if(!m)if(h.idFilter.idSet?.size===1){for(let X of h.idFilter.idSet)e={attribute:T.from,value:X};m=u(T.from,h.idFilter,!0,!0)}else m=u(T.from,h.idFilter,!1,!0);let H=m(S);return m.idFilter&&(g.idFilter=m.idFilter),H}U=T(S,r,y),I=U?.value}else I=S[d];return I?Array.isArray(I)?I.some(h):h(I,U):!1},"recordFilter");return g}}switch(l instanceof Date&&(l=l.getTime()),hN[o]||o){case bs.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let _=0,E=l.length;_<E;_++)if(d[_]!==l[_])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Li.compareKeys)(d,l[0])>=0&&(0,Li.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Li.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Li.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Li.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Li.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Li.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new On.ClientError(`Unknown query comparator "${o}"`)}function u(d,_,E,f){let h;E=E&&!s&&t?.indices[d]&&i>3,E&&(e.estimated_count==null&&fS(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let T=0,m=3;function g(S){let y=S[d],I;if(typeof y!="object"||!y||f?I=_(y):Array.isArray(y)?I=y.some(_):y instanceof Date&&(I=_(y.getTime())),E&&(m++,!I&&!g.idFilter&&++T/m*(i-m)>h)){let U=Xu(e,r.transaction.getReadTxn(),!1,t).map(Zu),H=new Set(U);g.idFilter=X=>H.has(Zu(X)),g.idFilter.idSet=H}return I}return a(g,"recordFilter"),s&&(g.idFilter=_),g}a(u,"attributeComparator")}function fS(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/yo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=hN[n]||n,n===bs.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Mi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=fS(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*yo(e.indices[i.relationship.from])/(yo(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=yo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=xde*yo(e.primaryStore)+1:n==="between"?r.estimated_count=Hde*yo(e.primaryStore)+1:n==="sort"?r.estimated_count=yo(e.primaryStore)+1:r.estimated_count=Bde*yo(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function ES(e){if(e)if(Ra=e,Qu.lastIndex=0,qde.test(e))try{let t=Xf(new Ju,"");if(bn!==Ra.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${bn} in '${Ra}'`,t}else return new URLSearchParams(e)}function Xf(e,t){let r=Qu,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Ra);){bn=r.lastIndex;let[,d,_]=n;if(o){if(d)throw new SyntaxError(`expected operator, but encountered '${d}'`);o=!1,c=!1}else c=!0;let E;switch(_){case"=":if(s!=null){if(d.length<=2)i=d;else throw new SyntaxError(`invalid FIQL operator ${d}`);l=N$}else{if(l=decodeURIComponent,i="equals",!d)throw new SyntaxError("attribute must be specified before equality comparator");s=Zf(d)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=kde[_],l=fN[i]?N$:decodeURIComponent,!d)throw new SyntaxError(`attribute must be specified before comparator ${_}`);s=Zf(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${_[0]?"'"+_[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${_?"'"+_+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&I$(h,d),s===""){let T=e.conditions[e.conditions.length-1];T.chainedConditions=T.chainedConditions||[],T.chainedConditions.push(h),T.operator=u}else _S(e,u),e.conditions.push(h)}_==="&"?(u="and",s=void 0):_==="|"?(u="or",s=void 0):_==="&="?(u="and",s=""):_==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Zf(d)),s=void 0;break;case"(":Qu.lastIndex=bn;let f=Xf(d?[]:new Ju,")");switch(d){case"":_S(e,u),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=w$(f);break;default:throw new SyntaxError(`unknown query function call ${d}`)}Ra[bn]===","?r.lastIndex=++bn:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!d)throw new SyntaxError("property sets must have a defined parent property name");Qu.lastIndex=bn,E=Xf([],"}"),E.name=d,e.push(E),Ra[bn]===","?r.lastIndex=++bn:o=!0;break;case"[":Qu.lastIndex=bn,d?(E=Xf(new Ju,"]"),E.name=d):E=Xf(e.conditions?new Ju:[],"]"),e.conditions?(_S(e,u),e.conditions.push(E),s=null):e.push(E),Ra[bn]===","?r.lastIndex=++bn:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&I$(h,d),_S(e,u),e.conditions.push(h)}else if(d)throw new SyntaxError("no attribute or comparison specified")}else(d||e.length>0&&c)&&e.push(Zf(d));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${_[0]}'`):new SyntaxError(`unexpected token '${_[0]}'`);default:throw new SyntaxError(`unexpected operator '${_}'`)}if(t!==")"&&(r=s?$de:Qu,r.lastIndex=bn),bn===Ra.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function _S(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Zf(e){return e.indexOf(".")>-1?e.split(".").map(Zf):decodeURIComponent(e)}function N$(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new On.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function I$(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new On.ClientError("wildcard can only be used at the end of a string")}function w$(e){let t=C$(e[0]);return e.length>1&&(t.next=w$(e.slice(1))),t}function C$(e){if(Array.isArray(e)){let t=C$(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Zu(e){return Array.isArray(e)?e.join("\0"):e}function yo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Vde(e,t,r){return t*r/yo(e)}var On,bs,Li,Aa,Bde,Hde,xde,kde,fN,hN,qde,Qu,$de,bn,Ra,Ju,el,tE=Ie(()=>{On=L(_e()),bs=L(Ht()),Li=require("ordered-binary"),Aa=require("lmdb");Lf();Bde=.3,Hde=.1,xde=.05,kde={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},fN={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EN,"executeConditions");a(Xu,"searchByIndex");a(Mi,"findAttribute");a(Fde,"joinTo");a(Gde,"joinFrom");hN={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(eE,"filterByType");a(fS,"estimateCondition");qde=/[()[\]|!<>.]|(=\w*=)/,Qu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,$de=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(ES,"parseQuery");a(Xf,"parseBlock");a(_S,"assignOperator");a(Zf,"decodeProperty");a(N$,"typedDecoding");a(I$,"wildcardDecoding");a(w$,"toSortObject");a(C$,"toSortEntry");Ju=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Zu,"flattenKey");a(yo,"estimatedEntryCount");a(Vde,"intersectionEstimate");el=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});function U$(e){let t={openapi:Kde,info:{title:"HarperDB HTTP REST interface",version:(0,M$.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},d=[];if(o)for(let{type:y,name:I,elements:U,relationship:H,definition:X}of o){if(H)y==="array"?u[I]={type:"array",items:{$ref:ba+U.type}}:u[I]={$ref:ba+y};else{let Y=X??U?.definition;if(Y){if(!t.components.schemas[Y.type]){let V={};Y.properties.forEach(ne=>{V[ne.name]=new TN(pN[ne.type],ne.type)}),t.components.schemas[Y.type]=new L$(V)}y==="array"?u[I]={type:"array",items:{$ref:ba+Y.type}}:u[I]={$ref:ba+Y.type}}else y==="array"?U.type==="Any"||U.type=="ID"?u[I]={type:"array",items:{format:U.type}}:u[I]={type:"array",items:new TN(pN[U.type],U.type)}:y==="Any"||y=="ID"?u[I]={format:y}:u[I]=new TN(pN[y],y)}d.push(new gN(I,"query",u[I]))}let _=Object.keys(u),E=new gN(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new gN("property","path",{enum:_});f.required=!0,t.components.schemas[i]=new L$(u);let h=l.post!==Resource.prototype.post||l.update,T=typeof l.put=="function",m=typeof l.get=="function",g=typeof l.delete=="function",S="/"+s+"/";h&&(t.paths[S]={},t.paths[S].post=new Yde(i,r,"create a new record auto-assigning a primary key")),m&&(t.paths[S]||(t.paths[S]={}),t.paths[S].get=new mN(d,r,{200:new SN({$ref:ba+i})},"search for records by the specified property name and value pairs")),g&&(t.paths[S]||(t.paths[S]={}),t.paths[S].delete=new P$(d,r,"delete all the records that match the provided query",{204:new D$})),S="/"+s+"/{"+c+"}",m&&(t.paths[S]={},t.paths[S].get=new mN([E],r,{200:new SN({$ref:ba+i})},"retrieve a record by its primary key")),T&&(t.paths[S]||(t.paths[S]={}),t.paths[S].put=new Wde([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),g&&(t.paths[S]||(t.paths[S]={}),t.paths[S].delete=new P$([E],r,"delete a record with the given primary key",{204:new D$})),m&&f.schema.enum.length>0&&(S="/"+s+"/{"+c+"}.{property}",t.paths[S]={},t.paths[S].get=new mN([E,f],r,{200:new SN({enum:_})},"used to retrieve the specified property of the specified record"))}return t}function Yde(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:ba+e}}}},this.security=t,this.responses={200:{description:AN,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function mN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function SN(e){this.description=AN,this.content={"application/json":{schema:e}}}function D$(){this.description="successfully processed request, no content returned to client"}function Wde(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:ba+r}}}},this.responses={200:{description:AN}}}function P$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function L$(e){this.type="object",this.properties=e}function TN(e,t){this.type=e,this.format=t}function gN(e,t,r){this.name=e,this.in=t,this.schema=r}var M$,Kde,pN,ba,AN,v$=Ie(()=>{M$=L(Dc()),Kde="3.0.3",pN={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},ba="#/components/schemas/",AN="successful operation";a(U$,"generateJsonApi");a(Yde,"Post");a(mN,"Get");a(SN,"Response200");a(D$,"Response204");a(Wde,"Put");a(P$,"Delete");a(L$,"ResourceSchema");a(TN,"Type");a(gN,"Parameter")});var pS={};je(pS,{parseHeaderValue:()=>yN,start:()=>Qde});async function zde(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&ES(e);let i=new ho;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==B$){let m=hS.getMatch(o,n?"sse":"rest");if(!m)return t(e);e.handlerPath=m.path,c=new el(m.relativeURL),c.async=!0,l=m.Resource}if(l?.isCaching){let m=r["cache-control"];if(m){let g=yN(m);for(let S of g)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 m=yN(u).map(g=>(g.next?.name==="confirm"&&g.next.value>=0&&(e.replicatedConfirmation=+g.next.value),g.name));e.replicateTo=m.length===1&&+m[0]>=0?+m[0]:m[0]==="*"?void 0:m}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let _=await Dt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ro(r["content-type"],!0)(e.body,e.headers)}catch(m){throw new ed.ClientError(m,400)}if(e.authorize=!0,o===B$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return U$(hS);throw new ed.ServerError("Forbidden",403)}switch(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 ed.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ed.ServerError(`Method ${s} is not recognized`,501)}}),E=200,f;if(_==null)E=s==="GET"||s==="HEAD"?404:204,RN.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(_.status>0&&_.headers){let m=Zb(_.headers,i);return _.headers!==m&&(_.headers=m),_.data!==void 0&&(_.body=Qf(_.data,e,_)),_}else if(f=e.lastModified){jde[0]=f;let m=String.fromCharCode(34,(vr[0]&63)+62,(vr[0]>>6)+(vr[1]<<2&63)+62,(vr[1]>>4)+(vr[2]<<4&63)+62,(vr[2]>>2)+62,(vr[3]&63)+62,(vr[3]>>6)+(vr[4]<<2&63)+62,(vr[4]>>4)+(vr[5]<<4&63)+62,(vr[5]>>2)+62,(vr[6]&63)+62,(vr[6]>>6)+(vr[7]<<2&63)+62,34),g=r["if-none-match"];g&&m==g?(_?.onDone&&_.onDone(),E=304,_=void 0):i.setIfNone("ETag",m),RN.lastModified&&i.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(E=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:E,headers:i,body:void 0},T=_?.wasLoadedFromSource?.();return T!==void 0&&(h.wasCacheMiss=T,!T&&f&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),_!==void 0&&(h.body=Qf(_,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?Ui.warn(o):Ui.info(o):Ui.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=Qf(o.contentType?o:o.toString(),e,c),c}}function Qde(e){RN=e,!H$&&(H$=!0,hS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return zde(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{rE++;let s=new Pn;x$||(x$=!0,Y_(l=>{rE>0&&l.push({metric:"ws-connections",connections:rE,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ui.warn(l)});let o;t.on("message",a(function(u){o||(o=Ro(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);s.push(d)},"message"));let c;t.on("close",()=>{rE--,qn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=hS.getMatch(l,"ws");if(qn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,mr(h=>({count:h.count,total:rE}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new el(u.relativeURL),_=u.Resource;c=(await Dt(r,()=>_.connect(d,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=qc(f.value,r);t.send(h),mr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Ui.warn(l):Ui.info(l):Ui.error(l),t.close(Jde[l.statusCode]||1011,l.toString())}t.close()},e))}function yN(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 Ui,ed,vr,jde,RN,B$,H$,hS,x$,rE,Jde,k$=Ie(()=>{$c();Ii();Ui=L(j()),ed=L(_e());tE();Cl();pc();Of();v$();tE();vr=new Uint8Array(8),jde=new Float64Array(vr.buffer,0,1),RN={},B$="openapi";a(zde,"http");rE=0;a(Qde,"start");Jde={401:3e3,403:3003};a(yN,"parseHeaderValue")});var bN=N((KDe,G$)=>{var{recordAction:mS,recordActionBinary:F$}=(Ii(),oe(W_)),Xde=require("fastify-plugin"),Zde=200;G$.exports=Xde(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,_;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",_=l.method),mS(o,"duration",u,_,d),F$(s.raw.statusCode<400,"success",u,_,d),F$(1,"response_"+s.raw.statusCode,u,_,d);let E=Zde;i?.pipe?(i.on("data",m=>{E+=m.length}),i.on("end",()=>{mS(performance.now()-c,"transfer",u,_,d),mS(E,"bytes-sent",u,_,d)})):(E+=i?.length||0,mS(E,"bytes-sent",u,_,d));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),T=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${T}`:T)}),r()},{name:"hdb-request-time"})});var TS=N((YDe,V$)=>{"use strict";var ON=M(),e_e=re(),nE=j(),{handleHDBError:NN,hdb_errors:SS}=_e(),{isMainThread:t_e}=require("worker_threads"),{Readable:r_e}=require("stream"),q$=require("os"),n_e=require("util"),s_e=Ky(),i_e=n_e.promisify(s_e.authorize),$$=xO(),{createGzip:o_e,constants:a_e}=require("zlib");function c_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${q$.EOL}Stack: ${e.stack} ${q$.EOL}Terminating ${t_e?"HDB":"thread"}.`;console.error(t),nE.fatal(t),process.exit(1)}a(c_e,"handleServerUncaughtException");function l_e(e,t,r){if(nE[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:SS.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(l_e,"serverErrorHandler");function u_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=NN(new Error,"Invalid JSON.",SS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(e_e.isEmpty(e.body.operation)){let n=NN(new Error,"Request body must include an 'operation' property.",SS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(u_e,"reqBodyValidationHandler");function d_e(e,t,r){let n;e.body.operation!==ON.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==ON.OPERATIONS_ENUM.LOGIN&&e.body.operation!==ON.OPERATIONS_ENUM.LOGOUT?i_e(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{nE.warn(s),nE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(NN(s,i,SS.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(d_e,"authHandler");async function __e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=$$.chooseOperation(e.body);let s=await $$.processLocalTransaction(e,n);if(s instanceof r_e&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(o_e({level:a_e.Z_BEST_SPEED})))}return s}catch(s){throw nE.error(s),s}}a(__e,"handlePostRequest");V$.exports={authHandler:d_e,handlePostRequest:__e,handleServerUncaughtException:c_e,serverErrorHandler:l_e,reqBodyValidationHandler:u_e}});var j$=N((jDe,W$)=>{"use strict";var f_e=require("fastify-plugin"),{handlePostRequest:K$,authHandler:E_e,reqBodyValidationHandler:h_e}=TS();async function p_e(e){e.decorate("hdbCore",{preValidation:[h_e,E_e],request:a(t=>Y$(K$(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>Y$(K$(t,r,!0)),"requestWithoutAuthentication")})}a(p_e,"hdbCore");async function Y$(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(Y$,"convertAsyncIterators");W$.exports=f_e(p_e)});var Q$=N((JDe,z$)=>{"use strict";var QDe=require("fs"),gS=se();gS.initSync();var{CONFIG_PARAMS:IN}=M(),m_e=1024*1024*1024;function S_e(e){let t=gS.get(IN.HTTP_TIMEOUT),r=gS.get(IN.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:m_e,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:gS.get(IN.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(S_e,"getServerOptions");z$.exports=S_e});var Z$=N((ZDe,X$)=>{"use strict";var wN=se();wN.initSync();var{CONFIG_PARAMS:J$}=M();function T_e(){let e=wN.get(J$.HTTP_CORSACCESSLIST),t=wN.get(J$.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(T_e,"getCORSOptions");X$.exports=T_e});var rV=N((tPe,tV)=>{"use strict";var eV=se();eV.initSync();var g_e=M();function A_e(){return eV.get(g_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(A_e,"getHeaderTimeoutConfig");tV.exports=A_e});var DN={};je(DN,{customFunctionsServer:()=>b_e,ready:()=>mV,start:()=>y_e});function y_e(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){bo||(bo=pV(t),it.http((await bo).server));let o=await bo,c=(0,CN.dirname)(s),l=(0,CN.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!nV.has(c)){nV.add(c);try{o.register(N_e(c,l))}catch(u){if(u.message==="Root plugin has already booted")mt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:mV}}async function b_e(){try{mt.info("In Custom Functions Fastify server"+process.cwd()),mt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),mt.debug(`Custom Functions server process ${process.pid} starting up.`),await O_e();let e=lV.get(uV.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=bo=await pV(e)}catch(r){throw mt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw mt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){mt.error(`Custom Functions ${process.pid} Error: ${e}`),mt.error(e),process.exit(1)}}async function O_e(){try{mt.info("Custom Functions starting configuration."),await dV.setUsersToGlobal(),mt.info("Custom Functions completed configuration.")}catch(e){mt.error(e)}}function N_e(e,t){return async function(r){try{mt.info("Custom Functions starting buildRoutes"),mt.trace("Loading fastify routes folder "+e),(0,sV.existsSync)(e)&&r.register(cV.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:mt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?mt.error(s.message):s&&mt.error(s),o()})}catch(n){mt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function pV(e){mt.info("Custom Functions starting buildServer.");let t=(0,_V.default)(e),r=(0,iV.default)(t);r.server.headersTimeout=(0,EV.default)(),r.setErrorHandler(hV.serverErrorHandler);let n=(0,fV.default)();return n&&r.register(oV.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(aV.default),await r.register(R_e),await r.after(),sN(r),mt.info("Custom Functions completed buildServer."),r}function mV(){if(bo)return bo.then?bo.then(e=>e.ready()):bo.ready()}var CN,sV,iV,oV,aV,cV,lV,uV,mt,R_e,dV,_V,fV,EV,hV,bo,nV,SV=Ie(()=>{CN=require("path"),sV=require("fs"),iV=L(require("fastify")),oV=L(require("@fastify/cors")),aV=L(bN()),cV=L(require("@fastify/autoload")),lV=L(se()),uV=L(M()),mt=L(j()),R_e=L(j$()),dV=L(xn()),_V=L(Q$()),fV=L(Z$()),EV=L(rV()),hV=L(TS());$c();qr();nV=new Set;a(y_e,"start");a(b_e,"customFunctionsServer");a(O_e,"setUp");a(N_e,"buildRouteFolder");a(pV,"buildServer");a(mV,"ready")});var PN={};je(PN,{start:()=>I_e});function I_e(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,yV.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){gV||(gV=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=TV.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,AV.default)(s,(0,RV.realpathSync)(o))}}return i(s)},{runFirst:!0})),TV.set(r,n)}}}var AV,RV,yV,TV,gV,bV=Ie(()=>{AV=L(require("send")),RV=require("fs"),yV=L(require("serve-static")),TV=new Map;a(I_e,"start")});var vN={};je(vN,{Request:()=>LN,createReuseportFd:()=>AS});var OV,LN,MN,UN,AS,RS=Ie(()=>{OV=require("os"),LN=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new UN(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._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new MN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},MN=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)}},UN=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(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,OV.platform)()!="win32"&&(AS=require("node-unix-socket").createReuseportFd)});var HN=N((cPe,NV)=>{"use strict";var sE=se();sE.initSync();var td=require("fs-extra"),BN=require("path"),rd=M(),w_e=require("crypto"),C_e=require("uuid").v4;NV.exports=D_e;function D_e(){if(sE.getHdbBasePath()!==void 0){let e=BN.join(sE.getHdbBasePath(),rd.LICENSE_KEY_DIR_NAME,rd.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=BN.join(sE.getHdbBasePath(),rd.LICENSE_KEY_DIR_NAME,rd.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=BN.join(sE.getHdbBasePath(),rd.LICENSE_KEY_DIR_NAME,rd.JWT_ENUM.JWT_PASSPHRASE_NAME);try{td.accessSync(r),td.accessSync(e),td.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=C_e(),i=w_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});td.writeFileSync(r,s),td.writeFileSync(e,i.privateKey),td.writeFileSync(t,i.publicKey)}else throw n}}}a(D_e,"checkJWTTokenExist")});var wV=N((uPe,IV)=>{"use strict";var xN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};IV.exports={HdbInfoInsertObject:xN}});var PV=N((_Pe,DV)=>{"use strict";var CV=M(),kN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[CV.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[CV.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};DV.exports={UpgradeObject:kN}});var yS=N((EPe,MV)=>{"use strict";var Ns=require("prompt"),nd=require("chalk"),LV=j(),si=require("os"),FN=Wa(),GN=["yes","y"];async function P_e(e){let t=`${si.EOL}`+nd.bold.green("Your current HarperDB version requires that we complete an update process.")+`${si.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${si.EOL}${si.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${si.EOL}`;Ns.override=FN(["CONFIRM_UPGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_UPGRADE:{description:nd.magenta(`${si.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ns.get([r])}catch(s){return LV.error("There was an error when prompting user about an upgrade."),LV.error(s),!1}return GN.includes(n.CONFIRM_UPGRADE)}a(P_e,"forceUpdatePrompt");async function L_e(e){let t=`${si.EOL}`+nd.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${si.EOL}`);Ns.override=FN(["CONFIRM_DOWNGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:nd.magenta(`${si.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ns.get([r]);return GN.includes(n.CONFIRM_DOWNGRADE)}a(L_e,"forceDowngradePrompt");async function M_e(){let e=`${si.EOL}`+nd.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ns.override=FN(["GENERATE_CERTS"]),Ns.start(),Ns.message=e;let t={properties:{GENERATE_CERTS:{description:nd.magenta(`${si.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ns.get([t]);return GN.includes(r.GENERATE_CERTS)}a(M_e,"upgradeCertsPrompt");MV.exports={forceUpdatePrompt:P_e,forceDowngradePrompt:L_e,upgradeCertsPrompt:M_e}});var $N=N((pPe,UV)=>{"use strict";var qN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};UV.exports=qN});var BV=N((RPe,vV)=>{"use strict";var U_e=re(),v_e=Ct(),SPe=j(),TPe=require("path"),gPe=require("fs"),APe=M();vV.exports={getOldPropsValue:B_e};function B_e(e,t,r=!1){let n=t.getRaw(e);return U_e.isNotEmptyAndHasValue(n)?n:r?v_e.getDefaultConfig(e):""}a(B_e,"getOldPropsValue")});var FV=N((bPe,kV)=>{"use strict";var Oa=require("path"),Na=require("fs-extra"),H_e=require("properties-reader"),x_e=$N(),lr=j(),{getOldPropsValue:St}=BV(),{HDB_SETTINGS_NAMES:he,CONFIG_PARAMS:tl}=M(),rl=Ct(),bS=se(),HV=re(),vi=M(),VN=new x_e("3.1.0"),xV=[];function k_e(){let e=H_e(bS.get(he.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),lr.info(t);let r=` ;Settings for the HarperDB process.
38
+ `},"serialize"),compressible:!1,q:.8});Zr.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});i$={type:"application/json",serializeStream:Yd,serialize:jf,deserialize:lde,q:.5};Zr.set("*/*",i$);Zr.set("",i$);a(lde,"tryJSONParse");a(sN,"registerContentHandlers");ude=require("fastify-plugin"),dde=ude(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=cS(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&o.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(_=>(_.toJSON=()=>({error:_.name,message:_.message,..._.partialObject}),_)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,_)=>{s.header(d,_)},"set")}})})}),r()},{name:"content-type-negotiation"});a(cS,"findBestSerializer");e$=ZO.default.get(eN.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Qf,"serialize");a(qc,"serializeMessage");a(_de,"streamToBuffer");fde=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(Ede,"isBufferEncoding");a(hde,"parseContentType");a(Ro,"getDeserializer");a(pde,"deserializerUnknownType");a(mde,"transformIterable")});var oN={};je(oN,{start:()=>Nde});function Sde(e){if(e.kind!==Pe.Kind.OPERATION_DEFINITION&&e.kind!==Pe.Kind.FRAGMENT_DEFINITION)throw new Ur(`Unexpected non-executable definition type ${e.kind}.`)}function a$(e){if(typeof e!="object"||e===null)throw new Pi("Request body must be an object.");if(!("query"in e))throw new Pi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Pi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Pi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Pi("Request body `operationName` field must be a string.")}function iN(e){return parseInt(e.value,10)}function l$(e){return parseFloat(e.value)}function u$(e,t,r){let n=r.get(e.name.value);return d$(n)?_$(n,t):{attribute:t,value:n}}function d$(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function _$(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],d$(n)?_$(n,t):{attribute:t,value:n}))}function Tde(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Pe.Kind.NULL:return{attribute:t,value:null};case Pe.Kind.INT:return{attribute:t,value:iN(e.value)};case Pe.Kind.FLOAT:return{attribute:t,value:l$(e.value)};case Pe.Kind.BOOLEAN:case Pe.Kind.STRING:return{attribute:t,value:e.value.value};case Pe.Kind.VARIABLE:return u$(e.value,t,r);case Pe.Kind.OBJECT:return f$(e.value,t,r);case Pe.Kind.LIST:case Pe.Kind.ENUM:default:throw new Ur(`Value type, ${e.value.kind}, is not supported.`)}}function f$(e,t,r){return e.fields.flatMap(n=>Tde(n,t,r))}function gde(e,t){switch(e.value.kind){case Pe.Kind.NULL:return{attribute:e.name.value,value:null};case Pe.Kind.INT:return{attribute:e.name.value,value:iN(e.value)};case Pe.Kind.FLOAT:return{attribute:e.name.value,value:l$(e.value)};case Pe.Kind.BOOLEAN:case Pe.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Pe.Kind.VARIABLE:return u$(e.value,e.name.value,t);case Pe.Kind.OBJECT:return f$(e.value,[e.name.value],t);case Pe.Kind.LIST:case Pe.Kind.ENUM:default:throw new Ur(`Argument type, ${e.value.kind}, is not supported.`)}}function Ade(e,t){return e.flatMap(r=>gde(r,t))}function lS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Pe.Kind.FIELD:return r;case Pe.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Ur(`Fragment \`${n}\` not found.`);return lS(s.selectionSet,t)}case Pe.Kind.INLINE_FRAGMENT:return lS(r.selectionSet,t)}})}function E$(e,t){return lS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:E$(r.selectionSet,t)}:r.name.value)}async function Rde(e,t,r,n){let i=Oi.getMatch(e.name.value,"graphql").Resource,o={select:E$(e.selectionSet,r),conditions:Ade(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 h$(e){switch(e.kind){case Pe.Kind.NULL:return null;case Pe.Kind.INT:return iN(e);case Pe.Kind.FLOAT:return parseFloat(e.value);case Pe.Kind.STRING:case Pe.Kind.BOOLEAN:return e.value;case Pe.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:h$(r.value),...t}),{});case Pe.Kind.LIST:case Pe.Kind.ENUM:default:throw new Ur(`Value type, ${e.kind}, is not supported.`)}}function yde(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=h$(n.defaultValue)),n.type.kind===Pe.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Ur(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function bde(e,t,r,n){if(e.operation===Pe.OperationTypeNode.SUBSCRIPTION)throw new Ur("Subscriptions are not supported.");if(e.operation===Pe.OperationTypeNode.MUTATION)throw new Ur("Mutations are not supported yet.");let s=yde(e.variableDefinitions,t),i=await Promise.all(lS(e.selectionSet,r).map(c=>Rde(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function c$({query:e,variables:t={},operationName:r},n){let s=Pe.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(Sde(u),u.kind===Pe.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Ur("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 Ur(`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 Ur("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Ur(`Operation \`${r}\` not found.`);let l=await bde(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function Ode(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 a$(r),c$(r,e)}case"POST":{let r=await Ro(e.headers.get("content-type"),!0)(e._nodeRequest);return a$(r),c$(r,e)}default:throw new Pi("Method Not Allowed",405,{Allow:"GET, POST"})}}function Nde(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await Ode(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Pi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Pe.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Ur)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 Pi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Pe.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Ur)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}})}var Pe,Ur,Pi,p$=Ie(()=>{Pe=L(require("graphql"));$c();Zl();a(Sde,"assertExecutableDefinitionNode");a(a$,"assertRequestParams");a(iN,"processIntValueNode");a(l$,"processFloatValueNode");a(u$,"processVariableNode");a(d$,"isObject");a(_$,"transformObjectIntoQueryCondition");a(Tde,"processObjectFieldNode");a(f$,"processObjectValueNode");a(gde,"processArgumentNode");a(Ade,"buildConditionsQuery");a(lS,"fillInFragments");a(E$,"buildSelectQuery");a(Rde,"processFieldNode");a(h$,"processConstValueNode");a(yde,"resolveVariables");a(bde,"executeOperation");a(c$,"resolver");Ur=class extends Error{static{a(this,"GraphQLQueryingError")}},Pi=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(Ode,"graphqlQueryingHandler");a(Nde,"start")});var aN={};je(aN,{start:()=>T$,startOnMainThread:()=>Cde});function T$({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,m$.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(Ide.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 _ in u.attributes){let E=u.attributes[_];E.attribute_name=_,d.push(E)}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 wde(i)}}}async function wde(e){let t=ut().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,S$.isEqual)(i,e)?void 0:(e.id=r.id,(0,uS.alterRole)(e))}return(0,uS.addRole)(e)}var uS,m$,S$,Ide,Cde,g$=Ie(()=>{De();uS=L(J_()),m$=require("yaml"),S$=require("lodash"),Ide=["super_user","cluster_user","structure_user"];a(T$,"start");a(wde,"ensureRole");Cde=T$});async function dS(e){let t=(0,y$.pathToFileURL)(e).toString();return Dde?(Jf||(Jf=Pde(Mde)),(await(await Jf).import(t)).namespace):import(t)}async function Pde(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Jf=new Compartment({console,Math,Date,fetch:Lde,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,R$.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:Pr,tables:zn,databases:We})}};let n=await(0,A$.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Jf}function Lde(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 Mde(){return{Resource:Pr,tables:zn}}var A$,R$,y$,Dde,Jf,cN=Ie(()=>{Vs();De();A$=require("fs/promises"),R$=require("path"),y$=require("url"),Dde=!1;a(dS,"secureImport");a(Pde,"getCompartment");a(Lde,"secureOnlyFetch");a(Mde,"getGlobalVars")});var uN={};je(uN,{handleFile:()=>Ude});async function Ude(e,t,r,n){let s=new Map,i=await dS(r);c(i.default)&&n.set((0,lN.dirname)(t),i.default),o(i,(0,lN.dirname)(t));function o(l,u){for(let d in l){let _=l[d];c(_)?n.set(u+"/"+d,_):typeof _=="object"&&o(_,u+"/"+d)}}a(o,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(c,"isResource"),s}var lN,b$=Ie(()=>{cN();lN=require("path");a(Ude,"handleFile")});var _N={};je(_N,{start:()=>vde});function vde({resources:e}){e.set("login",dN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var dN,O$=Ie(()=>{Vs();a(vde,"start");dN=class extends Pr{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 EN(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let _=u(l);for(let f=1;f<e.length;f++){let h=e[f],T=u(h);_=_.concat(T)}let E=new Set;return _.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let _=u(l),E=d(e.slice(1),!0,l.estimated_count);return E.length>0?o(_,E):_}function u(_){return _.conditions?EN(_.conditions,_.operator,r,n,s,i,o,c):Qu(_,n,_.descending||s.reverse===!0,r,s.allowFullScan,c)}a(u,"executeCondition");function d(_,E,f){return _.map((h,T)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,f);return S?(I,U)=>y.some(H=>H(I,U)):(I,U)=>y.every(H=>H(I,U))}let m=(h.attribute||h[0])===r.primaryKey,g=eE(h,r,i,c,m,f);return E&&T<_.length-1&&f&&(f=Vde(r.primaryStore,h.estimated_count,f)),g}).filter(Boolean)}a(d,"mapConditionsToFilters")}function Qu(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,l=e.comparator;if(c===void 0&&l!=="sort")throw new On.ClientError(`Search condition for ${o} must have a value`);if(Array.isArray(o)){let S=o[0],y=Mi(n.attributes,S);if(y.relationship){if(o.length<2)throw new On.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=y.definition?.tableClass||y.elements?.definition?.tableClass,U=new Map,H=Qu({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:l},t,r,I,s,U);if(y.relationship.to){i[o[0]]=U;let X=!!Mi(I.attributes,y.relationship.to)?.elements;H=Fde(H,y,I.primaryStore,X,U)}if(y.relationship.from){let X=a(Y=>(Y?.key!==void 0&&(Y=Y.key),Qu({attribute:y.relationship.from,value:Y},t,r,n,s,U)),"searchEntry");y.elements?(i[o[0]]=U,H=Gde(H,y,I.primaryStore,U,X)):H=H.flatMap(X)}return H}else if(o.length===1)o=o[0];else throw new On.ClientError("Unable to query by attribute "+JSON.stringify(o))}let u,d,_,E;c instanceof Date&&(c=c.getTime());let f;switch(hN[l]||l){case"lt":u=!0,d=c;break;case"le":u=!0,d=c,_=!0;break;case"gt":u=c,E=!0;break;case"ge":u=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],u=c,d=c.slice(0),d[d.length-1]=Li.MAXIMUM_KEY;break;case"starts_with":u=c.toString(),d=c+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":u=c[0],u instanceof Date&&(u=u.getTime()),d=c[1],d instanceof Date&&(d=d.getTime()),_=l==="gele"||l==="gtle"||l==="between",E=l==="gtlt"||l==="gtle";break;case"equals":case void 0:u=c,d=c,_=!0;break;case"ne":if(c===null){u=c,E=!0;break}case"sort":case"contains":case"ends_with":u=!0,f=!0;break;default:throw new On.ClientError(`Unknown query comparator "${l}"`)}let h,T=o===n.primaryKey||o==null;if(typeof u=="string"&&u.length>bs.MAX_SEARCH_KEY_LENGTH&&(u=u.slice(0,bs.MAX_SEARCH_KEY_LENGTH)+bs.OVERFLOW_MARKER,E=!1,h=eE(e,n,null,i,T)),typeof d=="string"&&d.length>bs.MAX_SEARCH_KEY_LENGTH&&(d=d.slice(0,bs.MAX_SEARCH_KEY_LENGTH)+bs.OVERFLOW_MARKER,_=!0,h=h??eE(e,n,null,i,T)),r){let S=u;u=d,d=S,S=!E,E=!_,_=S}let m=T?n.primaryStore:n.indices[o];if(!m||m.isIndexing||f||c===null&&!m.indexNulls){if(s===!1&&!m)throw new On.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new On.ClientError(`Can not use ${l||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(m?.isIndexing)throw new On.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&m&&!m.indexNulls)throw new On.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??eE(e,n,null,i,T),!h)throw new On.ClientError(`Unknown search operator ${e.comparator}`)}let g={start:u,end:d,inclusiveEnd:_,exclusiveStart:E,values:!0,versions:T,transaction:t,reverse:r};if(T){let S=m.getRange(g).map(h?function({key:y,value:I}){return this?.isSync?I&&h(I)?y:Aa.SKIP:new Promise((U,H)=>setImmediate(()=>{try{U(I&&h(I)?y:Aa.SKIP)}catch(X){H(X)}}))}:y=>y.value==null&&!(y.metadataFlags&(Os|ya))?Aa.SKIP:y);return S.hasEntries=!0,S}else return m?m.getRange(g).map(h?function({key:S,value:y}){let I;return typeof S=="string"&&S.length>bs.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(y):I={[o]:S},this.isSync?h(I)?y:Aa.SKIP:new Promise((U,H)=>setImmediate(()=>{try{U(h(I)?y:Aa.SKIP)}catch(X){H(X)}}))}:({value:S})=>S):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:S,value:y}){return this.isSync?y&&h(y)?S:Aa.SKIP:new Promise((I,U)=>setImmediate(()=>{try{I(y&&h(y)?S:Aa.SKIP)}catch(H){U(H)}}))})}function Mi(e,t){if(Array.isArray(t))if(t.length>1){let r=Mi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Mi(n,t.slice(1)):void 0}else t=t.toString();else typeof t!="string"&&(t=t.toString());return e.find(r=>r.name===t)}function Fde(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=a((u,d)=>{let _=s.get(u);_?_.push(d):s.set(u,_=[d])},"add_entry");for(let u of e){let d=u.value??r.get(u.key??u),_=d?.[c];if(_!=null&&!s.filters?.some(E=>!E(d)))if(n)for(let E=0;E<_.length;E++)l(_[E],u);else l(_,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function Gde(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let l;if(o)for(;l=o.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(_=>u.has(_));for(let d of e){if(n.filters){let _=r.get(d);if(n.filters.some(E=>!E(_)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function eE(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],_=Mi(t.attributes,d),E=_.definition?.tableClass||_.elements.definition?.tableClass,f=n?.[d],h=eE({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},E,r,f?.[d]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let T=t.propertyResolvers?.[d],m,g=a((S,y)=>{let I,U;if(T){if(T.from&&h.idFilter){if(!m)if(h.idFilter.idSet?.size===1){for(let X of h.idFilter.idSet)e={attribute:T.from,value:X};m=u(T.from,h.idFilter,!0,!0)}else m=u(T.from,h.idFilter,!1,!0);let H=m(S);return m.idFilter&&(g.idFilter=m.idFilter),H}U=T(S,r,y),I=U?.value}else I=S[d];return I?Array.isArray(I)?I.some(h):h(I,U):!1},"recordFilter");return g}}switch(l instanceof Date&&(l=l.getTime()),hN[o]||o){case bs.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let _=0,E=l.length;_<E;_++)if(d[_]!==l[_])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Li.compareKeys)(d,l[0])>=0&&(0,Li.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Li.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Li.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Li.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Li.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Li.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new On.ClientError(`Unknown query comparator "${o}"`)}function u(d,_,E,f){let h;E=E&&!s&&t?.indices[d]&&i>3,E&&(e.estimated_count==null&&fS(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let T=0,m=3;function g(S){let y=S[d],I;if(typeof y!="object"||!y||f?I=_(y):Array.isArray(y)?I=y.some(_):y instanceof Date&&(I=_(y.getTime())),E&&(m++,!I&&!g.idFilter&&++T/m*(i-m)>h)){let U=Qu(e,r.transaction.getReadTxn(),!1,t).map(Ju),H=new Set(U);g.idFilter=X=>H.has(Ju(X)),g.idFilter.idSet=H}return I}return a(g,"recordFilter"),s&&(g.idFilter=_),g}a(u,"attributeComparator")}function fS(e){function t(r){if(r.estimated_count===void 0){if(r.conditions){let s;if(r.operator==="or"){s=0;for(let i of r.conditions)t(i),s+=i.estimated_count}else{s=1/0;for(let i of r.conditions)t(i),s=isFinite(s)?s*i.estimated_count/yo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=hN[n]||n,n===bs.SEARCH_TYPES.EQUALS||!n){let s=r[0]??r.attribute;if(s==null||s===e.primaryKey)r.estimated_count=1;else if(Array.isArray(s)&&s.length>1){let i=Mi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=fS(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*yo(e.indices[i.relationship.from])/(yo(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=yo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=xde*yo(e.primaryStore)+1:n==="between"?r.estimated_count=Hde*yo(e.primaryStore)+1:n==="sort"?r.estimated_count=yo(e.primaryStore)+1:r.estimated_count=Bde*yo(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function ES(e){if(e)if(Ra=e,ju.lastIndex=0,qde.test(e))try{let t=Xf(new zu,"");if(bn!==Ra.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${bn} in '${Ra}'`,t}else return new URLSearchParams(e)}function Xf(e,t){let r=ju,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec(Ra);){bn=r.lastIndex;let[,d,_]=n;if(o){if(d)throw new SyntaxError(`expected operator, but encountered '${d}'`);o=!1,c=!1}else c=!0;let E;switch(_){case"=":if(s!=null){if(d.length<=2)i=d;else throw new SyntaxError(`invalid FIQL operator ${d}`);l=N$}else{if(l=decodeURIComponent,i="equals",!d)throw new SyntaxError("attribute must be specified before equality comparator");s=Zf(d)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=kde[_],l=fN[i]?N$:decodeURIComponent,!d)throw new SyntaxError(`attribute must be specified before comparator ${_}`);s=Zf(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${_[0]?"'"+_[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${_?"'"+_+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&I$(h,d),s===""){let T=e.conditions[e.conditions.length-1];T.chainedConditions=T.chainedConditions||[],T.chainedConditions.push(h),T.operator=u}else _S(e,u),e.conditions.push(h)}_==="&"?(u="and",s=void 0):_==="|"?(u="or",s=void 0):_==="&="?(u="and",s=""):_==="|="&&(u="or",s="");break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Zf(d)),s=void 0;break;case"(":ju.lastIndex=bn;let f=Xf(d?[]:new zu,")");switch(d){case"":_S(e,u),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=w$(f);break;default:throw new SyntaxError(`unknown query function call ${d}`)}Ra[bn]===","?r.lastIndex=++bn:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!d)throw new SyntaxError("property sets must have a defined parent property name");ju.lastIndex=bn,E=Xf([],"}"),E.name=d,e.push(E),Ra[bn]===","?r.lastIndex=++bn:o=!0;break;case"[":ju.lastIndex=bn,d?(E=Xf(new zu,"]"),E.name=d):E=Xf(e.conditions?new zu:[],"]"),e.conditions?(_S(e,u),e.conditions.push(E),s=null):e.push(E),Ra[bn]===","?r.lastIndex=++bn:o=!0;break;case")":case"]":case"}":if(t===_[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&I$(h,d),_S(e,u),e.conditions.push(h)}else if(d)throw new SyntaxError("no attribute or comparison specified")}else(d||e.length>0&&c)&&e.push(Zf(d));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${_[0]}'`):new SyntaxError(`unexpected token '${_[0]}'`);default:throw new SyntaxError(`unexpected operator '${_}'`)}if(t!==")"&&(r=s?$de:ju,r.lastIndex=bn),bn===Ra.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function _S(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Zf(e){return e.indexOf(".")>-1?e.split(".").map(Zf):decodeURIComponent(e)}function N$(e){if(e==="null")return null;if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return r[0]==="$"?parseInt(r.slice(1),36):+r;if(t==="boolean")return r==="true";if(t==="date")return new Date(isNaN(r)?decodeURIComponent(r):+r);if(t==="string")return decodeURIComponent(r);throw new On.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function I$(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new On.ClientError("wildcard can only be used at the end of a string")}function w$(e){let t=C$(e[0]);return e.length>1&&(t.next=w$(e.slice(1))),t}function C$(e){if(Array.isArray(e)){let t=C$(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Ju(e){return Array.isArray(e)?e.join("\0"):e}function yo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Vde(e,t,r){return t*r/yo(e)}var On,bs,Li,Aa,Bde,Hde,xde,kde,fN,hN,qde,ju,$de,bn,Ra,zu,el,tE=Ie(()=>{On=L(_e()),bs=L(Ht()),Li=require("ordered-binary"),Aa=require("lmdb");Lf();Bde=.3,Hde=.1,xde=.05,kde={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},fN={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(EN,"executeConditions");a(Qu,"searchByIndex");a(Mi,"findAttribute");a(Fde,"joinTo");a(Gde,"joinFrom");hN={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(eE,"filterByType");a(fS,"estimateCondition");qde=/[()[\]|!<>.]|(=\w*=)/,ju=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,$de=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(ES,"parseQuery");a(Xf,"parseBlock");a(_S,"assignOperator");a(Zf,"decodeProperty");a(N$,"typedDecoding");a(I$,"wildcardDecoding");a(w$,"toSortObject");a(C$,"toSortEntry");zu=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Ju,"flattenKey");a(yo,"estimatedEntryCount");a(Vde,"intersectionEstimate");el=class{constructor(t){this.url=t}static{a(this,"SimpleURLQuery")}get(){}[Symbol.iterator](){return[][Symbol.iterator]()}}});function U$(e){let t={openapi:Kde,info:{title:"HarperDB HTTP REST interface",version:(0,M$.version)()},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},d=[];if(o)for(let{type:y,name:I,elements:U,relationship:H,definition:X}of o){if(H)y==="array"?u[I]={type:"array",items:{$ref:ba+U.type}}:u[I]={$ref:ba+y};else{let Y=X??U?.definition;if(Y){if(!t.components.schemas[Y.type]){let V={};Y.properties.forEach(ne=>{V[ne.name]=new TN(pN[ne.type],ne.type)}),t.components.schemas[Y.type]=new L$(V)}y==="array"?u[I]={type:"array",items:{$ref:ba+Y.type}}:u[I]={$ref:ba+Y.type}}else y==="array"?U.type==="Any"||U.type=="ID"?u[I]={type:"array",items:{format:U.type}}:u[I]={type:"array",items:new TN(pN[U.type],U.type)}:y==="Any"||y=="ID"?u[I]={format:y}:u[I]=new TN(pN[y],y)}d.push(new gN(I,"query",u[I]))}let _=Object.keys(u),E=new gN(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new gN("property","path",{enum:_});f.required=!0,t.components.schemas[i]=new L$(u);let h=l.post!==Resource.prototype.post||l.update,T=typeof l.put=="function",m=typeof l.get=="function",g=typeof l.delete=="function",S="/"+s+"/";h&&(t.paths[S]={},t.paths[S].post=new Yde(i,r,"create a new record auto-assigning a primary key")),m&&(t.paths[S]||(t.paths[S]={}),t.paths[S].get=new mN(d,r,{200:new SN({$ref:ba+i})},"search for records by the specified property name and value pairs")),g&&(t.paths[S]||(t.paths[S]={}),t.paths[S].delete=new P$(d,r,"delete all the records that match the provided query",{204:new D$})),S="/"+s+"/{"+c+"}",m&&(t.paths[S]={},t.paths[S].get=new mN([E],r,{200:new SN({$ref:ba+i})},"retrieve a record by its primary key")),T&&(t.paths[S]||(t.paths[S]={}),t.paths[S].put=new Wde([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),g&&(t.paths[S]||(t.paths[S]={}),t.paths[S].delete=new P$([E],r,"delete a record with the given primary key",{204:new D$})),m&&f.schema.enum.length>0&&(S="/"+s+"/{"+c+"}.{property}",t.paths[S]={},t.paths[S].get=new mN([E,f],r,{200:new SN({enum:_})},"used to retrieve the specified property of the specified record"))}return t}function Yde(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:ba+e}}}},this.security=t,this.responses={200:{description:AN,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function mN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function SN(e){this.description=AN,this.content={"application/json":{schema:e}}}function D$(){this.description="successfully processed request, no content returned to client"}function Wde(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:ba+r}}}},this.responses={200:{description:AN}}}function P$(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function L$(e){this.type="object",this.properties=e}function TN(e,t){this.type=e,this.format=t}function gN(e,t,r){this.name=e,this.in=t,this.schema=r}var M$,Kde,pN,ba,AN,v$=Ie(()=>{M$=L(Dc()),Kde="3.0.3",pN={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},ba="#/components/schemas/",AN="successful operation";a(U$,"generateJsonApi");a(Yde,"Post");a(mN,"Get");a(SN,"Response200");a(D$,"Response204");a(Wde,"Put");a(P$,"Delete");a(L$,"ResourceSchema");a(TN,"Type");a(gN,"Parameter")});var pS={};je(pS,{parseHeaderValue:()=>yN,start:()=>Qde});async function zde(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&ES(e);let i=new ho;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==B$){let m=hS.getMatch(o,n?"sse":"rest");if(!m)return t(e);e.handlerPath=m.path,c=new el(m.relativeURL),c.async=!0,l=m.Resource}if(l?.isCaching){let m=r["cache-control"];if(m){let g=yN(m);for(let S of g)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 m=yN(u).map(g=>(g.next?.name==="confirm"&&g.next.value>=0&&(e.replicatedConfirmation=+g.next.value),g.name));e.replicateTo=m.length===1&&+m[0]>=0?+m[0]:m[0]==="*"?void 0:m}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let _=await Dt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Ro(r["content-type"],!0)(e.body,e.headers)}catch(m){throw new Xu.ClientError(m,400)}if(e.authorize=!0,o===B$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return U$(hS);throw new Xu.ServerError("Forbidden",403)}switch(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 Xu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Xu.ServerError(`Method ${s} is not recognized`,501)}}),E=200,f;if(_==null)E=s==="GET"||s==="HEAD"?404:204,RN.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(_.status>0&&_.headers){let m=Zb(_.headers,i);return _.headers!==m&&(_.headers=m),_.data!==void 0&&(_.body=Qf(_.data,e,_)),_}else if(f=e.lastModified){jde[0]=f;let m=String.fromCharCode(34,(vr[0]&63)+62,(vr[0]>>6)+(vr[1]<<2&63)+62,(vr[1]>>4)+(vr[2]<<4&63)+62,(vr[2]>>2)+62,(vr[3]&63)+62,(vr[3]>>6)+(vr[4]<<2&63)+62,(vr[4]>>4)+(vr[5]<<4&63)+62,(vr[5]>>2)+62,(vr[6]&63)+62,(vr[6]>>6)+(vr[7]<<2&63)+62,34),g=r["if-none-match"];g&&m==g?(_?.onDone&&_.onDone(),E=304,_=void 0):i.setIfNone("ETag",m),RN.lastModified&&i.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(E=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:E,headers:i,body:void 0},T=_?.wasLoadedFromSource?.();return T!==void 0&&(h.wasCacheMiss=T,!T&&f&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),_!==void 0&&(h.body=Qf(_,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?Ui.warn(o):Ui.info(o):Ui.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=Qf(o.contentType?o:o.toString(),e,c),c}}function Qde(e){RN=e,!H$&&(H$=!0,hS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return zde(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{rE++;let s=new Pn;x$||(x$=!0,V_(l=>{rE>0&&l.push({metric:"ws-connections",connections:rE,byThread:!0})}));let i;t.on("error",l=>{i=!0,Ui.warn(l)});let o;t.on("message",a(function(u){o||(o=Ro(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);s.push(d)},"message"));let c;t.on("close",()=>{rE--,qn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=hS.getMatch(l,"ws");if(qn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,mr(h=>({count:h.count,total:rE}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new el(u.relativeURL),_=u.Resource;c=(await Dt(r,()=>_.connect(d,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=qc(f.value,r);t.send(h),mr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?Ui.warn(l):Ui.info(l):Ui.error(l),t.close(Jde[l.statusCode]||1011,l.toString())}t.close()},e))}function yN(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 Ui,Xu,vr,jde,RN,B$,H$,hS,x$,rE,Jde,k$=Ie(()=>{$c();Ii();Ui=L(j()),Xu=L(_e());tE();Cl();pc();yf();v$();tE();vr=new Uint8Array(8),jde=new Float64Array(vr.buffer,0,1),RN={},B$="openapi";a(zde,"http");rE=0;a(Qde,"start");Jde={401:3e3,403:3003};a(yN,"parseHeaderValue")});var bN=N((KDe,G$)=>{var{recordAction:mS,recordActionBinary:F$}=(Ii(),oe(K_)),Xde=require("fastify-plugin"),Zde=200;G$.exports=Xde(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,_;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",_=l.method),mS(o,"duration",u,_,d),F$(s.raw.statusCode<400,"success",u,_,d),F$(1,"response_"+s.raw.statusCode,u,_,d);let E=Zde;i?.pipe?(i.on("data",m=>{E+=m.length}),i.on("end",()=>{mS(performance.now()-c,"transfer",u,_,d),mS(E,"bytes-sent",u,_,d)})):(E+=i?.length||0,mS(E,"bytes-sent",u,_,d));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),T=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${T}`:T)}),r()},{name:"hdb-request-time"})});var TS=N((YDe,V$)=>{"use strict";var ON=M(),e_e=re(),nE=j(),{handleHDBError:NN,hdb_errors:SS}=_e(),{isMainThread:t_e}=require("worker_threads"),{Readable:r_e}=require("stream"),q$=require("os"),n_e=require("util"),s_e=Ky(),i_e=n_e.promisify(s_e.authorize),$$=xO(),{createGzip:o_e,constants:a_e}=require("zlib");function c_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${q$.EOL}Stack: ${e.stack} ${q$.EOL}Terminating ${t_e?"HDB":"thread"}.`;console.error(t),nE.fatal(t),process.exit(1)}a(c_e,"handleServerUncaughtException");function l_e(e,t,r){if(nE[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let n=e.statusCode?e.statusCode:SS.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(l_e,"serverErrorHandler");function u_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=NN(new Error,"Invalid JSON.",SS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(e_e.isEmpty(e.body.operation)){let n=NN(new Error,"Request body must include an 'operation' property.",SS.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(u_e,"reqBodyValidationHandler");function d_e(e,t,r){let n;e.body.operation!==ON.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==ON.OPERATIONS_ENUM.LOGIN&&e.body.operation!==ON.OPERATIONS_ENUM.LOGOUT?i_e(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{nE.warn(s),nE.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(NN(s,i,SS.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(d_e,"authHandler");async function __e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=$$.chooseOperation(e.body);let s=await $$.processLocalTransaction(e,n);if(s instanceof r_e&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(o_e({level:a_e.Z_BEST_SPEED})))}return s}catch(s){throw nE.error(s),s}}a(__e,"handlePostRequest");V$.exports={authHandler:d_e,handlePostRequest:__e,handleServerUncaughtException:c_e,serverErrorHandler:l_e,reqBodyValidationHandler:u_e}});var j$=N((jDe,W$)=>{"use strict";var f_e=require("fastify-plugin"),{handlePostRequest:K$,authHandler:E_e,reqBodyValidationHandler:h_e}=TS();async function p_e(e){e.decorate("hdbCore",{preValidation:[h_e,E_e],request:a(t=>Y$(K$(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>Y$(K$(t,r,!0)),"requestWithoutAuthentication")})}a(p_e,"hdbCore");async function Y$(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(Y$,"convertAsyncIterators");W$.exports=f_e(p_e)});var Q$=N((JDe,z$)=>{"use strict";var QDe=require("fs"),gS=se();gS.initSync();var{CONFIG_PARAMS:IN}=M(),m_e=1024*1024*1024;function S_e(e){let t=gS.get(IN.HTTP_TIMEOUT),r=gS.get(IN.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:m_e,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:gS.get(IN.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(S_e,"getServerOptions");z$.exports=S_e});var Z$=N((ZDe,X$)=>{"use strict";var wN=se();wN.initSync();var{CONFIG_PARAMS:J$}=M();function T_e(){let e=wN.get(J$.HTTP_CORSACCESSLIST),t=wN.get(J$.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(T_e,"getCORSOptions");X$.exports=T_e});var rV=N((tPe,tV)=>{"use strict";var eV=se();eV.initSync();var g_e=M();function A_e(){return eV.get(g_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(A_e,"getHeaderTimeoutConfig");tV.exports=A_e});var DN={};je(DN,{customFunctionsServer:()=>b_e,ready:()=>mV,start:()=>y_e});function y_e(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){bo||(bo=pV(t),it.http((await bo).server));let o=await bo,c=(0,CN.dirname)(s),l=(0,CN.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!nV.has(c)){nV.add(c);try{o.register(N_e(c,l))}catch(u){if(u.message==="Root plugin has already booted")mt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:mV}}async function b_e(){try{mt.info("In Custom Functions Fastify server"+process.cwd()),mt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),mt.debug(`Custom Functions server process ${process.pid} starting up.`),await O_e();let e=lV.get(uV.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=bo=await pV(e)}catch(r){throw mt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw mt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){mt.error(`Custom Functions ${process.pid} Error: ${e}`),mt.error(e),process.exit(1)}}async function O_e(){try{mt.info("Custom Functions starting configuration."),await dV.setUsersToGlobal(),mt.info("Custom Functions completed configuration.")}catch(e){mt.error(e)}}function N_e(e,t){return async function(r){try{mt.info("Custom Functions starting buildRoutes"),mt.trace("Loading fastify routes folder "+e),(0,sV.existsSync)(e)&&r.register(cV.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:mt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?mt.error(s.message):s&&mt.error(s),o()})}catch(n){mt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function pV(e){mt.info("Custom Functions starting buildServer.");let t=(0,_V.default)(e),r=(0,iV.default)(t);r.server.headersTimeout=(0,EV.default)(),r.setErrorHandler(hV.serverErrorHandler);let n=(0,fV.default)();return n&&r.register(oV.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(aV.default),await r.register(R_e),await r.after(),sN(r),mt.info("Custom Functions completed buildServer."),r}function mV(){if(bo)return bo.then?bo.then(e=>e.ready()):bo.ready()}var CN,sV,iV,oV,aV,cV,lV,uV,mt,R_e,dV,_V,fV,EV,hV,bo,nV,SV=Ie(()=>{CN=require("path"),sV=require("fs"),iV=L(require("fastify")),oV=L(require("@fastify/cors")),aV=L(bN()),cV=L(require("@fastify/autoload")),lV=L(se()),uV=L(M()),mt=L(j()),R_e=L(j$()),dV=L(xn()),_V=L(Q$()),fV=L(Z$()),EV=L(rV()),hV=L(TS());$c();qr();nV=new Set;a(y_e,"start");a(b_e,"customFunctionsServer");a(O_e,"setUp");a(N_e,"buildRouteFolder");a(pV,"buildServer");a(mV,"ready")});var PN={};je(PN,{start:()=>I_e});function I_e(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,yV.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){gV||(gV=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=TV.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,AV.default)(s,(0,RV.realpathSync)(o))}}return i(s)},{runFirst:!0})),TV.set(r,n)}}}var AV,RV,yV,TV,gV,bV=Ie(()=>{AV=L(require("send")),RV=require("fs"),yV=L(require("serve-static")),TV=new Map;a(I_e,"start")});var vN={};je(vN,{Request:()=>LN,createReuseportFd:()=>AS});var OV,LN,MN,UN,AS,RS=Ie(()=>{OV=require("os"),LN=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new UN(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._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new MN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},MN=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)}},UN=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(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,OV.platform)()!="win32"&&(AS=require("node-unix-socket").createReuseportFd)});var HN=N((cPe,NV)=>{"use strict";var sE=se();sE.initSync();var Zu=require("fs-extra"),BN=require("path"),ed=M(),w_e=require("crypto"),C_e=require("uuid").v4;NV.exports=D_e;function D_e(){if(sE.getHdbBasePath()!==void 0){let e=BN.join(sE.getHdbBasePath(),ed.LICENSE_KEY_DIR_NAME,ed.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=BN.join(sE.getHdbBasePath(),ed.LICENSE_KEY_DIR_NAME,ed.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=BN.join(sE.getHdbBasePath(),ed.LICENSE_KEY_DIR_NAME,ed.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Zu.accessSync(r),Zu.accessSync(e),Zu.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=C_e(),i=w_e.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});Zu.writeFileSync(r,s),Zu.writeFileSync(e,i.privateKey),Zu.writeFileSync(t,i.publicKey)}else throw n}}}a(D_e,"checkJWTTokenExist")});var wV=N((uPe,IV)=>{"use strict";var xN=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};IV.exports={HdbInfoInsertObject:xN}});var PV=N((_Pe,DV)=>{"use strict";var CV=M(),kN=class{static{a(this,"UpgradeObject")}constructor(t,r){this[CV.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[CV.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};DV.exports={UpgradeObject:kN}});var yS=N((EPe,MV)=>{"use strict";var Ns=require("prompt"),td=require("chalk"),LV=j(),si=require("os"),FN=Wa(),GN=["yes","y"];async function P_e(e){let t=`${si.EOL}`+td.bold.green("Your current HarperDB version requires that we complete an update process.")+`${si.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${si.EOL}${si.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${si.EOL}`;Ns.override=FN(["CONFIRM_UPGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_UPGRADE:{description:td.magenta(`${si.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await Ns.get([r])}catch(s){return LV.error("There was an error when prompting user about an upgrade."),LV.error(s),!1}return GN.includes(n.CONFIRM_UPGRADE)}a(P_e,"forceUpdatePrompt");async function L_e(e){let t=`${si.EOL}`+td.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${si.EOL}`);Ns.override=FN(["CONFIRM_DOWNGRADE"]),Ns.start(),Ns.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:td.magenta(`${si.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await Ns.get([r]);return GN.includes(n.CONFIRM_DOWNGRADE)}a(L_e,"forceDowngradePrompt");async function M_e(){let e=`${si.EOL}`+td.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");Ns.override=FN(["GENERATE_CERTS"]),Ns.start(),Ns.message=e;let t={properties:{GENERATE_CERTS:{description:td.magenta(`${si.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await Ns.get([t]);return GN.includes(r.GENERATE_CERTS)}a(M_e,"upgradeCertsPrompt");MV.exports={forceUpdatePrompt:P_e,forceDowngradePrompt:L_e,upgradeCertsPrompt:M_e}});var $N=N((pPe,UV)=>{"use strict";var qN=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};UV.exports=qN});var BV=N((RPe,vV)=>{"use strict";var U_e=re(),v_e=Ct(),SPe=j(),TPe=require("path"),gPe=require("fs"),APe=M();vV.exports={getOldPropsValue:B_e};function B_e(e,t,r=!1){let n=t.getRaw(e);return U_e.isNotEmptyAndHasValue(n)?n:r?v_e.getDefaultConfig(e):""}a(B_e,"getOldPropsValue")});var FV=N((bPe,kV)=>{"use strict";var Oa=require("path"),Na=require("fs-extra"),H_e=require("properties-reader"),x_e=$N(),lr=j(),{getOldPropsValue:St}=BV(),{HDB_SETTINGS_NAMES:he,CONFIG_PARAMS:tl}=M(),rl=Ct(),bS=se(),HV=re(),vi=M(),VN=new x_e("3.1.0"),xV=[];function k_e(){let e=H_e(bS.get(he.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),lr.info(t);let r=` ;Settings for the HarperDB process.
39
39
 
40
40
  ;The directory selected during install where the database files reside.
41
41
  ${he.HDB_ROOT_KEY} = ${St(he.HDB_ROOT_KEY,e)}
@@ -104,11 +104,11 @@ ${he.CUSTOM_FUNCTIONS_PORT_KEY} = ${rl.getDefaultConfig(tl.HTTP_PORT)}
104
104
  ${he.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Oa.join(St(he.HDB_ROOT_KEY,e),"custom_functions")}
105
105
  ;Set the max number of processes HarperDB will start for the Custom Functions server
106
106
  ${he.MAX_CUSTOM_FUNCTION_PROCESSES} = ${rl.getDefaultConfig(tl.HTTP_THREADS)}
107
- `,n=bS.get("settings_path"),s=Oa.dirname(n),i=Oa.join(s,"3_1_0_upgrade_settings.bak");try{lr.info(`Backing up old settings file to: ${i}`),Na.copySync(n,i)}catch(c){throw lr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{lr.info("New settings file values for 3.1.0 upgrade:",r),lr.info(`Creating new/upgraded settings file at '${n}'`),Na.writeFileSync(n,r),lr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),lr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),lr.error(c),Na.copySync(i,n),c}bS.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),lr.info(o),o}a(k_e,"updateSettingsFile_3_1_0");function F_e(){let e=Oa.join(HV.getHomeDir(),vi.HDB_HOME_DIR_NAME,vi.LICENSE_KEY_DIR_NAME,vi.LICENSE_FILE_NAME),t=Oa.join(HV.getHomeDir(),vi.HDB_HOME_DIR_NAME,vi.LICENSE_KEY_DIR_NAME,vi.REG_KEY_FILE_NAME),r=Oa.join(bS.getHdbBasePath(),vi.LICENSE_KEY_DIR_NAME,vi.LICENSE_FILE_NAME),n=Oa.join(r,vi.LICENSE_FILE_NAME),s=Oa.join(r,vi.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),lr.info(i);let o="Creating .license directory";console.log(o),lr.info(o),Na.mkdirpSync(r);try{Na.accessSync(e);try{let c="Moving licence file";console.log(c),lr.info(c),Na.moveSync(e,n);let l="License file successfully moved.";console.log(l),lr.info(l)}catch{let l="moving license file failed";console.error(l),lr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),lr.warn(l)}try{Na.accessSync(t);try{let c="Moving registration file";console.log(c),lr.info(c),Na.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),lr.info(l)}catch{let l="moving registration file failed";console.error(l),lr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),lr.warn(l)}}a(F_e,"moveLicenseFiles");VN.sync_functions.push(k_e);VN.sync_functions.push(F_e);xV.push(VN);kV.exports=xV});var KV=N((NPe,VV)=>{"use strict";var zn=ht(),{insertRecords:G_e}=ec(),q_e=sn(),Ia=Ht(),$_e=re(),Oo=j(),V_e=re(),Bi=require("fs-extra"),No=require("path"),K_e=require("cli-progress"),iE=require("assert"),Y_e=require("pino"),W_e=se();VV.exports=j_e;var OS,GV,NS,KN,en,oE=!1;async function j_e(e=!0){return OS=W_e.getHdbBasePath(),GV=No.join(OS,"schema"),NS=No.join(OS,"4_0_0_upgrade_tmp"),KN=No.join(OS,"transactions"),console.info("Reindexing upgrade started for schemas"),Oo.notify("Reindexing upgrade started for schemas"),await qV(GV,!1,e),await Bi.pathExists(KN)&&(console.info(`
107
+ `,n=bS.get("settings_path"),s=Oa.dirname(n),i=Oa.join(s,"3_1_0_upgrade_settings.bak");try{lr.info(`Backing up old settings file to: ${i}`),Na.copySync(n,i)}catch(c){throw lr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{lr.info("New settings file values for 3.1.0 upgrade:",r),lr.info(`Creating new/upgraded settings file at '${n}'`),Na.writeFileSync(n,r),lr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),lr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),lr.error(c),Na.copySync(i,n),c}bS.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),lr.info(o),o}a(k_e,"updateSettingsFile_3_1_0");function F_e(){let e=Oa.join(HV.getHomeDir(),vi.HDB_HOME_DIR_NAME,vi.LICENSE_KEY_DIR_NAME,vi.LICENSE_FILE_NAME),t=Oa.join(HV.getHomeDir(),vi.HDB_HOME_DIR_NAME,vi.LICENSE_KEY_DIR_NAME,vi.REG_KEY_FILE_NAME),r=Oa.join(bS.getHdbBasePath(),vi.LICENSE_KEY_DIR_NAME,vi.LICENSE_FILE_NAME),n=Oa.join(r,vi.LICENSE_FILE_NAME),s=Oa.join(r,vi.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),lr.info(i);let o="Creating .license directory";console.log(o),lr.info(o),Na.mkdirpSync(r);try{Na.accessSync(e);try{let c="Moving licence file";console.log(c),lr.info(c),Na.moveSync(e,n);let l="License file successfully moved.";console.log(l),lr.info(l)}catch{let l="moving license file failed";console.error(l),lr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),lr.warn(l)}try{Na.accessSync(t);try{let c="Moving registration file";console.log(c),lr.info(c),Na.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),lr.info(l)}catch{let l="moving registration file failed";console.error(l),lr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),lr.warn(l)}}a(F_e,"moveLicenseFiles");VN.sync_functions.push(k_e);VN.sync_functions.push(F_e);xV.push(VN);kV.exports=xV});var KV=N((NPe,VV)=>{"use strict";var Qn=ht(),{insertRecords:G_e}=ec(),q_e=sn(),Ia=Ht(),$_e=re(),Oo=j(),V_e=re(),Bi=require("fs-extra"),No=require("path"),K_e=require("cli-progress"),iE=require("assert"),Y_e=require("pino"),W_e=se();VV.exports=j_e;var OS,GV,NS,KN,en,oE=!1;async function j_e(e=!0){return OS=W_e.getHdbBasePath(),GV=No.join(OS,"schema"),NS=No.join(OS,"4_0_0_upgrade_tmp"),KN=No.join(OS,"transactions"),console.info("Reindexing upgrade started for schemas"),Oo.notify("Reindexing upgrade started for schemas"),await qV(GV,!1,e),await Bi.pathExists(KN)&&(console.info(`
108
108
 
109
- Reindexing upgrade started for transaction logs`),Oo.notify("Reindexing upgrade started for transaction logs"),await qV(KN,!0,e)),Oo.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(oE?", but errors occurred":"")}a(j_e,"reindexUpgrade");async function qV(e,t,r){let n=await Bi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=No.join(e,o.toString());if(o===".DS_Store")continue;let l=await Bi.readdir(c),u=l.length;for(let d=0;d<u;d++){let _=l[d];if(_!==".DS_Store"&&Bi.statSync(No.join(c,_)).isDirectory())try{await z_e(o,_,t),en.info(`Reindexing started for ${o}.${_}`),Oo.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${_}`),await J_e(o,_,c,t,r),en.info(`Reindexing completed for ${o}.${_}`),Oo.notify(`Reindexing completed for ${o}.${_}`)}catch(E){oE=!0,E.schema_path=c,E.table_name=_,Oo.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Oo.error(E),en.error(E),console.error(E)}}}if(!oE)try{await Bi.rm(NS,{recursive:!0})}catch{}}a(qV,"processTables");async function z_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=No.join(NS,s);await Bi.ensureDir(NS),await Bi.writeFile(i,""),en=Y_e({level:"debug",formatters:{bindings(){}}},i)}a(z_e,"initPinoLogger");var Q_e=20;async function J_e(e,t,r,n,s){let i;try{i=await zn.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){Oo.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),en.error(S);return}throw S}let o=efe(i.dbis),c=zn.openDBI(i,o),l=Object.keys(i.dbis),u=zn.statDBI(i,o);en.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new K_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let _=await zn.createEnvironment(r,t,!1);zn.createDBI(_,o,!1,!0);let E=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},E.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),E.length>Q_e&&await f();await f()}catch(S){throw oE=!0,en.error(S),S}async function f(){let S,y=E.map(({value:U})=>U);n?S=await Promise.all(y.map(U=>X_e(_,U))):S=await G_e(_,o,l.filter(U=>U!=="__blob__"),y,!1);for(let U=0,H=E.length;U<H;U++){let{key:X,value:Y}=E[U];en.info(`Record hash value: ${X} hash: ${o}`);let V;n?V=S[U]:V=S.written_hashes.indexOf(X)>-1,iE(V,!0),Z_e(_,o,Y[o],n),en.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}E=[],d.value/d.total*100%10===0&&Oo.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),en.info(`${d.value}/${d.total} records inserted`)}a(f,"finishOutstanding"),d.stop();let h=zn.statDBI(i,o),T=zn.statDBI(_,o);if(en.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${T.entryCount}`),iE.deepStrictEqual(h.entryCount,T.entryCount),await zn.closeEnvironment(i),await zn.closeEnvironment(_),delete global.lmdb_map[`${e}.${t}`],s){let S=No.join(r,t),y=No.join(S,"data.mdb"),I=No.join(S,"lock.mdb");await Bi.unlink(y),await Bi.unlink(I),await Bi.rmdir(S),en.info(`Deleted old environment files from schema folder: ${y}, ${I}`)}let m=await zn.openEnvironment(r,t),g=zn.statDBI(m,o);en.info(`New stats: ${JSON.stringify(T)}. New stats after move: ${JSON.stringify(g)}`),iE.deepStrictEqual(g.entryCount,T.entryCount),await zn.closeEnvironment(m),delete global.lmdb_map[`${e}.${t}`]}a(J_e,"processTable");async function X_e(e,t){zn.initializeDBIs(e,Ia.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ia.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ia.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ia.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),V_e.isEmpty(t.user_name)||e.dbis[Ia.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ia.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(X_e,"insertTransaction");function Z_e(e,t,r,n){let i=e.dbis[t].get(r);iE.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ia.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ia.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!$_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let _=l[u];$V(e,c,_,r)}else $V(e,c,l,r)}a(Z_e,"validateIndices");function $V(e,t,r,n){try{let s=!1,i=q_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||en.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),iE.deepStrictEqual(s,!0)}catch(s){oE=!0,en.error(s),console.error(s)}}a($V,"validateIndex");function efe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(efe,"getHashDBI")});var QV=N((CPe,zV)=>{"use strict";var IS=require("path"),wa=require("fs-extra"),tfe=$N(),nl=j(),YV=Ct(),YN=se(),ii=M(),wS=re(),rfe=require("properties-reader"),nfe=$s(),sfe=gp(),ife=$r(),wPe=require("util"),ofe=ife.searchByValue,afe=cn(),cfe=am(),lfe=It(),ufe=KV(),WV=Js(),dfe=yS(),lE=new tfe("4.0.0"),jV=[],aE,cE;async function _fe(){try{if(await dfe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),aE){let t=wS.changeExtension(aE,".bak");await wa.move(aE,t)}if(cE){let t=wS.changeExtension(cE,".bak");await wa.move(cE,t)}await WV.generateKeys()}else console.log("Using existing certificates."),WV.updateConfigCert(aE,cE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(_fe,"generateNewKeys");async function ffe(){console.log("Updating HarperDB nodes."),nl.info("Updating HarperDB nodes.");let e=[];try{let t=new nfe(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await ofe(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!lfe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,_=c.subscriptions.length;d<_;d++){let E=c.subscriptions[d],f=E.channel.split(":");u.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:ii.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(wS.isEmptyOrZeroLength(n))return;let s=new sfe(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await afe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{cfe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(ffe,"updateNodes");async function Efe(){let e=YN.get(ii.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(IS.join("config","settings.js"))){nl.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),nl.info(t);let r=IS.dirname(e),n=YN.get(ii.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=IS.join(n,"backup","4_0_0_upgrade_settings.bak"),i=IS.join(n,ii.HDB_CONFIG_FILE);try{nl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),wa.copySync(e,s)}catch(_){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),_}try{nl.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),nl.info("Updating env variables with new settings values");let _=YV.initOldConfig(e);aE=_[ii.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],cE=_[ii.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],YV.createConfigFile(_)}catch(_){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),_}let o=wS.getPropsFilePath();wa.accessSync(o,wa.constants.F_OK|wa.constants.R_OK);let l=rfe(o).get(ii.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
110
- install_user = ${l}`;try{wa.writeFileSync(o,u)}catch(_){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),_}try{YN.initSync(!0)}catch(_){throw console.error("Unable to initialize new properties. Please check the log for details."),_}let d="New settings file for 4.0.0 upgrade successfully created.";try{wa.removeSync(r),console.log(d),nl.info(d)}catch(_){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),_}}a(Efe,"updateSettingsFile_4_0_0");lE.async_functions.push(Efe);lE.async_functions.push(_fe);lE.async_functions.push(ufe);lE.async_functions.push(ffe);jV.push(lE);zV.exports=jV});var WN=N((PPe,e1)=>{"use strict";var sl=re(),hfe=M(),JV=j(),{DATA_VERSION:pfe,UPGRADE_VERSION:mfe}=hfe.UPGRADE_JSON_FIELD_NAMES_ENUM,XV=FV(),CS=QV(),il=new Map;XV&&XV.forEach(e=>{il.set(e.version,e)});CS&&CS.forEach(e=>{il.set(e.version,e)});CS&&CS.forEach(e=>{il.set(e.version,e)});function Sfe(){return[...il.keys()].sort(sl.compareVersions)}a(Sfe,"getSortedVersions");function ZV(e){let t=e[pfe],r=e[mfe];return sl.isEmptyOrZeroLength(t)||sl.isEmptyOrZeroLength(r)?(JV.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),JV.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...il.keys()].sort(sl.compareVersions).filter(function(n){return sl.compareVersions(n,t)>0&&sl.compareVersions(n,r)<=0})}a(ZV,"getVersionsForUpgrade");function Tfe(e){return ZV(e).length>0}a(Tfe,"hasUpgradesRequired");function gfe(e){return sl.isEmptyOrZeroLength(e)?null:il.has(e)?il.get(e):null}a(gfe,"getDirectiveByVersion");e1.exports={getSortedVersions:Sfe,getDirectiveByVersion:gfe,getVersionsForUpgrade:ZV,hasUpgradesRequired:Tfe}});var PS=N((MPe,i1)=>{"use strict";var Afe=require("util"),jN=require("chalk"),Rfe=require("os"),r1=cn(),yfe=$r(),Qn=M(),n1=wV(),QN=TA(),{UpgradeObject:t1}=PV(),{forceDowngradePrompt:bfe}=yS(),Ofe=Dc(),DS=j(),sd=re(),JN=Fs(),Nfe=(De(),oe(lt)),Ife=WN(),wfe=Afe.promisify(JN.setSchemaDataToGlobal),Cfe=yfe.searchByValue,Dfe="info_id",Pfe="2.9.9",Lfe="3.0.0";async function Mfe(e){let t=new n1.HdbInfoInsertObject(1,e,e),r=new QN.InsertObject(Qn.OPERATIONS_ENUM.INSERT,Qn.SYSTEM_SCHEMA_NAME,Qn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Qn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return JN.setSchemaDataToGlobal(),r1.insert(r)}a(Mfe,"insertHdbInstallInfo");async function zN(e){let t,r=await s1(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new n1.HdbInfoInsertObject(i,e,e);let o=new QN.InsertObject(Qn.OPERATIONS_ENUM.INSERT,Qn.SYSTEM_SCHEMA_NAME,Qn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Qn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await wfe(),r1.insert(o)}a(zN,"insertHdbUpgradeInfo");async function s1(){let e=new QN.NoSQLSeachObject(Qn.SYSTEM_SCHEMA_NAME,Qn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Dfe,Qn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Cfe(e))}catch(r){console.error(r)}return t}a(s1,"getAllHdbInfoRecords");async function Ufe(){let e=await s1();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(Ufe,"getLatestHdbInfoRecord");async function vfe(){DS.info("Checking if HDB software has been updated");try{let e=Ofe.version(),t=await Ufe(),r;if(sd.isEmpty(t))r=Pfe;else if(r=t.data_version_num,sd.compareVersions(r.toString(),e.toString())>0){if(!sd.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(jN.yellow(`This instance's data was last run on version ${r}`)),console.error(jN.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Rfe.EOL}${Qn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");sd.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(jN.yellow(`This instance's data was last run on version ${r}`)),await bfe(new t1(r,e))?await zN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(JN.setSchemaDataToGlobal(),Bfe(r),e.toString()===r.toString())return;let n=new t1(r,e);if(Ife.hasUpgradesRequired(n))return n;sd.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await zN(n.upgrade_version),DS.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw DS.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),DS.fatal(e),e}}a(vfe,"getVersionUpdateInfo");function Bfe(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Qn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Nfe.databases.system))throw console.log(t),new Error(t);if(!sd.isEmpty(e)&&e<Lfe)throw console.log(t),new Error(t)}a(Bfe,"checkIfInstallIsSupported");i1.exports={insertHdbInstallInfo:Mfe,insertHdbUpgradeInfo:zN,getVersionUpdateInfo:vfe}});var l1=N((vPe,c1)=>{"use strict";var LS=require("joi"),{boolean:Hfe,string:XN,number:xfe}=LS.types(),o1=require("fs-extra"),uE=M(),a1=require("path"),kfe=gt();c1.exports=Ffe;function Ffe(e){let t=XN.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=LS.object({[uE.INSTALL_PROMPTS.ROOTPATH]:LS.custom(Gfe),[uE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:LS.alternatives([xfe.min(0),XN]).allow("null",null),[uE.INSTALL_PROMPTS.TC_AGREEMENT]:XN.valid("yes","YES","Yes"),[uE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[uE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Hfe});return kfe.validateBySchema(e,r)}a(Ffe,"installValidator");function Gfe(e,t){if(o1.existsSync(a1.join(e,"system/hdb_user/data.mdb"))||o1.existsSync(a1.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Gfe,"validateRootAvailable")});var d1=N((HPe,u1)=>{"use strict";var{mkdirpSync:qfe,copySync:$fe}=require("fs-extra"),Ca=require("path"),id=M(),eI=j(),Vfe=Un(),ZN=Qi(),Kfe=Tt();u1.exports=Yfe;async function Yfe(e){eI.trace("Mounting HarperDB"),ol(e),ol(Ca.join(e,"backup")),ol(Ca.join(e,"keys")),ol(Ca.join(e,"keys",id.LICENSE_FILE_NAME)),ol(Ca.join(e,"log")),ol(Ca.join(e,"database")),ol(Ca.join(e,"components")),$fe(Ca.resolve(id.PACKAGE_ROOT,"./utility/install/README.md"),Ca.join(e,"README.md")),await Wfe()}a(Yfe,"mountHdb");async function Wfe(){let e=O_(),t=Object.keys(ZN);for(let r=0;r<t.length;r++){let n=t[r],s=ZN[n].hash_attribute;try{Kfe.initSystemSchemaPaths(id.SYSTEM_SCHEMA_NAME,n);let i=new e(id.SYSTEM_SCHEMA_NAME,n,s);i.attributes=ZN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await Vfe.createTable(n,i)}catch(i){throw eI.error(`issue creating environment for ${id.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Wfe,"createLMDBTables");function ol(e){qfe(e,{mode:id.HDB_FILE_PERMISSIONS}),eI.info(`Directory ${e} created`)}a(ol,"makeDirectory")});var O1=N((GPe,b1)=>{"use strict";var rI=require("os"),p1=require("inquirer"),ws=require("fs-extra"),jfe=require("properties-reader"),cl=require("chalk"),xi=require("path"),zfe=require("human-readable-ids").hri,Qfe=require("ora"),Jfe=require("yaml"),ur=j(),Da=se(),dE=re(),US=Wa(),m1=PS(),S1=Dc(),ue=M(),{CONFIG_PARAM_MAP:kPe,CONFIG_PARAMS:Mt}=ue,Xfe=l1(),Zfe=d1(),nI=Ct(),eEe=xn(),tEe=Z_(),rEe=HN(),nEe=Fs(),sEe=require("util").promisify,iEe=sEe(nEe.setSchemaDataToGlobal),_1=Js(),al=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Hr=a(e=>cl.magenta.bold(e),"HDB_PROMPT_MSG"),oEe="https://harperdb.io/legal/end-user-license-agreement",Pa=rI.EOL,Io="",aEe="yes",f1="Starting HarperDB install...",E1="HarperDB installation was successful.",h1="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",cEe="An out of date version of HarperDB is already installed.",tI="It appears that HarperDB is already installed. Exiting install...",lEe="Aborting install",FPe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),uEe=new RegExp(/^[^\s.,*>]+$/),dEe=rI.homedir(),_Ee=xi.join(dEe,ue.HDB_ROOT_DIR_NAME),fEe="HDB_ADMIN",EEe="CLUSTER_USER",hEe="dev",pEe="localhost",MS={[Mt.HTTP_CORS]:!0,[Mt.HTTP_CORSACCESSLIST]:["*"],[Mt.HTTP_PORT]:9926,[Mt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Mt.THREADS_COUNT]:1,[Mt.THREADS_DEBUG]:!0,[Mt.LOGGING_STDSTREAMS]:!0,[Mt.LOGGING_LEVEL]:"info",[Mt.OPERATIONSAPI_NETWORK_PORT]:9925,[Mt.LOCALSTUDIO_ENABLED]:!0},Br={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},La=US([ue.INSTALL_PROMPTS.HDB_CONFIG]),Hi,T1=!1,sI=!1,g1=!1;b1.exports={install:A1,updateConfigEnv:IEe,setIgnoreExisting:wEe};A1.createSuperUser=y1;async function A1(){console.log(Hr(Pa+f1+Pa)),ur.notify(f1);let e;La[ue.INSTALL_PROMPTS.HDB_CONFIG]&&(e=mEe());let t=TEe();Object.assign(t,e),t[ue.INSTALL_PROMPTS.TC_AGREEMENT]&&t[ue.INSTALL_PROMPTS.ROOTPATH]&&t[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[ue.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(g1=!0,t[ue.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Xfe(t);if(r)throw r.message;await gEe(),await AEe(t);let n=await SEe(t);Hi=n[ue.INSTALL_PROMPTS.ROOTPATH],La[ue.INSTALL_PROMPTS.HDB_CONFIG]&&xi.dirname(La[ue.INSTALL_PROMPTS.HDB_CONFIG])===Hi&&(T1=!0),!sI&&!La[ue.INSTALL_PROMPTS.HDB_CONFIG]&&await ws.pathExists(xi.join(Hi,ue.HDB_CONFIG_FILE))&&(console.error(tI),process.exit());let s=Qfe({prefixText:Hr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),dE.isEmpty(Hi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Da.setHdbBasePath(Hi),await Zfe(Hi),await REe(),await yEe(n),ur.initLogSettings(!0),await y1(n),await OEe(n),await _1.updateConfigCert(),await _1.generateCertsKeys(),await NEe(),rEe(),s.stop(),console.log(Hr(Pa+E1+Pa)),ur.notify(E1)}a(A1,"install");function mEe(){let e=Jfe.parseDocument(ws.readFileSync(La[ue.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=nI.flattenConfig(e.toJSON());return t[ue.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ue.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(mEe,"getConfigFromFile");async function SEe(e){ur.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.ROOTPATH],Br.DESTINATION),name:ue.INSTALL_PROMPTS.ROOTPATH,prefix:Io,default:_Ee,validate:a(async s=>Is(s)?Is(s):await ws.pathExists(xi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Hr(Br.DESTINATION)},{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Br.HDB_USERNAME),name:ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Io,default:fEe,validate:a(s=>Is(s)?Is(s):(t=s,!0),"validate"),message:Hr(Br.HDB_USERNAME)},{type:"password",when:wo(e[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Br.HDB_PASS),name:ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Io,validate:a(s=>Is(s)?Is(s):!0,"validate"),message:Hr(Br.HDB_PASS)},{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.DEFAULTS_MODE],Br.DEFAULTS_MODE),name:ue.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Io,default:hEe,validate:a(s=>Is(s)?Is(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Hr(Br.DEFAULTS_MODE)}];if(g1||r.push({type:"input",name:ue.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:al,when:wo(e[ue.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Br.REPLICATION_HOSTNAME),prefix:Io,default:pEe,message:Hr(Br.REPLICATION_HOSTNAME)}),dE.autoCastBoolean(e[ue.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.CLUSTERING_NODENAME],Br.NODE_NAME),name:ue.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Io,default:zfe.random(),validate:a(i=>uEe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Hr(Br.NODE_NAME)},{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.CLUSTERING_USER],Br.CLUSTER_USERNAME),name:ue.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Io,default:EEe,validate:a(i=>Is(i)?Is(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Hr(Br.CLUSTER_USERNAME)},{type:"password",when:wo(e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Br.CLUSTER_PASS),name:ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Io,validate:a(i=>Is(i)?Is(i):!0,"validate"),message:Hr(Br.CLUSTER_PASS)}];r.push(...s)}let n=await p1.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(SEe,"installPrompts");function wo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Hr(t)} ${cl.gray("[hidden]")}`),ur.trace(`${Hr(t)} [hidden]`)):(console.log(`${Hr(t)} ${e}`),ur.trace(`${Hr(t)} ${e}`)),!1):!0}a(wo,"displayCmdEnvVar");function Is(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Is,"checkForEmptyValue");function TEe(){let e=Object.keys(ue.INSTALL_PROMPTS),t=US(e),r=US(Object.keys(ue.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ue.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(TEe,"checkForPromptOverride");async function gEe(){ur.trace("Checking for existing install.");let e=dE.getPropsFilePath(),t=await ws.pathExists(e),r;if(t){ur.trace(`Install found an existing boot prop file at:${e}`);let n=jfe(e),s=nI.getConfigValue(ue.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ue.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await ws.pathExists(s)}if(!t&&dE.noBootFile()&&(r=!0),r&&!sI){if(ur.trace(`Install found existing HDB config at:${e}`),await m1.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${S1.version()}. Exiting install...`;console.log(Pa+cl.magenta.bold(cEe)),console.log(cl.magenta.bold(s)),ur.error(s)}else console.log(Pa+cl.magenta.bold(tI)),ur.error(tI);process.exit(0)}}a(gEe,"checkForExistingInstall");async function AEe(e){ur.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${oEe}${Pa}and can be viewed by typing or copying and pasting the URL into your web browser.${Pa}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Io,transformer:al,when:wo(e[ue.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ue.INSTALL_PROMPTS.TC_AGREEMENT,message:Hr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:cl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await p1.prompt([r]);n[ue.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ue.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==aEe&&(console.log(cl.yellow(h1)),ur.error(h1),process.exit(0))}a(AEe,"termsAgreement");async function REe(){let e=xi.join(Hi,ue.HDB_CONFIG_FILE),t;try{t=rI.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
111
- install_user = ${t}`,n=dE.getHomeDir(),s=xi.join(n,ue.HDB_HOME_DIR_NAME),i=xi.join(s,ue.LICENSE_KEY_DIR_NAME);try{ws.mkdirpSync(s,{mode:ue.HDB_FILE_PERMISSIONS}),ws.mkdirpSync(i,{mode:ue.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ue.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=xi.join(s,ue.BOOT_PROPS_FILE_NAME);try{await ws.writeFile(o,r)}catch(c){throw ur.error(`There was an error creating the boot file at path: ${o}`),c}Da.setProperty(ue.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Da.setProperty(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Da.setProperty(Da.BOOT_PROPS_FILE_PATH,o)}}a(REe,"createBootPropertiesFile");async function yEe(e){ur.trace("Creating HarperDB config file");let t=US(Object.keys(ue.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[ue.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in MS){if(r===Mt.HTTP_PORT&&t[Mt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??MS[r],t[Mt.HTTP_SECUREPORT]=null;continue}else if(r===Mt.HTTP_PORT)continue;if(r===Mt.OPERATIONSAPI_NETWORK_PORT&&t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??MS[r],t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Mt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=MS[r])}}else t[Mt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Mt.HTTP_PORT.toLowerCase()]&&(t[Mt.HTTP_SECUREPORT]=null);try{La[ue.INSTALL_PROMPTS.HDB_CONFIG]||nI.createConfigFile(t),Da.initSync()}catch(r){bEe(r)}}a(yEe,"createConfigFile");function bEe(e){ur.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(lEe);let t=xi.resolve(Da.get(Da.BOOT_PROPS_FILE_PATH),"../");t&&ws.removeSync(t),Hi&&(T1?ws.readdirSync(Hi,{withFileTypes:!0}).forEach(n=>{let s=xi.join(n.path,n.name);s!==La[ue.INSTALL_PROMPTS.HDB_CONFIG]&&ws.removeSync(s)}):ws.removeSync(Hi)),process.exit(1)}a(bEe,"rollbackInstall");async function R1(e,t){ur.trace("Creating admin user"),await iEe();let r;try{r=await tEe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await eEe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(R1,"createAdminUser");async function y1(e){ur.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await R1(t,r),delete e[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(y1,"createSuperUser");async function OEe(e){ur.trace("Creating Cluster user.");let t;e[ue.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ue.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await R1({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ue.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(OEe,"createClusterUser");async function NEe(){let e=S1.version();if(e)await m1.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(NEe,"insertHdbVersionInfo");function IEe(e){La[ue.INSTALL_PROMPTS.HDB_CONFIG]=e}a(IEe,"updateConfigEnv");function wEe(e){sI=e}a(wEe,"setIgnoreExisting")});var w1=N(($Pe,I1)=>{"use strict";var iI=re(),Jn=j(),N1=WN();I1.exports={processDirectives:CEe};async function CEe(e){console.log("Starting upgrade process...");let t=N1.getVersionsForUpgrade(e),r=LEe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Jn.notify(c),console.log(c);let l=[],u=[];try{l=DEe(o.sync_functions)}catch(d){throw Jn.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await PEe(o.async_functions)}catch(d){throw Jn.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(CEe,"processDirectives");function DEe(e){if(iI.isEmptyOrZeroLength(e))return Jn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Jn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Jn.info(`Running function ${r.name}`),!(r instanceof Function)){Jn.info("Variable being processed is not a function");continue}let n=r();Jn.info(n),t.push(n)}return t}a(DEe,"runSyncFunctions");async function PEe(e){if(iI.isEmptyOrZeroLength(e))return Jn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Jn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Jn.info(`Running function ${s.name}`),!(s instanceof Function)){Jn.info("Variable being processed is not a function");continue}let i=await s();Jn.info(i),t.push(i)}return t}a(PEe,"runAsyncFunctions");function LEe(e){if(iI.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=N1.getDirectiveByVersion(r);n&&t.push(n)}return t}a(LEe,"getUpgradeDirectivesToInstall")});var v1=N((KPe,U1)=>{"use strict";var vS=se();vS.initSync();var L1=require("chalk"),C1=require("fs-extra"),Do=j(),Co=M(),D1=Dc(),MEe=w1(),oI=re(),M1=PS(),UEe=yS(),P1=Eg(),vEe=Fs(),BEe=require("util").promisify,HEe=BEe(vEe.setSchemaDataToGlobal),aI,{UPGRADE_VERSION:BS}=Co.UPGRADE_JSON_FIELD_NAMES_ENUM;U1.exports={upgrade:xEe};async function xEe(e){await HEe(),aI===void 0&&(aI=Tf()),C1.existsSync(vS.get(vS.BOOT_PROPS_FILE_PATH))||(_E("The hdb_boot_properties file was not found. Please install HDB.",Co.LOG_LEVELS.ERROR),process.exit(1)),C1.existsSync(vS.get(Co.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(_E("The hdb settings file was not found. Please make sure HDB is installed.",Co.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await M1.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),_E(`This version of HarperDB is ${D1.version()}`,Co.LOG_LEVELS.INFO);let r=t[BS]?t[BS]:D1.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Co.HDB_SUPPORT_ADDRESS}`),Do.notify("Missing new version field from upgrade info object"),process.exit(1)),await kEe();let n,s=0;try{n=await UEe.forceUpdatePrompt(t)}catch(i){Do.error("There was an error when prompting user about upgrade."),Do.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Do.info(`Starting upgrade to version ${r}`),await FEe(t),_E(`HarperDB was successfully upgraded to version ${t[BS]}`,Co.LOG_LEVELS.INFO)}a(xEe,"upgrade");async function kEe(){let e=!1,t=await P1.findPs(Co.HDB_PROC_NAME);if(oI.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await P1.findPs("hdb_express");oI.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await aI.list();oI.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(L1.red(r)),Do.error(r),process.exit(1)}}a(kEe,"checkIfRunning");async function FEe(e){try{await MEe.processDirectives(e)}catch(t){throw _E("There was an error during the data upgrade. Please check the logs.",Co.LOG_LEVELS.ERROR),t}try{await M1.insertHdbUpgradeInfo(e[BS])}catch(t){Do.error("Error updating the 'hdb_info' system table."),Do.error(t)}}a(FEe,"runUpgrade");function _E(e,t=void 0){t||(t=Do.info),Do[t](e),console.log(L1.magenta(e))}a(_E,"printToLogAndConsole")});var F1=N((WPe,k1)=>{"use strict";var{promises:lI,createReadStream:GEe,createWriteStream:qEe}=require("fs"),{createGzip:$Ee}=require("zlib"),{promisify:VEe}=require("util"),{pipeline:KEe}=require("stream"),YEe=VEe(KEe),WEe=require("path"),ul=se();ul.initSync();var ll=j(),{CONFIG_PARAMS:fE,ITC_EVENT_TYPES:jEe}=M(),{onMessageFromWorkers:zEe}=dt(),QEe=6e4,JEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",XEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",cI,H1;k1.exports=x1;zEe(e=>{e.type===jEe.RESTART&&(ul.initSync(!0),clearInterval(H1),ul.get(fE.LOGGING_ROTATION_ENABLED)&&x1())});async function x1(){try{let e=ll.getLogFilePath(),t=ul.get(fE.LOGGING_ROTATION_MAXSIZE),r=ul.get(fE.LOGGING_ROTATION_INTERVAL);if(!t&&!r){ll.error(JEe);return}let n=ul.get(fE.LOGGING_ROTATION_PATH);if(!n){ll.error(XEe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}cI=Date.now()/6e4,ll.trace("Log rotate enabled, maxSize:",t,"interval:",r),H1=setInterval(async()=>{if(s){let o;o=await lI.stat(e),o.size>=s&&await B1(e,n)}i&&Date.now()/6e4-cI>=i&&(await B1(e,n),cI=Date.now()/6e4)},QEe).unref()}catch(e){ll.error(e)}}a(x1,"logRotator");async function B1(e,t){let r=ul.get(fE.LOGGING_ROTATION_COMPRESS),n=WEe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await YEe(GEe(e),$Ee(),qEe(n)),await lI.unlink(e)):await lI.rename(e,n),ll.closeLogFile(),ll.notify(`hdb.log rotated, old log moved to ${n}`)}a(B1,"moveLogFile")});var j1=N(W1=>{"use strict";var pe=se();pe.initSync();var zPe=Hu(),Xt=M(),Xn=j(),Po=require("fs-extra"),Lo=require("path"),ZEe=require("systeminformation"),ehe=HN(),{install:the}=O1(),uI=require("chalk"),rhe=Ou(),Mo=re(),dI=Ct(),q1=Wa(),G1=_m(),nhe=v1(),she=F1(),{compactOnStart:ihe}=(Vb(),oe($b)),ohe=require("minimist"),ahe=Js(),{PACKAGE_ROOT:che,CONFIG_PARAMS:Ce}=M(),{startHTTPThreads:lhe,startSocketServer:QPe,mostIdleRouting:JPe,remoteAffinityRouting:XPe}=(_I(),oe(z1)),uhe=PS(),{isMainThread:dhe}=require("worker_threads"),ZPe=Qi(),eLe=Zi(),tLe=hR(),rLe=O_(),HS=M(),ki,od,$1=!1,_he="Upgrade complete. Starting HarperDB.",fhe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Ehe="HarperDB not found, starting install process.",hhe="There was an error during install, check install_log.log for more details. Exiting.",phe="HarperDB successfully started.";function mhe(){if(!$1){let e=a(()=>{Po.removeSync(Lo.join(pe.get(Xt.CONFIG_PARAMS.ROOTPATH),Xt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(mhe,"addExitListeners");async function V1(e=!1,t=!1){if(console.log(uI.magenta("Starting HarperDB...")),Xn.suppressLogging?.(()=>{console.log(uI.magenta(""+Po.readFileSync(Lo.join(che,"utility/install/ascii_logo.txt"))))}),await Y1()===!1){console.log(Ehe);try{await the()}catch(o){console.error(hhe,o),Xn.error(o),process.exit(1)}}if(!e){let o=q1(Object.keys(Xt.CONFIG_PARAM_MAP),!0);!Mo.isEmpty(o)&&!Mo.isEmptyOrZeroLength(Object.keys(o))&&dI.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=od?.service==="clustering";od?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Po.readFile(Lo.join(pe.get(Xt.CONFIG_PARAMS.ROOTPATH),Xt.HDB_PID_FILE),"utf8")),c=await ZEe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}ki===void 0&&(ki=Tf()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),pe.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await G1.generateNatsConfig(),await ki.startClusteringProcesses(!0),process.exit()),mhe(),await Po.writeFile(Lo.join(pe.get(HS.CONFIG_PARAMS.ROOTPATH),HS.HDB_PID_FILE),`${process.pid}`),Xn.info("HarperDB PID",process.pid);let s;try{let o=await uhe.getVersionUpdateInfo();o!==void 0&&(s=o[Xt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await nhe.upgrade(o),console.log(_he))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),Xn.error(o)):(console.error(fhe,o),Xn.error(o)),process.exit(1)}ehe(),ghe(),await ahe.reviewSelfSignedCert(),Mo.autoCastBoolean(pe.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&dhe&&await G1.generateNatsConfig(t)}a(V1,"initialize");async function She(e=!1){try{od=ohe(process.argv),od.ROOTPATH&&dI.updateConfigObject("settings_path",Lo.join(od.ROOTPATH,Xt.HDB_CONFIG_FILE)),await V1(e,!0),pe.get(Xt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await ihe();let t=process.env.IS_SCRIPTED_SERVICE&&!od.service;Mo.autoCastBoolean(pe.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ki.startClusteringProcesses(),await ki.startClusteringThreads()),await lhe(process.env.DEV_MODE?1:pe.get(HS.CONFIG_PARAMS.THREADS_COUNT)??pe.get(HS.CONFIG_PARAMS.THREADS)),pe.get(Xt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await she(),t||K1()}catch(t){console.error(t),Xn.error(t),process.exit(1)}}a(She,"main");function K1(){Xn.suppressLogging(()=>{console.log(uI.magenta(`HarperDB ${rhe.version} successfully started`))}),Xn.notify(phe)}a(K1,"started");async function The(e=!0){$1=!e;try{ki===void 0&&(ki=Tf()),ki.enterPM2Mode(),await V1(),Mo.autoCastBoolean(pe.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ki.startClusteringProcesses(),await ki.startService(Xt.PROCESS_DESCRIPTORS.HDB),K1(),e&&process.exit(0)}catch(t){console.error(t),Xn.error(t),process.exit(1)}}a(The,"launch");function ghe(){let e=Lo.join(pe.get(Xt.CONFIG_PARAMS.ROOTPATH),Xt.LICENSE_KEY_DIR_NAME,Xt.LICENSE_FILE_NAME),t=Lo.join(e,Xt.LICENSE_FILE_NAME),r=Lo.join(e,Xt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=q1(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Mo.isEmpty(n)||Mo.isEmpty(s))return;Po.mkdirpSync(e),Po.writeFileSync(r,n),Po.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Xn.error(s)}}a(ghe,"writeLicenseFromVars");Object.assign(W1,{launch:The,main:She,isHdbInstalled:Y1,startupLog:Ahe});async function Y1(){try{await Po.stat(Mo.getPropsFilePath()),await Po.stat(pe.get(Xt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Mo.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Xn.error(`Error checking for HDB install - ${e}`),e}return!0}a(Y1,"isHdbInstalled");function Ahe(e){let r=a(f=>f.padEnd(20),"pad"),n=`
109
+ Reindexing upgrade started for transaction logs`),Oo.notify("Reindexing upgrade started for transaction logs"),await qV(KN,!0,e)),Oo.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(oE?", but errors occurred":"")}a(j_e,"reindexUpgrade");async function qV(e,t,r){let n=await Bi.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=No.join(e,o.toString());if(o===".DS_Store")continue;let l=await Bi.readdir(c),u=l.length;for(let d=0;d<u;d++){let _=l[d];if(_!==".DS_Store"&&Bi.statSync(No.join(c,_)).isDirectory())try{await z_e(o,_,t),en.info(`Reindexing started for ${o}.${_}`),Oo.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${_}`),await J_e(o,_,c,t,r),en.info(`Reindexing completed for ${o}.${_}`),Oo.notify(`Reindexing completed for ${o}.${_}`)}catch(E){oE=!0,E.schema_path=c,E.table_name=_,Oo.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Oo.error(E),en.error(E),console.error(E)}}}if(!oE)try{await Bi.rm(NS,{recursive:!0})}catch{}}a(qV,"processTables");async function z_e(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=No.join(NS,s);await Bi.ensureDir(NS),await Bi.writeFile(i,""),en=Y_e({level:"debug",formatters:{bindings(){}}},i)}a(z_e,"initPinoLogger");var Q_e=20;async function J_e(e,t,r,n,s){let i;try{i=await Qn.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){Oo.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),en.error(S);return}throw S}let o=efe(i.dbis),c=Qn.openDBI(i,o),l=Object.keys(i.dbis),u=Qn.statDBI(i,o);en.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new K_e.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let _=await Qn.createEnvironment(r,t,!1);Qn.createDBI(_,o,!1,!0);let E=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},E.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),E.length>Q_e&&await f();await f()}catch(S){throw oE=!0,en.error(S),S}async function f(){let S,y=E.map(({value:U})=>U);n?S=await Promise.all(y.map(U=>X_e(_,U))):S=await G_e(_,o,l.filter(U=>U!=="__blob__"),y,!1);for(let U=0,H=E.length;U<H;U++){let{key:X,value:Y}=E[U];en.info(`Record hash value: ${X} hash: ${o}`);let V;n?V=S[U]:V=S.written_hashes.indexOf(X)>-1,iE(V,!0),Z_e(_,o,Y[o],n),en.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}E=[],d.value/d.total*100%10===0&&Oo.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),en.info(`${d.value}/${d.total} records inserted`)}a(f,"finishOutstanding"),d.stop();let h=Qn.statDBI(i,o),T=Qn.statDBI(_,o);if(en.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${T.entryCount}`),iE.deepStrictEqual(h.entryCount,T.entryCount),await Qn.closeEnvironment(i),await Qn.closeEnvironment(_),delete global.lmdb_map[`${e}.${t}`],s){let S=No.join(r,t),y=No.join(S,"data.mdb"),I=No.join(S,"lock.mdb");await Bi.unlink(y),await Bi.unlink(I),await Bi.rmdir(S),en.info(`Deleted old environment files from schema folder: ${y}, ${I}`)}let m=await Qn.openEnvironment(r,t),g=Qn.statDBI(m,o);en.info(`New stats: ${JSON.stringify(T)}. New stats after move: ${JSON.stringify(g)}`),iE.deepStrictEqual(g.entryCount,T.entryCount),await Qn.closeEnvironment(m),delete global.lmdb_map[`${e}.${t}`]}a(J_e,"processTable");async function X_e(e,t){Qn.initializeDBIs(e,Ia.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ia.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ia.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ia.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),V_e.isEmpty(t.user_name)||e.dbis[Ia.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Ia.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(X_e,"insertTransaction");function Z_e(e,t,r,n){let i=e.dbis[t].get(r);iE.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Ia.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ia.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,l]of o)if(c!==t&&e.dbis[c]!==void 0&&!$_e.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let _=l[u];$V(e,c,_,r)}else $V(e,c,l,r)}a(Z_e,"validateIndices");function $V(e,t,r,n){try{let s=!1,i=q_e.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||en.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),iE.deepStrictEqual(s,!0)}catch(s){oE=!0,en.error(s),console.error(s)}}a($V,"validateIndex");function efe(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(efe,"getHashDBI")});var QV=N((CPe,zV)=>{"use strict";var IS=require("path"),wa=require("fs-extra"),tfe=$N(),nl=j(),YV=Ct(),YN=se(),ii=M(),wS=re(),rfe=require("properties-reader"),nfe=$s(),sfe=gp(),ife=$r(),wPe=require("util"),ofe=ife.searchByValue,afe=cn(),cfe=am(),lfe=It(),ufe=KV(),WV=Js(),dfe=yS(),lE=new tfe("4.0.0"),jV=[],aE,cE;async function _fe(){try{if(await dfe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),aE){let t=wS.changeExtension(aE,".bak");await wa.move(aE,t)}if(cE){let t=wS.changeExtension(cE,".bak");await wa.move(cE,t)}await WV.generateKeys()}else console.log("Using existing certificates."),WV.updateConfigCert(aE,cE,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(_fe,"generateNewKeys");async function ffe(){console.log("Updating HarperDB nodes."),nl.info("Updating HarperDB nodes.");let e=[];try{let t=new nfe(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await ofe(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!lfe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,_=c.subscriptions.length;d<_;d++){let E=c.subscriptions[d],f=E.channel.split(":");u.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:ii.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(wS.isEmptyOrZeroLength(n))return;let s=new sfe(ii.SYSTEM_SCHEMA_NAME,ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await afe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{cfe.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(ffe,"updateNodes");async function Efe(){let e=YN.get(ii.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(IS.join("config","settings.js"))){nl.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),nl.info(t);let r=IS.dirname(e),n=YN.get(ii.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=IS.join(n,"backup","4_0_0_upgrade_settings.bak"),i=IS.join(n,ii.HDB_CONFIG_FILE);try{nl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),wa.copySync(e,s)}catch(_){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),_}try{nl.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),nl.info("Updating env variables with new settings values");let _=YV.initOldConfig(e);aE=_[ii.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],cE=_[ii.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],YV.createConfigFile(_)}catch(_){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),_}let o=wS.getPropsFilePath();wa.accessSync(o,wa.constants.F_OK|wa.constants.R_OK);let l=rfe(o).get(ii.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
110
+ install_user = ${l}`;try{wa.writeFileSync(o,u)}catch(_){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),_}try{YN.initSync(!0)}catch(_){throw console.error("Unable to initialize new properties. Please check the log for details."),_}let d="New settings file for 4.0.0 upgrade successfully created.";try{wa.removeSync(r),console.log(d),nl.info(d)}catch(_){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),_}}a(Efe,"updateSettingsFile_4_0_0");lE.async_functions.push(Efe);lE.async_functions.push(_fe);lE.async_functions.push(ufe);lE.async_functions.push(ffe);jV.push(lE);zV.exports=jV});var WN=N((PPe,e1)=>{"use strict";var sl=re(),hfe=M(),JV=j(),{DATA_VERSION:pfe,UPGRADE_VERSION:mfe}=hfe.UPGRADE_JSON_FIELD_NAMES_ENUM,XV=FV(),CS=QV(),il=new Map;XV&&XV.forEach(e=>{il.set(e.version,e)});CS&&CS.forEach(e=>{il.set(e.version,e)});CS&&CS.forEach(e=>{il.set(e.version,e)});function Sfe(){return[...il.keys()].sort(sl.compareVersions)}a(Sfe,"getSortedVersions");function ZV(e){let t=e[pfe],r=e[mfe];return sl.isEmptyOrZeroLength(t)||sl.isEmptyOrZeroLength(r)?(JV.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),JV.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...il.keys()].sort(sl.compareVersions).filter(function(n){return sl.compareVersions(n,t)>0&&sl.compareVersions(n,r)<=0})}a(ZV,"getVersionsForUpgrade");function Tfe(e){return ZV(e).length>0}a(Tfe,"hasUpgradesRequired");function gfe(e){return sl.isEmptyOrZeroLength(e)?null:il.has(e)?il.get(e):null}a(gfe,"getDirectiveByVersion");e1.exports={getSortedVersions:Sfe,getDirectiveByVersion:gfe,getVersionsForUpgrade:ZV,hasUpgradesRequired:Tfe}});var PS=N((MPe,i1)=>{"use strict";var Afe=require("util"),jN=require("chalk"),Rfe=require("os"),r1=cn(),yfe=$r(),Jn=M(),n1=wV(),QN=TA(),{UpgradeObject:t1}=PV(),{forceDowngradePrompt:bfe}=yS(),Ofe=Dc(),DS=j(),rd=re(),JN=Fs(),Nfe=(De(),oe(lt)),Ife=WN(),wfe=Afe.promisify(JN.setSchemaDataToGlobal),Cfe=yfe.searchByValue,Dfe="info_id",Pfe="2.9.9",Lfe="3.0.0";async function Mfe(e){let t=new n1.HdbInfoInsertObject(1,e,e),r=new QN.InsertObject(Jn.OPERATIONS_ENUM.INSERT,Jn.SYSTEM_SCHEMA_NAME,Jn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Jn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return JN.setSchemaDataToGlobal(),r1.insert(r)}a(Mfe,"insertHdbInstallInfo");async function zN(e){let t,r=await s1(),n=new Map([[0,{}]]);for(let c of r)n.set(c.info_id,c);let i=Math.max.apply(null,[...n.keys()])+1;t=new n1.HdbInfoInsertObject(i,e,e);let o=new QN.InsertObject(Jn.OPERATIONS_ENUM.INSERT,Jn.SYSTEM_SCHEMA_NAME,Jn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Jn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await wfe(),r1.insert(o)}a(zN,"insertHdbUpgradeInfo");async function s1(){let e=new QN.NoSQLSeachObject(Jn.SYSTEM_SCHEMA_NAME,Jn.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Dfe,Jn.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Cfe(e))}catch(r){console.error(r)}return t}a(s1,"getAllHdbInfoRecords");async function Ufe(){let e=await s1();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}a(Ufe,"getLatestHdbInfoRecord");async function vfe(){DS.info("Checking if HDB software has been updated");try{let e=Ofe.version(),t=await Ufe(),r;if(rd.isEmpty(t))r=Pfe;else if(r=t.data_version_num,rd.compareVersions(r.toString(),e.toString())>0){if(!rd.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(jN.yellow(`This instance's data was last run on version ${r}`)),console.error(jN.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Rfe.EOL}${Jn.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");rd.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(jN.yellow(`This instance's data was last run on version ${r}`)),await bfe(new t1(r,e))?await zN(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(JN.setSchemaDataToGlobal(),Bfe(r),e.toString()===r.toString())return;let n=new t1(r,e);if(Ife.hasUpgradesRequired(n))return n;rd.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await zN(n.upgrade_version),DS.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw DS.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),DS.fatal(e),e}}a(vfe,"getVersionUpdateInfo");function Bfe(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Jn.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Nfe.databases.system))throw console.log(t),new Error(t);if(!rd.isEmpty(e)&&e<Lfe)throw console.log(t),new Error(t)}a(Bfe,"checkIfInstallIsSupported");i1.exports={insertHdbInstallInfo:Mfe,insertHdbUpgradeInfo:zN,getVersionUpdateInfo:vfe}});var l1=N((vPe,c1)=>{"use strict";var LS=require("joi"),{boolean:Hfe,string:XN,number:xfe}=LS.types(),o1=require("fs-extra"),uE=M(),a1=require("path"),kfe=gt();c1.exports=Ffe;function Ffe(e){let t=XN.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=LS.object({[uE.INSTALL_PROMPTS.ROOTPATH]:LS.custom(Gfe),[uE.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:LS.alternatives([xfe.min(0),XN]).allow("null",null),[uE.INSTALL_PROMPTS.TC_AGREEMENT]:XN.valid("yes","YES","Yes"),[uE.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[uE.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Hfe});return kfe.validateBySchema(e,r)}a(Ffe,"installValidator");function Gfe(e,t){if(o1.existsSync(a1.join(e,"system/hdb_user/data.mdb"))||o1.existsSync(a1.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Gfe,"validateRootAvailable")});var d1=N((HPe,u1)=>{"use strict";var{mkdirpSync:qfe,copySync:$fe}=require("fs-extra"),Ca=require("path"),nd=M(),eI=j(),Vfe=Un(),ZN=Qi(),Kfe=Tt();u1.exports=Yfe;async function Yfe(e){eI.trace("Mounting HarperDB"),ol(e),ol(Ca.join(e,"backup")),ol(Ca.join(e,"keys")),ol(Ca.join(e,"keys",nd.LICENSE_FILE_NAME)),ol(Ca.join(e,"log")),ol(Ca.join(e,"database")),ol(Ca.join(e,"components")),$fe(Ca.resolve(nd.PACKAGE_ROOT,"./utility/install/README.md"),Ca.join(e,"README.md")),await Wfe()}a(Yfe,"mountHdb");async function Wfe(){let e=y_(),t=Object.keys(ZN);for(let r=0;r<t.length;r++){let n=t[r],s=ZN[n].hash_attribute;try{Kfe.initSystemSchemaPaths(nd.SYSTEM_SCHEMA_NAME,n);let i=new e(nd.SYSTEM_SCHEMA_NAME,n,s);i.attributes=ZN[n].attributes;let o=i.attributes.find(({attribute:c})=>c===s);o.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await Vfe.createTable(n,i)}catch(i){throw eI.error(`issue creating environment for ${nd.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}a(Wfe,"createLMDBTables");function ol(e){qfe(e,{mode:nd.HDB_FILE_PERMISSIONS}),eI.info(`Directory ${e} created`)}a(ol,"makeDirectory")});var O1=N((GPe,b1)=>{"use strict";var rI=require("os"),p1=require("inquirer"),ws=require("fs-extra"),jfe=require("properties-reader"),cl=require("chalk"),xi=require("path"),zfe=require("human-readable-ids").hri,Qfe=require("ora"),Jfe=require("yaml"),ur=j(),Da=se(),dE=re(),US=Wa(),m1=PS(),S1=Dc(),ue=M(),{CONFIG_PARAM_MAP:kPe,CONFIG_PARAMS:Mt}=ue,Xfe=l1(),Zfe=d1(),nI=Ct(),eEe=xn(),tEe=J_(),rEe=HN(),nEe=Fs(),sEe=require("util").promisify,iEe=sEe(nEe.setSchemaDataToGlobal),_1=Js(),al=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Hr=a(e=>cl.magenta.bold(e),"HDB_PROMPT_MSG"),oEe="https://harperdb.io/legal/end-user-license-agreement",Pa=rI.EOL,Io="",aEe="yes",f1="Starting HarperDB install...",E1="HarperDB installation was successful.",h1="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",cEe="An out of date version of HarperDB is already installed.",tI="It appears that HarperDB is already installed. Exiting install...",lEe="Aborting install",FPe=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),uEe=new RegExp(/^[^\s.,*>]+$/),dEe=rI.homedir(),_Ee=xi.join(dEe,ue.HDB_ROOT_DIR_NAME),fEe="HDB_ADMIN",EEe="CLUSTER_USER",hEe="dev",pEe="localhost",MS={[Mt.HTTP_CORS]:!0,[Mt.HTTP_CORSACCESSLIST]:["*"],[Mt.HTTP_PORT]:9926,[Mt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Mt.THREADS_COUNT]:1,[Mt.THREADS_DEBUG]:!0,[Mt.LOGGING_STDSTREAMS]:!0,[Mt.LOGGING_LEVEL]:"info",[Mt.OPERATIONSAPI_NETWORK_PORT]:9925,[Mt.LOCALSTUDIO_ENABLED]:!0},Br={DESTINATION:"Please enter a destination for HarperDB:",HDB_USERNAME:"Please enter a username for the administrative user:",HDB_PASS:"Please enter a password for the administrative user:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:",DEFAULTS_MODE:"Default Config - dev (easy access/debugging) or prod (security/performance): (dev/prod)",REPLICATION_HOSTNAME:"Please enter the hostname for this server:"},La=US([ue.INSTALL_PROMPTS.HDB_CONFIG]),Hi,T1=!1,sI=!1,g1=!1;b1.exports={install:A1,updateConfigEnv:IEe,setIgnoreExisting:wEe};A1.createSuperUser=y1;async function A1(){console.log(Hr(Pa+f1+Pa)),ur.notify(f1);let e;La[ue.INSTALL_PROMPTS.HDB_CONFIG]&&(e=mEe());let t=TEe();Object.assign(t,e),t[ue.INSTALL_PROMPTS.TC_AGREEMENT]&&t[ue.INSTALL_PROMPTS.ROOTPATH]&&t[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[ue.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(g1=!0,t[ue.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=Xfe(t);if(r)throw r.message;await gEe(),await AEe(t);let n=await SEe(t);Hi=n[ue.INSTALL_PROMPTS.ROOTPATH],La[ue.INSTALL_PROMPTS.HDB_CONFIG]&&xi.dirname(La[ue.INSTALL_PROMPTS.HDB_CONFIG])===Hi&&(T1=!0),!sI&&!La[ue.INSTALL_PROMPTS.HDB_CONFIG]&&await ws.pathExists(xi.join(Hi,ue.HDB_CONFIG_FILE))&&(console.error(tI),process.exit());let s=Qfe({prefixText:Hr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),dE.isEmpty(Hi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Da.setHdbBasePath(Hi),await Zfe(Hi),await REe(),await yEe(n),ur.initLogSettings(!0),await y1(n),await OEe(n),await _1.updateConfigCert(),await _1.generateCertsKeys(),await NEe(),rEe(),s.stop(),console.log(Hr(Pa+E1+Pa)),ur.notify(E1)}a(A1,"install");function mEe(){let e=Jfe.parseDocument(ws.readFileSync(La[ue.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=nI.flattenConfig(e.toJSON());return t[ue.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ue.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(mEe,"getConfigFromFile");async function SEe(e){ur.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.ROOTPATH],Br.DESTINATION),name:ue.INSTALL_PROMPTS.ROOTPATH,prefix:Io,default:_Ee,validate:a(async s=>Is(s)?Is(s):await ws.pathExists(xi.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Hr(Br.DESTINATION)},{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Br.HDB_USERNAME),name:ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Io,default:fEe,validate:a(s=>Is(s)?Is(s):(t=s,!0),"validate"),message:Hr(Br.HDB_USERNAME)},{type:"password",when:wo(e[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Br.HDB_PASS),name:ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Io,validate:a(s=>Is(s)?Is(s):!0,"validate"),message:Hr(Br.HDB_PASS)},{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.DEFAULTS_MODE],Br.DEFAULTS_MODE),name:ue.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Io,default:hEe,validate:a(s=>Is(s)?Is(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Hr(Br.DEFAULTS_MODE)}];if(g1||r.push({type:"input",name:ue.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:al,when:wo(e[ue.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Br.REPLICATION_HOSTNAME),prefix:Io,default:pEe,message:Hr(Br.REPLICATION_HOSTNAME)}),dE.autoCastBoolean(e[ue.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.CLUSTERING_NODENAME],Br.NODE_NAME),name:ue.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Io,default:zfe.random(),validate:a(i=>uEe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Hr(Br.NODE_NAME)},{type:"input",transformer:al,when:wo(e[ue.INSTALL_PROMPTS.CLUSTERING_USER],Br.CLUSTER_USERNAME),name:ue.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Io,default:EEe,validate:a(i=>Is(i)?Is(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Hr(Br.CLUSTER_USERNAME)},{type:"password",when:wo(e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Br.CLUSTER_PASS),name:ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Io,validate:a(i=>Is(i)?Is(i):!0,"validate"),message:Hr(Br.CLUSTER_PASS)}];r.push(...s)}let n=await p1.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}a(SEe,"installPrompts");function wo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Hr(t)} ${cl.gray("[hidden]")}`),ur.trace(`${Hr(t)} [hidden]`)):(console.log(`${Hr(t)} ${e}`),ur.trace(`${Hr(t)} ${e}`)),!1):!0}a(wo,"displayCmdEnvVar");function Is(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Is,"checkForEmptyValue");function TEe(){let e=Object.keys(ue.INSTALL_PROMPTS),t=US(e),r=US(Object.keys(ue.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=ue.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(TEe,"checkForPromptOverride");async function gEe(){ur.trace("Checking for existing install.");let e=dE.getPropsFilePath(),t=await ws.pathExists(e),r;if(t){ur.trace(`Install found an existing boot prop file at:${e}`);let n=jfe(e),s=nI.getConfigValue(ue.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(ue.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await ws.pathExists(s)}if(!t&&dE.noBootFile()&&(r=!0),r&&!sI){if(ur.trace(`Install found existing HDB config at:${e}`),await m1.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${S1.version()}. Exiting install...`;console.log(Pa+cl.magenta.bold(cEe)),console.log(cl.magenta.bold(s)),ur.error(s)}else console.log(Pa+cl.magenta.bold(tI)),ur.error(tI);process.exit(0)}}a(gEe,"checkForExistingInstall");async function AEe(e){ur.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${oEe}${Pa}and can be viewed by typing or copying and pasting the URL into your web browser.${Pa}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Io,transformer:al,when:wo(e[ue.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ue.INSTALL_PROMPTS.TC_AGREEMENT,message:Hr(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:cl.yellow("Please enter 'yes' or 'no'"),"validate")},n=await p1.prompt([r]);n[ue.INSTALL_PROMPTS.TC_AGREEMENT]&&n[ue.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==aEe&&(console.log(cl.yellow(h1)),ur.error(h1),process.exit(0))}a(AEe,"termsAgreement");async function REe(){let e=xi.join(Hi,ue.HDB_CONFIG_FILE),t;try{t=rI.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
111
+ install_user = ${t}`,n=dE.getHomeDir(),s=xi.join(n,ue.HDB_HOME_DIR_NAME),i=xi.join(s,ue.LICENSE_KEY_DIR_NAME);try{ws.mkdirpSync(s,{mode:ue.HDB_FILE_PERMISSIONS}),ws.mkdirpSync(i,{mode:ue.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ue.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=xi.join(s,ue.BOOT_PROPS_FILE_NAME);try{await ws.writeFile(o,r)}catch(c){throw ur.error(`There was an error creating the boot file at path: ${o}`),c}Da.setProperty(ue.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Da.setProperty(ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Da.setProperty(Da.BOOT_PROPS_FILE_PATH,o)}}a(REe,"createBootPropertiesFile");async function yEe(e){ur.trace("Creating HarperDB config file");let t=US(Object.keys(ue.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[ue.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in MS){if(r===Mt.HTTP_PORT&&t[Mt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??MS[r],t[Mt.HTTP_SECUREPORT]=null;continue}else if(r===Mt.HTTP_PORT)continue;if(r===Mt.OPERATIONSAPI_NETWORK_PORT&&t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??MS[r],t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Mt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=MS[r])}}else t[Mt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Mt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Mt.HTTP_PORT.toLowerCase()]&&(t[Mt.HTTP_SECUREPORT]=null);try{La[ue.INSTALL_PROMPTS.HDB_CONFIG]||nI.createConfigFile(t),Da.initSync()}catch(r){bEe(r)}}a(yEe,"createConfigFile");function bEe(e){ur.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(lEe);let t=xi.resolve(Da.get(Da.BOOT_PROPS_FILE_PATH),"../");t&&ws.removeSync(t),Hi&&(T1?ws.readdirSync(Hi,{withFileTypes:!0}).forEach(n=>{let s=xi.join(n.path,n.name);s!==La[ue.INSTALL_PROMPTS.HDB_CONFIG]&&ws.removeSync(s)}):ws.removeSync(Hi)),process.exit(1)}a(bEe,"rollbackInstall");async function R1(e,t){ur.trace("Creating admin user"),await iEe();let r;try{r=await tEe.addRole(e)}catch(n){if(n.message.includes("already exists"))t=void 0;else throw n.message+="Error creating role",n}if(t)try{t.role=r.role,await eEe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(R1,"createAdminUser");async function y1(e){ur.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await R1(t,r),delete e[ue.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ue.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(y1,"createSuperUser");async function OEe(e){ur.trace("Creating Cluster user.");let t;e[ue.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ue.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await R1({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ue.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ue.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(OEe,"createClusterUser");async function NEe(){let e=S1.version();if(e)await m1.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(NEe,"insertHdbVersionInfo");function IEe(e){La[ue.INSTALL_PROMPTS.HDB_CONFIG]=e}a(IEe,"updateConfigEnv");function wEe(e){sI=e}a(wEe,"setIgnoreExisting")});var w1=N(($Pe,I1)=>{"use strict";var iI=re(),Xn=j(),N1=WN();I1.exports={processDirectives:CEe};async function CEe(e){console.log("Starting upgrade process...");let t=N1.getVersionsForUpgrade(e),r=LEe(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Xn.notify(c),console.log(c);let l=[],u=[];try{l=DEe(o.sync_functions)}catch(d){throw Xn.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await PEe(o.async_functions)}catch(d){throw Xn.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(CEe,"processDirectives");function DEe(e){if(iI.isEmptyOrZeroLength(e))return Xn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Xn.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Xn.info(`Running function ${r.name}`),!(r instanceof Function)){Xn.info("Variable being processed is not a function");continue}let n=r();Xn.info(n),t.push(n)}return t}a(DEe,"runSyncFunctions");async function PEe(e){if(iI.isEmptyOrZeroLength(e))return Xn.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Xn.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(Xn.info(`Running function ${s.name}`),!(s instanceof Function)){Xn.info("Variable being processed is not a function");continue}let i=await s();Xn.info(i),t.push(i)}return t}a(PEe,"runAsyncFunctions");function LEe(e){if(iI.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=N1.getDirectiveByVersion(r);n&&t.push(n)}return t}a(LEe,"getUpgradeDirectivesToInstall")});var v1=N((KPe,U1)=>{"use strict";var vS=se();vS.initSync();var L1=require("chalk"),C1=require("fs-extra"),Do=j(),Co=M(),D1=Dc(),MEe=w1(),oI=re(),M1=PS(),UEe=yS(),P1=Eg(),vEe=Fs(),BEe=require("util").promisify,HEe=BEe(vEe.setSchemaDataToGlobal),aI,{UPGRADE_VERSION:BS}=Co.UPGRADE_JSON_FIELD_NAMES_ENUM;U1.exports={upgrade:xEe};async function xEe(e){await HEe(),aI===void 0&&(aI=mf()),C1.existsSync(vS.get(vS.BOOT_PROPS_FILE_PATH))||(_E("The hdb_boot_properties file was not found. Please install HDB.",Co.LOG_LEVELS.ERROR),process.exit(1)),C1.existsSync(vS.get(Co.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(_E("The hdb settings file was not found. Please make sure HDB is installed.",Co.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await M1.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),_E(`This version of HarperDB is ${D1.version()}`,Co.LOG_LEVELS.INFO);let r=t[BS]?t[BS]:D1.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Co.HDB_SUPPORT_ADDRESS}`),Do.notify("Missing new version field from upgrade info object"),process.exit(1)),await kEe();let n,s=0;try{n=await UEe.forceUpdatePrompt(t)}catch(i){Do.error("There was an error when prompting user about upgrade."),Do.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Do.info(`Starting upgrade to version ${r}`),await FEe(t),_E(`HarperDB was successfully upgraded to version ${t[BS]}`,Co.LOG_LEVELS.INFO)}a(xEe,"upgrade");async function kEe(){let e=!1,t=await P1.findPs(Co.HDB_PROC_NAME);if(oI.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await P1.findPs("hdb_express");oI.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await aI.list();oI.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(L1.red(r)),Do.error(r),process.exit(1)}}a(kEe,"checkIfRunning");async function FEe(e){try{await MEe.processDirectives(e)}catch(t){throw _E("There was an error during the data upgrade. Please check the logs.",Co.LOG_LEVELS.ERROR),t}try{await M1.insertHdbUpgradeInfo(e[BS])}catch(t){Do.error("Error updating the 'hdb_info' system table."),Do.error(t)}}a(FEe,"runUpgrade");function _E(e,t=void 0){t||(t=Do.info),Do[t](e),console.log(L1.magenta(e))}a(_E,"printToLogAndConsole")});var F1=N((WPe,k1)=>{"use strict";var{promises:lI,createReadStream:GEe,createWriteStream:qEe}=require("fs"),{createGzip:$Ee}=require("zlib"),{promisify:VEe}=require("util"),{pipeline:KEe}=require("stream"),YEe=VEe(KEe),WEe=require("path"),ul=se();ul.initSync();var ll=j(),{CONFIG_PARAMS:fE,ITC_EVENT_TYPES:jEe}=M(),{onMessageFromWorkers:zEe}=dt(),QEe=6e4,JEe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",XEe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",cI,H1;k1.exports=x1;zEe(e=>{e.type===jEe.RESTART&&(ul.initSync(!0),clearInterval(H1),ul.get(fE.LOGGING_ROTATION_ENABLED)&&x1())});async function x1(){try{let e=ll.getLogFilePath(),t=ul.get(fE.LOGGING_ROTATION_MAXSIZE),r=ul.get(fE.LOGGING_ROTATION_INTERVAL);if(!t&&!r){ll.error(JEe);return}let n=ul.get(fE.LOGGING_ROTATION_PATH);if(!n){ll.error(XEe);return}let s;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?s=c*1e9:o==="M"?s=c*1e6:s=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}cI=Date.now()/6e4,ll.trace("Log rotate enabled, maxSize:",t,"interval:",r),H1=setInterval(async()=>{if(s){let o;o=await lI.stat(e),o.size>=s&&await B1(e,n)}i&&Date.now()/6e4-cI>=i&&(await B1(e,n),cI=Date.now()/6e4)},QEe).unref()}catch(e){ll.error(e)}}a(x1,"logRotator");async function B1(e,t){let r=ul.get(fE.LOGGING_ROTATION_COMPRESS),n=WEe.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await YEe(GEe(e),$Ee(),qEe(n)),await lI.unlink(e)):await lI.rename(e,n),ll.closeLogFile(),ll.notify(`hdb.log rotated, old log moved to ${n}`)}a(B1,"moveLogFile")});var j1=N(W1=>{"use strict";var pe=se();pe.initSync();var zPe=Hu(),Xt=M(),Zn=j(),Po=require("fs-extra"),Lo=require("path"),ZEe=require("systeminformation"),ehe=HN(),{install:the}=O1(),uI=require("chalk"),rhe=Ou(),Mo=re(),dI=Ct(),q1=Wa(),G1=_m(),nhe=v1(),she=F1(),{compactOnStart:ihe}=(Vb(),oe($b)),ohe=require("minimist"),ahe=Js(),{PACKAGE_ROOT:che,CONFIG_PARAMS:Ce}=M(),{startHTTPThreads:lhe,startSocketServer:QPe,mostIdleRouting:JPe,remoteAffinityRouting:XPe}=(_I(),oe(z1)),uhe=PS(),{isMainThread:dhe}=require("worker_threads"),ZPe=Qi(),eLe=Zi(),tLe=hR(),rLe=y_(),HS=M(),ki,sd,$1=!1,_he="Upgrade complete. Starting HarperDB.",fhe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Ehe="HarperDB not found, starting install process.",hhe="There was an error during install, check install_log.log for more details. Exiting.",phe="HarperDB successfully started.";function mhe(){if(!$1){let e=a(()=>{Po.removeSync(Lo.join(pe.get(Xt.CONFIG_PARAMS.ROOTPATH),Xt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(mhe,"addExitListeners");async function V1(e=!1,t=!1){if(console.log(uI.magenta("Starting HarperDB...")),Zn.suppressLogging?.(()=>{console.log(uI.magenta(""+Po.readFileSync(Lo.join(che,"utility/install/ascii_logo.txt"))))}),await Y1()===!1){console.log(Ehe);try{await the()}catch(o){console.error(hhe,o),Zn.error(o),process.exit(1)}}if(!e){let o=q1(Object.keys(Xt.CONFIG_PARAM_MAP),!0);!Mo.isEmpty(o)&&!Mo.isEmptyOrZeroLength(Object.keys(o))&&dI.updateConfigValue(void 0,void 0,o,!0,!0)}let r,n=sd?.service==="clustering";sd?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Po.readFile(Lo.join(pe.get(Xt.CONFIG_PARAMS.ROOTPATH),Xt.HDB_PID_FILE),"utf8")),c=await ZEe.processes();for(let l of c.list)if(l.pid===o){n?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}ki===void 0&&(ki=mf()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),pe.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await G1.generateNatsConfig(),await ki.startClusteringProcesses(!0),process.exit()),mhe(),await Po.writeFile(Lo.join(pe.get(HS.CONFIG_PARAMS.ROOTPATH),HS.HDB_PID_FILE),`${process.pid}`),Zn.info("HarperDB PID",process.pid);let s;try{let o=await uhe.getVersionUpdateInfo();o!==void 0&&(s=o[Xt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await nhe.upgrade(o),console.log(_he))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),Zn.error(o)):(console.error(fhe,o),Zn.error(o)),process.exit(1)}ehe(),ghe(),await ahe.reviewSelfSignedCert(),Mo.autoCastBoolean(pe.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&dhe&&await G1.generateNatsConfig(t)}a(V1,"initialize");async function She(e=!1){try{sd=ohe(process.argv),sd.ROOTPATH&&dI.updateConfigObject("settings_path",Lo.join(sd.ROOTPATH,Xt.HDB_CONFIG_FILE)),await V1(e,!0),pe.get(Xt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await ihe();let t=process.env.IS_SCRIPTED_SERVICE&&!sd.service;Mo.autoCastBoolean(pe.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await ki.startClusteringProcesses(),await ki.startClusteringThreads()),await lhe(process.env.DEV_MODE?1:pe.get(HS.CONFIG_PARAMS.THREADS_COUNT)??pe.get(HS.CONFIG_PARAMS.THREADS)),pe.get(Xt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await she(),t||K1()}catch(t){console.error(t),Zn.error(t),process.exit(1)}}a(She,"main");function K1(){Zn.suppressLogging(()=>{console.log(uI.magenta(`HarperDB ${rhe.version} successfully started`))}),Zn.notify(phe)}a(K1,"started");async function The(e=!0){$1=!e;try{ki===void 0&&(ki=mf()),ki.enterPM2Mode(),await V1(),Mo.autoCastBoolean(pe.get(Xt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await ki.startClusteringProcesses(),await ki.startService(Xt.PROCESS_DESCRIPTORS.HDB),K1(),e&&process.exit(0)}catch(t){console.error(t),Zn.error(t),process.exit(1)}}a(The,"launch");function ghe(){let e=Lo.join(pe.get(Xt.CONFIG_PARAMS.ROOTPATH),Xt.LICENSE_KEY_DIR_NAME,Xt.LICENSE_FILE_NAME),t=Lo.join(e,Xt.LICENSE_FILE_NAME),r=Lo.join(e,Xt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=q1(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Mo.isEmpty(n)||Mo.isEmpty(s))return;Po.mkdirpSync(e),Po.writeFileSync(r,n),Po.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),Zn.error(s)}}a(ghe,"writeLicenseFromVars");Object.assign(W1,{launch:The,main:She,isHdbInstalled:Y1,startupLog:Ahe});async function Y1(){try{await Po.stat(Mo.getPropsFilePath()),await Po.stat(pe.get(Xt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Mo.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Zn.error(`Error checking for HDB install - ${e}`),e}return!0}a(Y1,"isHdbInstalled");function Ahe(e){let r=a(f=>f.padEnd(20),"pad"),n=`
112
112
  `;pe.get(Ce.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${pe.get(Ce.REPLICATION_HOSTNAME)}
113
113
  `),pe.get(Ce.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${pe.get(Ce.REPLICATION_URL)}
114
114
  `),n+=`${r("Worker Threads:")}${pe.get(Ce.THREADS_COUNT)}
@@ -124,10 +124,10 @@ Reindexing upgrade started for transaction logs`),Oo.notify("Reindexing upgrade
124
124
  `;let l=[],u=dI.getConfigObj();for(let f in u)u[f].package&&l.push(f);let d={},_=`${r("REST:")}`;for(let[f,h]of e)for(let T of h){let m=T.name;m==="rest"&&(_+=`${T.protocol_name}: ${f}, `),l.includes(m)&&(d[m]?d[m]+=`${T.protocol_name}: ${f}, `:d[m]=`${T.protocol_name}: ${f}, `)}_.length>21&&(_=_.slice(0,-2),n+=`${_}
125
125
  `);let E=pe.get(Ce.HTTP_PORT)?`HTTP: ${pe.get(Ce.HTTP_PORT)}, `:"";E+=pe.get(Ce.HTTP_SECUREPORT)?`HTTPS: ${pe.get(Ce.HTTP_SECUREPORT)}, `:"",E.length>21&&(E=E.slice(0,-2));for(let f of l)d[f]?n+=`${r(f+": ")}${d[f].slice(0,-2)}
126
126
  `:n+=`${r(f+": ")}${E}
127
- `;console.log(n),pe.get(Ce.LOGGING_STDSTREAMS)&&Xn.logsAtLevel("info")&&Xn.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(Ahe,"startupLog")});var RI=N(Uo=>{"use strict";var{isMainThread:fI,parentPort:mE,threadId:kS,workerData:Rhe}=require("worker_threads"),{Socket:yhe,createServer:bhe}=require("net"),{createServer:Ohe,IncomingMessage:Nhe}=require("http"),{createServer:Ihe}=require("https"),{unlinkSync:nK,existsSync:whe}=require("fs"),Nn=j(),At=se(),Zt=M(),{server:SE}=(qr(),oe(ja)),{WebSocketServer:Che}=require("ws"),{createServer:Dhe}=require("node:tls"),{getTicketKeys:Phe,restartNumber:Lhe,getWorkerIndex:ad}=dt(),{Headers:EI,appendHeader:Mhe}=(Of(),oe(_F)),{recordAction:EE,recordActionBinary:Q1}=(Ii(),oe(W_)),{Request:sK,createReuseportFd:pE}=(RS(),oe(vN)),{checkMemoryLimit:Uhe}=uc(),{createTLSSelector:iK}=Js(),{resolvePath:oK}=Ct(),{startupLog:vhe}=j1(),{Readable:J1}=require("node:stream"),Bhe=_i(),aK=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG);if(aK){let e;if(fI)e=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Nn.info("Could not close debugger",t)}});else{let t=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&ad()>=0&&(e=t+ad())}if(e){let t=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Nn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&fI)try{require("inspector").open(9229)}catch(e){Lhe<=1&&Nn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:iLe,CONFIG_PARAMS:Hhe}=Zt;At.initSync();var xhe=At.get(Hhe.HTTP_SESSIONAFFINITY),Fi={},hI=new Map;Uo.registerServer=TI;Uo.httpServer=AI;Uo.deliverSocket=SI;Uo.startServers=cK;Uo.listenOnPorts=lK;Uo.globals=Bhe;Uo.when_components_loaded=null;SE.http=AI;SE.request=Fhe;SE.socket=Ghe;SE.ws=qhe;SE.upgrade=_K;var hE={},xS={},FS={},pI=[];function cK(){return Uo.when_components_loaded=VS().loadRootComponents(!0).then(()=>{mE?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)SI(n,r,s);else if(t.requestId)khe(t);else if(t.type===Zt.ITC_EVENT_TYPES.SHUTDOWN){Nn.trace("received shutdown request",kS);for(let i in Fi){let o=Fi[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),d=0,_=setInterval(()=>{d++;let E=d>=100,f=o[u][E?"all":"idle"]();if(f.length===0){E&&clearInterval(_);return}d===1?Nn.info(`Closing ${f.length} idle connections`):E&&Nn.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,T=f.length;h<T;h++){let m=f[h].socket;m._httpMessage&&!m._httpMessage.finished&&!E||(E?m.destroySoon():m.end(`HTTP/1.1 408 Request Timeout\r
127
+ `;console.log(n),pe.get(Ce.LOGGING_STDSTREAMS)&&Zn.logsAtLevel("info")&&Zn.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}a(Ahe,"startupLog")});var RI=N(Uo=>{"use strict";var{isMainThread:fI,parentPort:mE,threadId:kS,workerData:Rhe}=require("worker_threads"),{Socket:yhe,createServer:bhe}=require("net"),{createServer:Ohe,IncomingMessage:Nhe}=require("http"),{createServer:Ihe}=require("https"),{unlinkSync:nK,existsSync:whe}=require("fs"),Nn=j(),At=se(),Zt=M(),{server:SE}=(qr(),oe(ja)),{WebSocketServer:Che}=require("ws"),{createServer:Dhe}=require("node:tls"),{getTicketKeys:Phe,restartNumber:Lhe,getWorkerIndex:id}=dt(),{Headers:EI,appendHeader:Mhe}=(yf(),oe(_F)),{recordAction:EE,recordActionBinary:Q1}=(Ii(),oe(K_)),{Request:sK,createReuseportFd:pE}=(RS(),oe(vN)),{checkMemoryLimit:Uhe}=uc(),{createTLSSelector:iK}=Js(),{resolvePath:oK}=Ct(),{startupLog:vhe}=j1(),{Readable:J1}=require("node:stream"),Bhe=_i(),aK=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG);if(aK){let e;if(fI)e=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Nn.info("Could not close debugger",t)}});else{let t=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&id()>=0&&(e=t+id())}if(e){let t=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=At.get(Zt.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Nn.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&fI)try{require("inspector").open(9229)}catch(e){Lhe<=1&&Nn.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.isHandled||e.code==="ECONNRESET"||e.code==="ECONNREFUSED"||e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:iLe,CONFIG_PARAMS:Hhe}=Zt;At.initSync();var xhe=At.get(Hhe.HTTP_SESSIONAFFINITY),Fi={},hI=new Map;Uo.registerServer=TI;Uo.httpServer=AI;Uo.deliverSocket=SI;Uo.startServers=cK;Uo.listenOnPorts=lK;Uo.globals=Bhe;Uo.when_components_loaded=null;SE.http=AI;SE.request=Fhe;SE.socket=Ghe;SE.ws=qhe;SE.upgrade=_K;var hE={},xS={},FS={},pI=[];function cK(){return Uo.when_components_loaded=VS().loadRootComponents(!0).then(()=>{mE?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)SI(n,r,s);else if(t.requestId)khe(t);else if(t.type===Zt.ITC_EVENT_TYPES.SHUTDOWN){Nn.trace("received shutdown request",kS);for(let i in Fi){let o=Fi[i],c;if(o.closeIdleConnections){let u=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),d=0,_=setInterval(()=>{d++;let E=d>=100,f=o[u][E?"all":"idle"]();if(f.length===0){E&&clearInterval(_);return}d===1?Nn.info(`Closing ${f.length} idle connections`):E&&Nn.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,T=f.length;h<T;h++){let m=f[h].socket;m._httpMessage&&!m._httpMessage.finished&&!E||(E?m.destroySoon():m.end(`HTTP/1.1 408 Request Timeout\r
128
128
  Connection: close\r
129
129
  \r
130
- `))}},25).unref()}o.close?.(()=>{if(At.get(Zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&ad()==0)try{nK(oK(At.get(Zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,kS),o.cantCleanupProperly||Nn.warn("Had to forcefully exit the thread",kS),process.exit(0)},5e3).unref()})}if(aK||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Nn.info("Could not close debugger",i)}}}).ref();let e;pE&&!xhe&&(e=lK()),Promise.resolve(e).then(()=>{if(ad()===0)try{vhe(hI)}catch(t){console.error("Error displaying start-up log",t)}mE?.postMessage({type:Zt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(cK,"startServers");function lK(){let e=[];for(let t in Fi){let r=Fi[t];if(t.includes?.("/")&&ad()==0){whe(t)&&nK(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Nn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=At.get(Zt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=ad();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?pE?n={fd:pE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:pE?n={fd:pE(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Nn.trace("Listening on port "+t,kS)}).on("error",c)}))}return Promise.all(e)}a(lK,"listenOnPorts");!fI&&!Rhe?.noServerStart&&cK();function SI(e,t,r){let n=e?.read?e:new yhe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Fi[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Fi[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Nn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(SI,"deliverSocket");var X1=new Map;function khe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=X1.get(s),r){case"connection":i=SI(void 0,t),X1.set(s,i),i.write=(c,l,u)=>(mE.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(mE.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),mE.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(khe,"proxyRequest");var{getComponentName:GS}=(Ff(),oe(kf));function TI(e,t,r=!0){t||(t=At.get(Zt.CONFIG_PARAMS.HTTP_PORT));let n=Fi[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",rK),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Fi[t]=e;e.on("unhandled",rK)}a(TI,"registerServer");function gI(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],At.get(Zt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:At.get(Zt.CONFIG_PARAMS.HTTP_PORT),secure:At.get(Zt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),At.get(Zt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:At.get(Zt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&At.get(Zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:oK(At.get(Zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(gI,"getPorts");function AI(e,t){let r=[];for(let{port:n,secure:s}of gI(t))r.push(uK(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?pI[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,TI(e,n,!1)),FS[n]=$S(pI,n);return r}a(AI,"httpServer");function qS(e,t){let r=hI.get(e)??[];hI.set(e,[...r,t])}a(qS,"setPortServerMap");function uK(e,t,r,n){if(qS(e,{protocol_name:t?"HTTPS":"HTTP",name:GS()}),!xS[e]){let s=r?"operationsApi_network":"http",i=At.get(s+"_keepAliveTimeout"),o=At.get(s+"_timeout"),c=At.get(s+"_headersTimeout"),l={noDelay:!0,keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:At.get(Zt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=At.get(s+"_mtls"),d=At.get(s+"_mtls_required");t&&Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:Phe(),SNICallback:iK(r?"operations-api":"server",u),ALPNCallback:a(function(f){return f.protocols.includes("harperdb-replication")&&(this.isReplicationConnection=!0),"http/1.1"},"ALPNCallback"),ALPNProtocols:null});let _=Uhe(),E=xS[e]=(t?Ihe:Ohe)(l,async(f,h)=>{try{let m=performance.now(),g=new sK(f,h);r&&(g.isOperationsServer=!0);let S=await FS[e](g);if(!S){if(g._nodeResponse.statusCode)return;S=dK(g)}if(S.headers?.set||(S.headers=new EI(S.headers)),_?S.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):S.headers?.set?.("Server","HarperDB"),S.status===-1){for(let ne of S.headers||[])h.setHeader(ne[0],ne[1]);return f.baseRequest=g,h.baseResponse=S,xS[e].emit("unhandled",f,h)}let y=S.status||200,I=performance.now(),U=I-m,H=S.body,X;if(!S.handlesHeaders){let ne=S.headers||new EI;H?H.length>=0&&(typeof H=="string"?ne.set("Content-Length",Buffer.byteLength(H)):ne.set("Content-Length",H.length),X=!0):(ne.set("Content-Length","0"),X=!0);let Q=`hdb;dur=${U.toFixed(2)}`;S.wasCacheMiss&&(Q+=", miss"),Mhe(ne,"Server-Timing",Q,!0),h.headersSent||h.writeHead(y,ne&&(ne[Symbol.iterator]?Array.from(ne):ne)),X&&h.end(H)}let Y=g.handlerPath,V=g.method;if(EE(U,"duration",Y,V,S.wasCacheMiss==null?void 0:S.wasCacheMiss?"cache-miss":"cache-hit"),Q1(y<400,"success",Y,V),Q1(1,"response_"+y,Y,V),!X)if(H instanceof ReadableStream&&(H=J1.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=J1.from(H)),H?.pipe){H.pipe(h),H.destroy&&h.on("close",()=>{H.destroy()});let ne=0;H.on("data",Q=>{ne+=Q.length}),H.on("end",()=>{EE(performance.now()-I,"transfer",Y,V),EE(ne,"bytes-sent",Y,V)})}else H?.then?H.then(ne=>{h.end(ne)},T):h.end(H)}catch(m){T(m)}function T(m){let g=m.headers;h.writeHead(m.statusCode||500,g&&(g[Symbol.iterator]?Array.from(g):g)),h.end(m.toString()),m.statusCode?m.statusCode===500?Nn.warn(m):Nn.info(m):Nn.error(m)}a(T,"onError")});i>=0&&(E.keepAliveTimeout=i),c>=0&&(E.headersTimeout=c),t&&(E.ports||(E.ports=[]),E.ports.push(e),l.SNICallback.initialize(E),u&&(E.mtlsConfig=u),E.on("secureConnection",f=>{f._parent.startTime&&EE(performance.now()-f._parent.startTime,"tls-handshake",e),EE(f.isSessionReused(),"tls-reused",e)}),E.isSecure=!0),TI(E,e)}return xS[e]}a(uK,"getHTTPServer");function $S(e,t){let r=dK;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"next_callback")}}return r}a($S,"makeCallbackChain");function dK(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new EI}}a(dK,"unhandled");function Fhe(e,t){AI(e,{requestOnly:!0,...t})}a(Fhe,"onRequest");function Ghe(e,t){let r;if(t.securePort){qS(t.securePort,{protocol_name:"TLS",name:GS()});let n=iK("server",t.mtls);r=Dhe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,SNICallback:n},e),n.initialize(r),Fi[t.securePort]=r}return t.port&&(qS(t.port,{protocol_name:"TCP",name:GS()}),r=bhe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Fi[t.port]=r),r}a(Ghe,"onSocket");Object.defineProperty(Nhe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var Z1=[],mI={};function _K(e,t){for(let{port:r}of gI(t))Z1[t?.runFirst?"unshift":"push"]({listener:e,port:r}),mI[r]=$S(Z1,r)}a(_K,"onUpgrade");var eK=[],tK={};function qhe(e,t){let r=[];for(let{port:n,secure:s}of gI(t)){qS(n,{protocol_name:s?"WSS":"WS",name:GS()});let i=uK(n,s,t?.isOperationsServer,t?.mtls);hE[n]||(hE[n]=new Che({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),hE[n].on("connection",(o,c)=>{let l=new sK(c);l.isWebSocket=!0;let u=FS[n](l);tK[n](o,l,u)}),_K((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):hE[n].handleUpgrade(o,c,l,d=>{o.__harperdb_request_upgraded=!0,u(o,c,l),hE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{mI[n]&&mI[n](o,c,l)})),r.push(i),eK[t?.runFirst?"unshift":"push"]({listener:e,port:n}),tK[n]=$S(eK,n),FS[n]=$S(pI,n)}return r}a(qhe,"onWebSocket");function rK(e,t){t.writeHead(404),t.end(`Not found
131
- `)}a(rK,"defaultNotFound")});var z1={};je(z1,{startHTTPThreads:()=>Vhe,startSocketServer:()=>II,updateWorkerIdleness:()=>gK});async function Vhe(e=2,t){try{if(t)OI(0,1,!0);else{let{loadRootComponents:r}=VS();if(e===0)return(0,Cs.setMainIsWorker)(!0),await RI().startServers(),Promise.resolve([]);await r()}TK();for(let r=0;r<e;r++)OI(r,e);return Promise.all(SK)}finally{(0,Cs.threadsHaveStarted)()}}function TK(){let e=(0,pK.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),bI=setInterval(()=>{WS.notify(e)},$he).unref())}function OI(e,t=1,r){if(yI++,(0,Cs.startWorker)("server/threads/threadServer.js",{name:_d.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===_d.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});SK.push(s),await s,cd.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=YS.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=cd.indexOf(n);o>-1&&cd.splice(o,1)}if(a(i,"removeWorker"),ld){let o=ld;ld=[];for(let c of o)mK[c.localPort](null,c)}}}),r){let n=setInterval(()=>{NI?NI=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Cs.shutdownWorkers)(),yI=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function II(e=0,t){if(typeof e=="string")try{(0,jS.existsSync)(e)&&(0,jS.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Khe:r=Yhe(t):r=wI;let n=(0,ud.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=mK[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),NI=!0,r(o,(c,l)=>{if(!c){if(fK){let d=o._socket||new ud.Socket({handle:o,writable:!0,readable:!0});fK.deliverSocket(d,e,l),d.resume()}else yI>0?(ld.length===0&&setTimeout(()=>{ld.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,ld.push(o)):(console.log("start up a dynamic thread to handle request"),OI(0));mr(!1,"socket-routed");return}c.requests++;let u=o.fd;if(u>=0)c.postMessage({port:e,fd:u,data:l});else{let d=o._socket||new ud.Socket({handle:o,writable:!0,readable:!0});zhe(d,c,e)}mr(!0,"socket-routed")})};let s=Ou();WS.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function wI(e,t){let r,n=0;for(let s of cd){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=KS)return KS=i,t(r);n=i}KS=0,t(r)}function Khe(e,t){let r={};e.getpeername(r);let n=r.address,s=dd.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);wI(e,o=>{dd.set(n,{worker:o,lastUsed:i}),t(o)})}function Yhe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new ud.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=dd.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);wI(n,_=>{dd.set(l,{worker:_,lastUsed:d}),s(_,o)})})}a(r,"findByHeaderAffinity")}function gK(){KS=0;for(let e of cd)e.expectedIdle=e.recentELU.idle+Whe,e.requests=1;cd.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function zhe(e,t,r){let n=jhe++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),YS.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),YS.delete(n)),s.event=="destroy"&&(e.destroy(),YS.delete(n))})}var Cs,ud,_d,WS,jS,hK,pK,cd,ld,mK,fK,yI,SK,bI,$he,NI,KS,EK,dd,Whe,YS,jhe,_I=Ie(()=>{Cs=L(dt()),ud=require("net"),_d=L(M()),WS=L(j()),jS=require("fs");Ii();hK=require("worker_threads"),pK=L(uc()),cd=[],ld=[],mK=[],yI=0,SK=[];hK.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Cs.onMessageFromWorkers)(e=>{e.type===_d.ITC_EVENT_TYPES.RESTART&&bI&&(clearInterval(bI),TK())}));$he=6e5;a(Vhe,"startHTTPThreads");a(TK,"licenseWarning");a(OI,"startHTTPWorker");a(II,"startSocketServer");KS=0;a(wI,"findMostIdleWorker");EK=36e5,dd=new Map;a(Khe,"findByRemoteAddressAffinity");a(Yhe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of dd)r.lastUsed+EK<e&&dd.delete(t)},EK).unref();Whe=1e3;a(gK,"updateWorkerIdleness");(0,Cs.setMonitorListener)(gK);YS=new Map,jhe=1;a(zhe,"proxySocket")});var bK=N((hLe,yK)=>{"use strict";var Qhe=require("cluster"),dl=se();dl.initSync();var RK=M(),uLe=require("util"),vo=j(),dLe=require("fs"),Jhe=require("fastify"),_Le=Ou(),Xhe=require("@fastify/cors"),Zhe=require("@fastify/compress"),epe=require("@fastify/static"),tpe=bN(),rpe=require("path"),{PACKAGE_ROOT:npe}=M(),spe=Fs(),ipe=re(),ope=xn(),ape=uc(),{server:cpe}=(qr(),oe(ja)),{node_request_key:fLe}=(RS(),oe(vN)),{authHandler:lpe,handlePostRequest:upe,serverErrorHandler:dpe,reqBodyValidationHandler:_pe}=TS(),ELe=require("net"),{registerContentHandlers:fpe}=($c(),oe(o$)),Epe=6e4,hpe=1024*1024*1024,ppe="TRUE",{CONFIG_PARAMS:TE}=RK,fd;yK.exports={hdbServer:AK,start:AK};async function AK(e){try{vo.debug("In Fastify server"+process.cwd()),vo.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),vo.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Qhe.isMaster,await mpe();let t=e.securePort>0;fd=Spe(t),await fd.ready(),e||(e={}),e.isOperationsServer=!0;try{cpe.http(fd.server,e),fd.server.closeIdleConnections||await fd.listen({port:0,host:"::"})}catch(r){throw fd.close(),vo.error(r),vo.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),vo.fatal(t),process.exit(1)}}a(AK,"operationsServer");async function mpe(){vo.trace("Configuring HarperDB process."),spe.setSchemaDataToGlobal(),await ope.setUsersToGlobal(),await ape.getLicense()}a(mpe,"setUp");function Spe(e){vo.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Tpe(e),r=Jhe(t);r.server.headersTimeout=Ape(),r.setErrorHandler(dpe);let n=gpe();n&&r.register(Xhe,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(tpe),r.register(Zhe),r.register(epe,{root:rpe.join(npe,"studio/build-local")}),fpe(r);let s=dl.get(RK.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!ipe.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[_pe,lpe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),upe(i,o)}),r.get("/health",()=>"HarperDB is running."),vo.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Spe,"buildServer");function Tpe(e){let t=dl.get(TE.OPERATIONSAPI_NETWORK_TIMEOUT),r=dl.get(TE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:hpe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Tpe,"getServerOptions");function gpe(){let e=dl.get(TE.OPERATIONSAPI_NETWORK_CORS),t=dl.get(TE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ppe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(gpe,"getCORSOpts");function Ape(){return dl.get(TE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Epe}a(Ape,"getHeaderTimeoutConfig")});var UI={};je(UI,{disableNATS:()=>ype,publishToStream:()=>JS,setNATSReplicator:()=>CI,setPublishToStream:()=>bpe,setSubscription:()=>MI,start:()=>Rpe});function Rpe(){gE.default.get(AE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Npe()}function ype(e=!0){CK=e}function bpe(e,t){JS=e,MI=t}function Npe(){if(CK||process.env._DISABLE_NATS)return;let e=ut(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];CI(s,r,i)}}Nc((r,n)=>{CI(r.tableName,r.databaseName,r),n&&PK(r)}),!OK&&(OK=!0)}function CI(e,t,r){if(t==="system"&&Ipe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Pr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ze],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ze]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ze],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[ze],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ze]})}static defineSchema(i){PK(i)}static subscribe(){let i=new Pn;return MI(t,e,i),i}static subscribeOnThisThread(i){return i<(gE.default.get(AE.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Ope)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new zS(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=DK;return i}a(n,"getNATSTransaction")}function PK(e){let t=gE.default.get(AE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);JS(`${PI.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,LI.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var NK,PI,LI,IK,wK,gE,AE,QS,CK,JS,MI,Ope,DK,OK,Ipe,zS,DI,LK=Ie(()=>{De();Vs();NK=L(Tr()),PI=L(It()),LI=L(Xi());Cl();IK=L(XS()),wK=L(sn()),gE=L(se()),AE=L(M()),QS=L(j());a(Rpe,"start");a(ype,"disableNATS");JS=NK.publishToStream,MI=IK.setSubscription;a(bpe,"setPublishToStream");Ope=2;a(Npe,"assignReplicationSource");Ipe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(CI,"setNATSReplicator");a(PK,"publishSchema");zS=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=gE.default.get(AE.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let d of i){let _=d.table,E=d.operation=="put"?"upsert":d.operation;l||(QS.trace(`Sending transaction event ${E}`),u=l={operation:E,schema:s,table:_,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,E!=="delete"&&E!=="invalidate"&&(l.records=o)),l.table===_&&l.operation===E?(o.push(d.record),c.push(d.id)):u=u.next={operation:E,table:_,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(JS(`${PI.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,LI.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw QS.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},DI=class extends zS{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,wK.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};DK=new DI});async function HK({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await vI.get(e,{returnNonexistent:!0});i=new xI(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await vI.get(e);o&&o.delete()}i=new eT(e,t)}return n&&(n.id=e,n.user={username:t?.username},RE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function BI(){return ZS++,ZS>65500&&(ZS=1),ZS}function HI(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Oi.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Dt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var UK,Ma,vK,BK,MK,vI,RE,ZS,eT,xI,xK=Ie(()=>{De();Zl();UK=L(sn()),Ma=L(j());pc();vK=L(dt()),BK=L(RI());qr();MK=100,vI=Et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),RE=Et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,vK.getWorkerIndex)()===0&&(async()=>{await BK.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of RE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await it.getUser(r.user.username));try{await HI(r,t,r)}catch{(0,Ma.warn)("Failed to publish will",t)}RE.delete(e.id)}})();a(HK,"getSession");ZS=1;a(BI,"getNextMessageId");eT=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(g=>g.topic===s),_;d?(_=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):_=i===2;let E={search:l,async:!0,user:this.user,startTime:o,omitCurrent:_,url:""};o&&(0,Ma.trace)("Resuming subscription from",s,"from",o);let f=Oi.getMatch(u,"mqtt");if(!f){let g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let g=E.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,g.indexOf("+")===g.length-1)E.onlyChildren=!0,E.url="/"+g.slice(0,g.length-1);else{let S=g.split("/"),y;for(let H=0;H<S.length;H++)if(S[H].indexOf("+")>-1)if(S[H]==="+")y=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&y)throw new Error("Filters can not be combined");let I=!0;S[S.length-1]==="#"&&(S.length--,I=!1),y&&(n=a(H=>{let X=H.id;if(!Array.isArray(X)||I&&X.length!==S.length)return!1;for(let Y=0;Y<S.length;Y++)if(S[Y]!=="+"&&S[Y]!==X[Y])return!1;return!0},"filter"));let U=S.indexOf("+");E.url="/"+(U>-1?S.slice(0,U):S).concat("").join("/")}}let h=f.path,T=f.Resource,m=await Dt(E,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let S=await T.subscribe(E,g);if(!S)return;if(!S[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let y=(async()=>{for await(let I of S)try{let U;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,U=this.needsAcknowledge(I)):(I.acknowledge?.(),U=BI());let H=I.id;if(Array.isArray(H)&&(H=Xl(H)),H==null&&(H=""),await this.listener(h+"/"+H,I.value,U,t)===!1)break;this.awaitingAcks?.size>MK?await new Promise(Y=>setTimeout(Y,this.awaitingAcks.size-MK)):await new Promise(setImmediate)}catch(U){(0,Ma.warn)(U)}})();return S});if(m)return m.topic=s,m.qos=t.qos,this.subscriptions.push(m),m}resume(){}needsAcknowledge(t){let r=BI();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return HI(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();Dt(r,async()=>{try{if(!t){let n=await RE.get(this.sessionId);n?.doesExist()&&await HI(n,n.data,r)}}finally{await RE.delete(this.sessionId)}}).catch(n=>{(0,Ma.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(HI,"publish");xI=class extends eT{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=BI(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ma.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,UK.getNextMonotonicTime)()),(0,Ma.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),vI.put(this.sessionRecord)}}});var FI={};je(FI,{bypassAuth:()=>wpe,start:()=>Cpe});function wpe(){$K=!0}function Cpe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new qK.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,_,E)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return E(u,d,_);o.events.emit("connection",u),dr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:f,onClose:h}=FK(u,T=>{u.send(T)},d,Promise.resolve(_).then(()=>d?.user),o);u.on("message",f),u.on("close",h),u.on("error",T=>{dr.info?.("WebSocket error",T)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),dr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let f=l.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=u.getPeerCertificate().subject.CN);try{d=await e.getUser(f,null,null),(0,Ed.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&rT.notify?.({username:d?.username,status:xr.AUTH_AUDIT_STATUS.SUCCESS,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(h){throw(0,Ed.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&rT.error?.({username:f,status:xr.AUTH_AUDIT_STATUS.FAILURE,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),h}}else dr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(f){o.events.emit("error",f,u),dr.error?.(f)}else if(l.required)return dr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&$K&&u.remoteAddress.includes("127.0.0.1")&&(d=await(0,GK.getSuperUser)(),dr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:_,onClose:E}=FK(u,f=>u.write(f),null,d,o);u.on("data",_),u.on("close",E),u.on("error",f=>{dr.info?.("Socket error",f)})},{port:t,securePort:s,mtls:l})),c}function FK(e,t,r,n,s){kK||(kK=!0,Y_(_=>{tT>0&&_.push({metric:"mqtt-connections",connections:tT,byThread:!0})}));let i;tT++;let o,c={protocolVersion:4},l=(0,nT.parser)({protocolVersion:5});function u(_){l.parse(_)}a(u,"onMessage");function d(){tT--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),qn(!1,"connection","mqtt","disconnect"),dr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async _=>{n?.then&&(n=await n);let E=_.cmd;if(o)o.then&&await o;else if(E!=="connect"){dr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let f=_.topic,h=f?.indexOf("/",1),T=h>0?f.slice(0,h):f;mr(_.length,"bytes-received",T,g(_),"mqtt");try{switch(o?.receivedPacket?.(),E){case"connect":if(c.protocolVersion=_.protocolVersion,_.username)try{n=await it.getUser(_.username,_.password.toString(),r),(0,Ed.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&rT.notify?.({username:n?.username,status:xr.AUTH_AUDIT_STATUS.SUCCESS,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(V){return(0,Ed.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&rT.error?.({username:_.username,status:xr.AUTH_AUDIT_STATUS.FAILURE,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",_,e,V),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",_,e),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(_,n),_.will){let V=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type")));_.will.data=_.will.payload?.length>0?V(_.will.payload):void 0,delete _.will.payload}o=HK({user:n,..._}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(V){return dr.error?.(V),s.events.emit("auth-failed",_,e,V),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:V.code||5,returnCode:V.code||128})}s.events.emit("connected",o,e),qn(!0,"connection","mqtt","connect"),m({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((V,ne,Q,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",V);let W=V.indexOf("/",1),ae=W>0?V.slice(0,W):V;m({cmd:"publish",topic:V,payload:S(ne),messageId:Q||Math.floor(Math.random()*1e8),qos:de.qos},ae);let Oe=e._socket??e;return Oe.writableNeedDrain?new Promise(Ne=>Oe.once("drain",Ne)):!Oe.closed}catch(W){return dr.error?.(W),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let y=[];for(let V of _.subscriptions){let ne;try{let Q=await o.addSubscription(V,V.qos>=1);ne=Q?Q.qos||0:c.protocolVersion<5?128:143}catch(Q){s.events.emit("error",Q,e,V,o),Q.statusCode?Q.statusCode===500?dr.warn?.(Q):dr.info?.(Q):dr.error?.(Q),ne=c.protocolVersion<5?128:Q.statusCode===403?135:Q.statusCode===404?143:128}y.push(ne)}await o.committed,m({cmd:"suback",granted:y,messageId:_.messageId});break;case"unsubscribe":{let V=[];for(let ne of _.unsubscriptions)V.push(o.removeSubscription(ne)?0:17);m({cmd:"unsuback",granted:V,messageId:_.messageId});break}case"pubrel":m({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let I=_.qos===2?"pubrec":"puback",U=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type"))),X=(_.payload?.length||0)>0?U(_.payload):void 0,Y;try{Y=await o.publish(_,X)}catch(V){s.events.emit("error",V,e,_,o),dr.warn?.(V),_.qos>0&&m({cmd:I,messageId:_.messageId,reasonCode:128},_.topic);break}_.qos>0&&m({cmd:I,messageId:_.messageId,reasonCode:Y===!1?144:0},_.topic);break;case"pubrec":m({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(_.messageId);break;case"pingreq":m({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),qn(!0,"connection","mqtt","disconnect"),dr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,_,o),dr.error?.(y),m({cmd:"disconnect"})}function m(y,I){let U=(0,nT.generate)(y,c);t(U),mr(U.length,"bytes-sent",I,g(y),"mqtt")}a(m,"sendPacket");function g(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(g,"packetMethodName");function S(y){return qc(y,r)}a(S,"serialize")}),l.on("error",_=>{dr.warn("MQTT parsing error, closing connection:",_.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var nT,GK,Ed,xr,kI,qK,rT,dr,$K,kK,tT,VK=Ie(()=>{nT=require("mqtt-packet");xK();GK=L(xn());$c();Ii();qr();Ed=L(se()),xr=L(M()),kI=L(Sc()),qK=require("events"),rT=(0,kI.loggerWithTag)("auth-event"),dr=(0,kI.loggerWithTag)("mqtt"),$K=(0,Ed.get)(xr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(wpe,"bypassAuth");a(Cpe,"start");tT=0;a(FK,"onSocket")});var kf={};je(kf,{component_errors:()=>pd,getComponentName:()=>Upe,loadComponent:()=>oT,loadComponentDirectories:()=>JK,setErrorReporter:()=>Mpe});function JK(e,t){t&&(qI=t),e&&($I=e);let r=[];if((0,Nt.existsSync)(GI)){let s=(0,Nt.readdirSync)(GI,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ot.join)(GI,o);r.push(oT(c,qI,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(oT(n,qI,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{QK=!0})}function Mpe(e){yE=e}async function oT(e,t,r,n,s,i){let o=(0,Nt.realpathSync)(e);if(sT.has(o))return sT.get(o);sT.set(o,!0),s&&($I=s);try{let c;n&&(pd=new Map);let l=(0,Ot.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Nt.existsSync)(l)?c=n?(0,aT.getConfigObj)():(0,YK.parseDocument)((0,Nt.readFileSync)(l,"utf8")).toJSON():c=VI;let u=(0,Ot.join)(e,"node_modules","harperdb");try{_l.isMainThread&&(n||(0,Nt.existsSync)(u)&&(0,Nt.realpathSync)(Sd.PACKAGE_ROOT)!==(0,Nt.realpathSync)(u))&&((0,Nt.rmSync)(u,{recursive:!0,force:!0}),(0,Nt.existsSync)((0,Ot.join)(e,"node_modules"))||(0,Nt.mkdirSync)((0,Ot.join)(e,"node_modules")),(0,Nt.symlinkSync)(Sd.PACKAGE_ROOT,u,"dir"))}catch(E){hd.default.error("Error symlinking harperdb module",E)}let d=iT,_=n;for(let E in c){iT=E;let f=c[E];if(pd.set(n?E:(0,Ot.basename)(e),!1),!f)continue;let h,T=f.package;try{if(T){let I=e,U;for(;!(0,Nt.existsSync)(U=(0,Ot.join)(I,"node_modules",E));)if(I=(0,Ot.dirname)(I),I.length<(0,zK.getHdbBasePath)().length){U=null;break}if(U)h=await oT(U,t,r,!1),_=!0;else throw new Error(`Unable to find package ${E}:${T}`)}else h=Lpe[E];if(!h)continue;let m=a(I=>(I.origin=r,Et(I)),"ensureTable"),g=f.network||(f.port||f.securePort)&&f,S=g?.securePort||g?.https&&g.port,y=!g?.https&&g?.port;if(_l.isMainThread&&(h=await h.startOnMainThread?.({server:it,ensureTable:m,port:y,securePort:S,resources:t,...f})||h,n&&g))for(let I of[y,S])try{if(+I&&!KK.includes(I)){let U=KI.get(Sd.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);U&&hd.default.warn("Session affinity is not recommended and may cause memory leaks"),(U||!AS)&&(KK.push(I),II(I,U))}}catch(U){console.error("Error listening on socket",I,U,E)}if(t.isWorker&&(h=await h.start?.({server:it,ensureTable:m,port:y,securePort:S,resources:t,...f})||h),$I.set(h,!0),(h.handleFile||h.handleDirectory||h.setupFile||h.setupDirectory)&&f.files!=null){if(f.files.includes(".."))throw(0,jK.handleHDBError)("Can not reference parent directories");let I=(0,Ot.join)(e,f.files).replace(/\\/g,"/"),U=I.indexOf("/*");if(U>-1&&f.files!==VI[E]?.files&&!(0,Nt.existsSync)(I.slice(0,U)))throw new Error(`The path '${I.slice(0,U)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let H=(0,Ot.basename)(e),X=f.path||"/";X=X.startsWith("/")?X:X.startsWith("./")?"/"+H+X.slice(2):X==="."?"/"+H:"/"+H+"/"+X;let Y,V,ne;if(f.root){let de=f.root;de.startsWith("/")&&(de=de.slice(1)),de.endsWith("/")&&(de=de.slice(0,-1)),de+="/",V=(0,Ot.join)(e,de)}else(ne=I.indexOf("/*"))>-1?(V=I.slice(0,ne+1),Y=(0,Ot.relative)(e,V)):f.files.indexOf("/")>-1&&(V=I.slice(0,I.lastIndexOf("/")+1),Y=(0,Ot.relative)(e,V));let Q=!1;if(_l.isMainThread&&h.setupDirectory&&(Q=await h.setupDirectory?.(X,V,t)),t.isWorker&&h.handleDirectory&&(Q=await h.handleDirectory?.(X,V,t)),Q){_=!0;continue}for(let de of await(0,WK.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:W,dirent:ae}=de;_=!0;let Oe=(0,Ot.relative)(e,W).replace(/\\/g,"/");if(Y)if(Oe.startsWith(Y))Oe=Oe.slice(Y.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${Oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ne=X+(X.endsWith("/")?"":"/")+Oe;try{if(ae.isFile()){let Me=await Ppe(W);_l.isMainThread&&await h.setupFile?.(Me,Ne,W,t),t.isWorker&&await h.handleFile?.(Me,Ne,W,t)}else _l.isMainThread&&await h.setupDirectory?.(Ne,W,t),t.isWorker&&await h.handleDirectory?.(Ne,W,t)}catch(Me){Me.message=`Could not load ${ae.isFile()?"file":"directory"} '${W}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${Me.message}`,yE?.(Me),((0,md.getWorkerIndex)()===0?console:hd.default).error(Me),t.set(f.path||"/",new Xo(Me)),pd.set(n?E:(0,Ot.basename)(e),Me.message)}}}}catch(m){m.message=`Could not load component '${E}' for application '${(0,Ot.basename)(e)}' due to: ${m.message}`,yE?.(m),((0,md.getWorkerIndex)()===0?console:hd.default).error(m),t.set(f.path||"/",new Xo(m),null,!0),pd.set(n?E:(0,Ot.basename)(e),m.message)}}if(iT=d,_l.isMainThread&&!QK&&i&&(0,md.watchDir)(e,async()=>JK()),c.extensionModule){let E=await dS((0,Ot.join)(e,c.extensionModule));return sT.set(o,E),E}if(!_&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;yE?.(new Error(E)),((0,md.getWorkerIndex)()===0?console:hd.default).error(E),pd.set((0,Ot.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,yE?.(c),t.set("",new Xo(c))}}var Nt,Ot,_l,YK,KI,Sd,WK,md,hd,jK,zK,Dpe,aT,Ppe,GI,$I,QK,qI,pd,Lpe,VI,KK,sT,yE,iT,Upe,Ff=Ie(()=>{Nt=require("fs"),Ot=require("path"),_l=require("worker_threads"),YK=require("yaml"),KI=L(se()),Sd=L(M());eD();p$();g$();b$();O$();k$();SV();bV();WK=L(require("fast-glob")),md=L(dt()),hd=L(j());cN();qr();jK=L(_e());De();_I();zK=L(se()),Dpe=L(bK());Nm();LK();ls();VK();aT=L(Ct());RS();WR();({readFile:Ppe}=Nt.promises),GI=(0,aT.resolvePath)(KI.get(Sd.CONFIG_PARAMS.COMPONENTSROOT)),$I=new Map,pd=new Map;a(JK,"loadComponentDirectories");Lpe={REST:pS,rest:pS,graphql:oN,graphqlSchema:Rg,roles:aN,jsResource:uN,fastifyRoutes:DN,login:_N,static:PN,operationsApi:Dpe,customFunctions:{},http:{},clustering:UI,replication:oa,authentication:Nf,mqtt:FI},VI={rest:!0,graphql:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(VI,"static",{value:{files:"web/**"}});KK=[],sT=new Map;a(Mpe,"setErrorReporter");Upe=a(()=>iT,"getComponentName");a(oT,"loadComponent")});var VS=N(($Le,ZK)=>{var{isMainThread:XK}=require("worker_threads"),{getTables:vpe,getDatabases:GLe,table:qLe}=(De(),oe(lt)),{loadComponentDirectories:Bpe,loadComponent:Hpe}=(Ff(),oe(kf)),{resetResources:xpe}=(Zl(),oe(n0)),kpe=rO(),Fpe=Ct(),{dirname:Gpe}=require("path"),{getConnection:qpe}=Tr(),$pe=se(),{CONFIG_PARAMS:Vpe}=M(),{loadCertificates:Kpe}=Js(),YI=new Map;async function Ype(e=!1){!XK&&$pe.get(Vpe.CLUSTERING_ENABLED)&&qpe();try{XK&&await kpe()}catch(n){console.error(n)}let t=xpe();vpe(),t.isWorker=e,await Kpe(),await Hpe(Gpe(Fpe.getConfigFilePath()),t,"hdb",!0,YI),await Bpe(YI,t);let r=[];for(let[n]of YI)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Ype,"loadRootComponents");ZK.exports.loadRootComponents=Ype});var dt=N((KLe,oi)=>{"use strict";var{Worker:Wpe,MessageChannel:jpe,parentPort:Gi,isMainThread:JI,threadId:zpe,workerData:qi}=require("worker_threads"),{PACKAGE_ROOT:Qpe}=M(),{join:nY,isAbsolute:Jpe,extname:Xpe}=require("path"),{server:sY}=(qr(),oe(ja)),{watch:Zpe,readdir:eme}=require("fs/promises"),{totalmem:eY}=require("os"),bE=M(),iY=se(),$i=j(),{randomBytes:tme}=require("crypto"),{_assignPackageExport:rme}=_i(),nme=M(),tY=1024*1024,Ua=[],Ds=[],sme=50,XI=1e4,ime="restart",oY="request_thread_info",aY="resource_report",cY="thread_info",lY="added-port",ome="ack",WI;rme("threads",Ds);oi.exports={startWorker:jI,restartWorkers:ew,shutdownWorkers:dme,workers:Ua,setMonitorListener:Tme,onMessageFromWorkers:_me,onMessageByType:pY,broadcast:Eme,broadcastWithAcknowledgement:pme,setChildListenerByType:ume,getWorkerIndex:uY,getWorkerCount:dY,getTicketKeys:fY,setMainIsWorker:cme,setTerminateTimeout:ame,restartNumber:qi?.restartNumber||1};Ds.onMessageByType=pY;Ds.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ds.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};oi.exports.whenThreadsStarted=new Promise(e=>{oi.exports.threadsHaveStarted=e});var ZI;function ame(e){XI=e}a(ame,"setTerminateTimeout");function uY(){return qi?qi.workerIndex:ZI?0:void 0}a(uY,"getWorkerIndex");function dY(){return qi?qi.workerCount:ZI?1:void 0}a(dY,"getWorkerCount");function cme(e){ZI=e,oi.exports.threadsHaveStarted()}a(cme,"setMainIsWorker");var _Y=1,cT;function fY(){return cT||(cT=JI?tme(48):qi.ticketKeys,cT)}a(fY,"getTicketKeys");Object.defineProperty(sY,"workerIndex",{get(){return uY()}});Object.defineProperty(sY,"workerCount",{get(){return dY()}});var EY={[oY](e,t){mme(t)},[aY](e,t){Sme(t,e)}};function jI(e,t={}){let r=process.constrainedMemory?.()||eY();r=Math.min(r,eY(),2e4*tY);let n=iY.get(bE.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/tY/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ds){let u=new jpe;u.existingPort=l,i.push(u),o.push(u.port2)}Xpe(e)||(e+=".js");let c=new Wpe(Jpe(e)?e:nY(Qpe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:_Y=t.threadCount,name:t.name,restartNumber:oi.exports.restartNumber,ticketKeys:fY()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:lY,port:l,threadId:c.threadId},[l]);return uT(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>jI(e,t),c.on("error",l=>{$i.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Ua.splice(Ua.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<sme?(t.unexpectedRestarts=c.unexpectedRestarts+1,jI(e,t)):$i.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{EY[l.type]?.(l,c)}),Ua.push(c),Ame(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(jI,"startWorker");var lme=[bE.THREAD_TYPES.HTTP];async function ew(e=null,t=Math.max(_Y>3,1),r=!0){if(JI){if(r){let{loadRootComponents:o}=VS();await o()}oi.exports.restartNumber++,t<1&&(t=t*Ua.length);let n=[],s=[];for(let o of Ua.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;$i.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:oi.exports.restartNumber,type:bE.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=lme.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{$i.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},XI*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(_=>{let E=a(f=>{f.type===nme.ITC_EVENT_TYPES.CHILD_STARTED&&($i.trace("Worker has started",u.threadId),_(),s.splice(s.indexOf(d)),u.off("message",E))},"startListener");$i.trace("Waiting for worker to start",u.threadId),u.on("message",E)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Hu();r&&(e==="http"||!e)&&iY.get(bE.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Gi.postMessage({type:ime,workerType:e})}a(ew,"restartWorkers");function ume(e,t){EY[e]=t}a(ume,"setChildListenerByType");function dme(e){return ew(e,1/0,!1)}a(dme,"shutdownWorkers");var hY=[];function _me(e){hY.push(e)}a(_me,"onMessageFromWorkers");var zI=new Map;function pY(e,t){let r=zI.get(e);r||zI.set(e,r=[]),r.push(t)}a(pY,"onMessageByType");var fme=10;async function Eme(e,t){let r=0;for(let n of Ds)try{n.postMessage(e),r++>fme&&(r=0,await new Promise(setImmediate))}catch(s){$i.error("Unable to send message to worker",s)}t&&SY(e,null)}a(Eme,"broadcast");var lT=new Map,hme=1;function pme(e){return new Promise(t=>{let r=0;for(let n of Ds)try{let s=hme++,i=a(()=>{lT.delete(s),--r===0&&t(),n!==Gi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,lT.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of lT)o.port===n&&o()})),n.postMessage(e),r++}catch(s){$i.error("Unable to send message to worker",s)}r===0&&t()})}a(pme,"broadcastWithAcknowledgement");function mme(e){e.postMessage({type:cY,workers:mY()})}a(mme,"sendThreadInfo");function mY(){let e=Date.now();return Ua.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(mY,"getChildWorkerInfo");function Sme(e,t){e.resources=t,e.resources.updated=Date.now()}a(Sme,"recordResourceReport");var QI;function Tme(e){QI=e}a(Tme,"setMonitorListener");var gme=1e3,rY=!1;function Ame(){rY||(rY=!0,setInterval(()=>{for(let e of Ua){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}QI&&QI()},gme).unref())}a(Ame,"startMonitoring");var Rme=1e3;if(Gi&&qi?.addPorts){uT(Gi);for(let e=0,t=qi.addPorts.length;e<t;e++){let r=qi.addPorts[e];r.threadId=qi.addThreadIds[e],uT(r)}setInterval(()=>{let e=process.memoryUsage();Gi.postMessage({type:aY,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Rme).unref(),WI=a(()=>new Promise((e,t)=>{Gi.on("message",r),Gi.postMessage({type:oY});function r(n){n.type===cY&&(Gi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else WI=mY;oi.exports.getThreadInfo=WI;function uT(e,t){Ds.push(e),e.on("message",r=>{if(r.type===lY)r.port.threadId=r.threadId,uT(r.port);else if(r.type===ome){let n=lT.get(r.id);n&&n()}else SY(r,e)}).on("close",()=>{Ds.splice(Ds.indexOf(e),1)}).on("exit",()=>{Ds.splice(Ds.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(uT,"addPort");function SY(e,t){for(let n of hY)n(e,t);let r=zI.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){$i.error(s)}}a(SY,"notifyMessageListeners");if(JI){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await eme(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(nY(s,o.name));try{for await(let{filename:o}of Zpe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await ew(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");oi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Gi.on("message",async e=>{let{type:t}=e;t===bE.ITC_EVENT_TYPES.SHUTDOWN&&(oi.exports.restartNumber=e.restartNumber,Gi.unref(),setTimeout(()=>{$i.warn("Thread did not voluntarily terminate",zpe),process.exit(0)},XI).unref())})});var rv={};je(rv,{AUDIT_STORE_OPTIONS:()=>gf,Decoder:()=>Oc,HAS_CURRENT_RESIDENCY_ID:()=>Ja,HAS_EXPIRATION_EXTENDED_TYPE:()=>t_,HAS_ORIGINATING_OPERATION:()=>e_,HAS_PREVIOUS_RESIDENCY_ID:()=>Xa,REMOTE_SEQUENCE_UPDATE:()=>Pp,createAuditEntry:()=>Pl,getLastRemoved:()=>Cy,openAuditStore:()=>hT,readAuditEntry:()=>xt,removeAuditEntry:()=>pT,setAuditRetention:()=>bme,transactionKeyEncoder:()=>wY});function hT(e){let t=e.auditStore=e.openDB(tw.AUDIT_STORE_NAME,{create:!1,...gf});t||(t=e.auditStore=e.openDB(tw.AUDIT_STORE_NAME,gf),gY(t,1)),t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,t.deleteCallbacks=r,{remove(){delete r[i]}}};let n=null;function s(i=dT){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c,l;try{for(let{key:u,value:d}of t.getRange({start:1,snapshot:!1,end:Date.now()-rw}))if(c=pT(t,u,d),l=u,await new Promise(setImmediate),++o>=yme){i=10;break}await c}finally{o===0?i=Math.min(i<<1,rw/10):gY(t,l),s(i)}},i).unref()}if(a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,NE.getWorkerIndex)()===(0,NE.getWorkerCount)()-1&&s(dT),(0,NE.getWorkerIndex)()===0&&!TY)for(let i of t.getKeys({reverse:!0,limit:1}))i>Date.now()&&(TY=!0,ET.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function pT(e,t,r){if((Ome(r)&15)===nw){let n=xt(r),s=n.tableId;e.deleteCallbacks?.[s]?.(n.recordId)}return e.remove(t)}function gY(e,t){sw[0]=t,e.put(Symbol.for("last-removed"),CY)}function Cy(e){let t=e.get(Symbol.for("last-removed"));if(t)return CY.set(t),sw[0]}function bme(e,t=dT){rw=e,dT=t}function Pl(e,t,r,n,s,i,o,c,l,u,d,_,E){let f=DY[o];if(!f)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?va.setFloat64(0,n):Ps.set(kg),h=9),l){if(l&16761087)throw new Error("Illegal extended type");h++}g(s),g(t),m(r),va.setFloat64(h,e),h+=8,l&Ja&&g(u),l&Xa&&g(d),l&t_&&(va.setFloat64(h,_),h+=8),l&e_&&g(PY[E]),i?m(i):Ps[h++]=0,l?va.setUint16(n?8:0,f|l|32768):Ps[n?8:0]=f;let T=Ps.subarray(0,h);if(c)return Buffer.concat([T,c]);return T;function m(S){let y=h;h+=1,h=(0,fl.writeKey)(S,Ps,h);let I=h-y-1;I>127?I>16383?(ET.error("Key or username was too large for audit entry",S),h=y+1,Ps[y]=0):(Ps.copyWithin(y+2,y+1,h),va.setUint16(y,I|32768),h++):Ps[y]=I}function g(S){S<128?Ps[h++]=S:S<16384?(va.setUint16(h,S|32768),h+=2):S<1056964608?(va.setUint32(h,S|3221225472),h+=4):(Ps[h]=255,va.setUint32(h+1,S),h+=5)}}function Ome(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Oc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function xt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Oc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,_=n.readFloat64(),E,f,h,T;if(i&Ja&&(E=n.readInt()),i&Xa&&(f=n.readInt()),i&t_&&(h=n.readFloat64()),i&e_){let S=n.readInt();T=PY[S]}l=n.readInt();let m=n.position,g=n.position+=l;return{type:DY[i&7],tableId:c,nodeId:o,get recordId(){return(0,fl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:_,previousLocalTime:s,get user(){return g>m?(0,fl.readKey)(e,m,g):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(S,y,I){if(i&_T||i&OE&&!y)return S.decoder.decode(e.subarray(n.position,r));if(i&OE&&I)return iw(S.getEntry(this.recordId),I,S)},getBinaryValue(){return i&(_T|OE)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:E,previousResidencyId:f,expiresAt:h,originatingOperation:T}}catch(n){return ET.error("Reading audit entry error",n,e),{}}}var fl,fT,tw,NY,NE,IY,ET,Ps,va,wY,gf,rw,yme,sw,CY,dT,TY,_T,OE,AY,nw,RY,yY,bY,OY,Pp,Ja,Xa,e_,t_,DY,PY,Oc,ji=Ie(()=>{fl=require("ordered-binary"),fT=L(se()),tw=L(Ht()),NY=L(M()),NE=L(dt()),IY=L(re());Ll();ET=L(j());mT();(0,fT.initSync)();Ps=Buffer.alloc(2816),va=new DataView(Ps.buffer,Ps.byteOffset,2816),wY={writeKey(e,t,r){return e===Zd?(t.set(Zd,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,fl.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,fl.readKey)(e,t,r)}},gf={encoding:"binary",keyEncoder:wY},rw=(0,IY.convertToMS)((0,fT.get)(NY.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,yme=1e3,sw=new Float64Array(1),CY=new Uint8Array(sw.buffer),dT=1e4,TY=!1;a(hT,"openAuditStore");a(pT,"removeAuditEntry");a(gY,"updateLastRemoved");a(Cy,"getLastRemoved");a(bme,"setAuditRetention");_T=16,OE=32,AY=1,nw=2,RY=3,yY=4,bY=5,OY=6,Pp=11,Ja=512,Xa=1024,e_=2048,t_=4096,DY={put:AY|_T,[AY]:"put",delete:nw,[nw]:"delete",message:RY|_T,[RY]:"message",invalidate:yY|OE,[yY]:"invalidate",patch:bY|OE,[bY]:"patch",relocate:OY,[OY]:"relocate"},PY={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(Pl,"createAuditEntry");a(Ome,"readAction");a(xt,"readAuditEntry");Oc=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var ow={};je(ow,{add:()=>ST,applyReverse:()=>LY,getRecordAtTime:()=>iw,rebuildUpdateBefore:()=>TT});function ST(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 TT(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,ST(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function LY(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Nme[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=MY}}function iw(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=xt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":LY(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===MY&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=xt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let _ in d)o[_]&&(s[_]=d[_],o[_]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Nme,MY,mT=Ie(()=>{ji();a(ST,"add");ST.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)};Nme={add:ST};a(TT,"rebuildUpdateBefore");a(LY,"applyReverse");MY={};a(iw,"getRecordAtTime")});function Zn(e){return e[_r]||(e[_r]=Object.create(null))}function bT(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,u;if(o.resolve)u={get(){return o.resolve(this,this[Fe])},set(d){return o.set(this,d)},configurable:!0};else{switch(o.type){case"String":l=a(function(d){if(!(typeof d=="string"||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a string, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"ID":l=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(_=>typeof _=="string")||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a string, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Float":case"Number":l=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="number"||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a number, attempt to assign ${_}`);Zn(this)[c]=d},"set");break;case"Int":l=a(function(d){let _=d?.__op__?d.value:d;if(!(_>>0===_||d==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs((_>>0)-_)<=1)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new Ls.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Long":l=a(function(d){let _=d?.__op__?d.value:d;if(!(Math.round(_)===d&&Math.abs(_)<=9007199254740992||d==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs(_)<=9007199254740992)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new Ls.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"BigInt":l=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="bigint"||d==null&&o.nullable!==!1))if(typeof _=="string"||typeof _=="number")_=BigInt(_),d?.__op__?d.value=_:d=_;else throw new Ls.ClientError(`${c} must be a number, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Boolean":l=a(function(d){if(!(typeof d=="boolean"||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a boolean, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Date":l=a(function(d){if(!(d instanceof Date||d==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Ls.ClientError(`${c} must be a Date, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Bytes":l=a(function(d){if(!(d instanceof Uint8Array||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${d}`);Zn(this)[c]=d},"set");break;case"Any":case void 0:l=a(function(d){Zn(this)[c]=d},"set");break;default:l=a(function(d){if(!(typeof d=="object"||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be an object, attempt to assign ${d}`);Zn(this)[c]=d},"set")}u={get(){let d=this[_r];if(d&&c in d){let E=d[c];if(E?.__op__){let f=this[ve]?.[c];return E.update(f)}return E}let _=this[ve]?.[c];if(_&&typeof _=="object"){let E=vY(_,o);if(E)return d||(d=this[_r]=Object.create(null)),d[c]=E}return _},set:l,enumerable:!0,configurable:!0}}u.get.isAttribute=!0,n[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[_r];return l?.[o]!==void 0?l[o]:this[ve]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Ls.ClientError("Can not add a property to a sealed table schema");Zn(this)[o]=c}),i("deleteProperty",function(o){Zn(this)[o]=void 0}),i("toJSON",function(){let o=this[_r],c;for(let u in o){c||(c={...this[ve]});let d=o[u];if(d?.__op__){let _=c[u];d=d.update(_)}c[u]=d}return Object.keys(this).length>0&&(c||(c={...this[ve]}),Object.assign(c,this)),c||this[ve]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function vY(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[ve])throw new Error("Can not track an already tracked object, check for circular references");this[ve]=s}},bT(r,t)),new r(e)):new gT(e);case Array:let n=new RT(e.length);n[ve]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=vY(o,t?.elements)),n[s]=o}return n;default:return e}}function op(e){let t=e[_r],r;for(let s in t){r||(r={...e[ve]});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=op(i);r[s]=i}return Object.keys(e).length>0&&(r||(r={...e[ve]}),Object.assign(r,e)),r||e[ve]}function hl(e,t=e[_r]){let r;if(UY.call(e,ve)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=hl(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e[ve]});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=ow[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=hl(s);r[n]=s}return r?Object.freeze(r):UY.call(e,ve)?e[ve]:e}function AT(e){let t=e[ve];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[El]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[ve]===s){if(AT(i))return!0}else return!0}}else{let r=e[_r];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[ve]===i){if(AT(s))return!0}else return!0}else return!0}}return!1}var Ls,_r,gT,UY,El,RT,yT,ap=Ie(()=>{Vs();Ls=L(_e());mT();_r=Symbol("own-data");a(Zn,"getChanges");a(bT,"assignTrackedAccessors");a(vY,"trackObject");gT=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[ve])throw new Error("Can not track an already tracked object, check for circular references");this[ve]=t}};bT(gT,{});a(op,"collapseData");UY=Object.prototype.hasOwnProperty;a(hl,"updateAndFreeze");a(AT,"hasChanges");El=Symbol.for("has-array-changes"),RT=class extends Array{static{a(this,"TrackedArray")}[El];constructor(t){super(t)}splice(...t){return this[El]=!0,super.splice(...t)}push(...t){return this[El]=!0,super.push(...t)}pop(){return this[El]=!0,super.pop()}unshift(...t){return this[El]=!0,super.unshift(...t)}shift(){return this[El]=!0,super.shift()}};RT.prototype.constructor=Array;yT=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var uR={};je(uR,{CONTEXT:()=>Fe,ID_PROPERTY:()=>ze,IS_COLLECTION:()=>ai,MultiPartId:()=>NT,RECORD_PROPERTY:()=>ve,Resource:()=>Pr,snake_case:()=>wme,transformForSelect:()=>IT});function wme(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function BY(e,t){if(pl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(pl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new NT;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){pl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return pl=!0,null;e[e.length-1]==="/"&&(pl=!0)}return t.coerceId(decodeURIComponent(e))}function es(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r?(o?(d=i,o=o[Fe]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i[Fe]||i):d=i:(d=s,s=void 0,c=d[ze]??d[this.primaryKey]),c===null&&(u=!0)):i?o=i[Fe]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let T=this.parseQuery(c.slice(f+1));l?T&&(l=Object.assign(T,l)):l=T,c=c.slice(0,f)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),u=h.isCollection,c=h.id):c=h}else if(s[Symbol.iterator]){c=[],u=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new el(c),c==null&&(u=!0);o||(o={});let _;if(l?.ensureLoaded!=null||l?.async||u?(_={...t},l?.ensureLoaded!=null&&(_.ensureLoaded=l.ensureLoaded),l?.async&&(_.async=l.async),u&&(_.isCollection=!0)):_=t,o.transaction){let f=this.getResource(c,o,_);return f.then?f.then(E):E(f)}else return Dt(o,()=>{let f=this.getResource(c,o,_);return f.then?f.then(E):E(f)},_);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,l,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,d,o):f.allowUpdate(o.user,d,o):t.type==="create"?f.allowCreate(o.user,d,o):f.allowDelete(o.user,l,o);if(h?.then)return h.then(T=>{if(!T)throw new OT(o.user);return typeof d?.then=="function"?d.then(m=>e(f,l,o,m)):e(f,l,o,d)});if(!h)throw new OT(o.user)}return typeof d?.then=="function"?d.then(h=>e(f,l,o,h)):e(f,l,o,d)}a(E,"authorizeActionOnResource")}}function ts(e,t){let r=new kY.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function aw(e,t,r){let n=e[ve];if(n){let s=e[_r];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function IT(e,t){let r=t?.propertyResolvers,n=t[Fe],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):aw(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(aw(l,r,n));for(let _ of e)u.push(d(_));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(E=>E&&typeof E=="object"?c(E):E);let u={},d=i(aw(l,r,n)),_;for(let E of e){let f=d(E);f===void 0&&o&&(f=null),f?.then?(_||(_=[]),_.push(f.then(h=>u[E.name||E]=h))):u[E.name||E]=f}return _?Promise.all(_).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=IT(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var HY,xY,kY,Fe,ze,ai,ve,Ime,Pr,OT,pl,NT,Vs=Ie(()=>{HY=require("crypto");Cl();xY=L(_i()),kY=L(_e());ap();pc();tE();Fe=Symbol.for("context"),ze=Symbol.for("primary-key"),ai=Symbol("is-collection"),ve=Symbol("stored-record"),Ime={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Pr=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[ze]=t;let n=r?.[Fe];this[Fe]=n!==void 0?n:r||null}static get=es(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=IT(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=es(function(t,r,n,s){if(Array.isArray(s)&&t[ai]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(d=>d.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):ts(t,"put")},{hasContent:!0,type:"update"});static patch=es(function(t,r,n,s){return t.patch?t.patch(s,r):ts(t,"patch")},{hasContent:!0,type:"update"});static delete=es(function(t,r,n,s){return t.delete?t.delete(r):ts(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,HY.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),Dt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):ts(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=es(function(t,r,n,s){return t.invalidate?t.invalidate(r):ts(t,"delete")},{hasContent:!1,type:"update"});static post=es(function(t,r,n,s){return t[ze]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=es(function(t,r,n,s){return t.connect?t.connect(s,r):ts(t,"connect")},{hasContent:!0,type:"read"});static subscribe=es(function(t,r,n,s){return t.subscribe?t.subscribe(r):ts(t,"subscribe")},{type:"read"});static publish=es(function(t,r,n,s){return t[ze]!=null&&t.update?.(),t.publish?t.publish(s,r):ts(t,"publish")},{hasContent:!0,type:"create"});static search=es(function(t,r,n,s){let i=t.search?t.search(r):ts(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=IT(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=es(function(t,r,n,s){return t.search?t.search(s,r):ts(t,"search")},{hasContent:!0,type:"read"});static copy=es(function(t,r,n,s){return t.copy?t.copy(s,r):ts(t,"copy")},{hasContent:!0,type:"create"});static move=es(function(t,r,n,s){return t.move?t.move(s,r):ts(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this[ai])return(await this.constructor.create(this[ze],t,this[Fe]))[ze];ts(this,"post")}static isCollection(t){return t?.[ai]}static coerceId(t){return t}static parseQuery(t){return ES(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Ime[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:BY(t,this),isCollection:pl}}let i=BY(t,this);return pl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Fe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u[ze]===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let _=d[ze],E=u.get(_);E?E.push(d):u.set(_,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s[ai]=!0),s}subscribe(t){return new Pn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Pn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ze]}getContext(){return this[Fe]}};Pr.prototype[Fe]=null;(0,xY._assignPackageExport)("Resource",Pr);a(wme,"snake_case");OT=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(BY,"pathToId");NT=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(es,"transactional");a(ts,"missingMethod");a(aw,"selectFromObject");a(IT,"transformForSelect")});var bO={};je(bO,{EVICTED:()=>ya,INVALIDATED:()=>Os,coerceType:()=>CT,makeTable:()=>LT,setServerUtilities:()=>Hme,updateResource:()=>DT});function LT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:_,splitSegments:E,replicate:f}=e,{expirationMS:h,evictionMS:T,audit:m,trackDeletes:g}=e,{attributes:S}=e;S||(S=[]);let y=qg(i,n,l),I,U,H={},X=Promise.resolve(),Y,V,ne;for(let v of S)(v.assignCreatedTime||v.name==="__createdtime__")&&(Y=v),(v.assignUpdatedTime||v.name==="__updatedtime__")&&(V=v),v.expiresAt&&(ne=v),v.isPrimaryKey&&(H=v);let Q,de=[],W=[],ae=1,Oe=2,Ne={},Me={},Gr=864e5,wd,ka,wn,Cd=!1,Ol,Lw=new Map,KE=new Map,vt,Fa,Ga=gd.get(Ms.CONFIG_PARAMS.REPLICATION_DATABASES);if(Array.isArray(Ga)){for(let v of Ga)if(v.name===c&&v.replicateTo>=0){Fa=v.replicateTo;break}}let Us=i.getRange({start:!1,end:!1}).constructor,vs=10,YE=6;m&&ie();class Ve extends Pr{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=m;static databasePath=o;static databaseName=c;static attributes=S;static replicate=f;static sealed=_;static splitSegments=E??!0;static createdTimeProperty=Y;static updatedTimeProperty=V;static propertyResolvers;static userResolvers={};static sources=[];static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(p,A){if(A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource)p.intermediateSource=!0,this.sources.unshift(p);else{if(this.sources.some(O=>!O.intermediateSource)){if(this.sources.some(O=>O.name===p.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(p)}U=U||p.get&&(!p.get.reliesOnPrototype||p.prototype.get),I=I||p.load;let w=a(O=>{let B=this.sources;if(B=B.filter(k=>k.intermediateSource&&k[O]&&(!k[O].reliesOnPrototype||k.prototype[O])),B.length>0)if(B.length===1){let k=B[0];return(C,F,x)=>{if(C?.source!==k)return k[O](F,x,C)}}else return(k,C,F)=>{let x=[];for(let q of B){if(k?.source===q)break;x.push(q[O](C,F,k))}return Promise.all(x)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1];R.intermediateSource&&(R={});let b=a(O=>{if(R[O]&&(!R[O].reliesOnPrototype||R.prototype[O]))return(B,k,C)=>{if(!B?.source)return R[O](k,C,B)}},"getApplyToCanonicalSource");Ne={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Me={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")};let D=R.shouldRevalidateEvents;return(async()=>{let O=!1,B,k=a(async(C,F)=>{let x=C.value,q=C.table?We[c][C.table]:Ve;if(c===Ms.SYSTEM_SCHEMA_NAME&&(C.table===Ms.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===Ms.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(O=!0),C.id===void 0&&(C.id=x[q.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=p;let ee={residencyId:tt(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId},G=await q.getResource(C.id,F,ee);switch(C.type){case"put":return D?G._writeInvalidate(ee):G._writeUpdate(x,!0,ee);case"patch":return D?G._writeInvalidate(ee):G._writeUpdate(x,!1,ee);case"delete":return G._writeDelete(ee);case"publish":return G._writePublish(x,ee);case"invalidate":return G._writeInvalidate(ee);case"relocate":return G._writeRelocate(ee);default:qe.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=p.subscribe;C&&g==null&&(g=!0);let F={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},x=p.subscribeOnThisThread?p.subscribeOnThisThread((0,ml.getWorkerIndex)(),F):(0,ml.getWorkerIndex)()===0,q=C&&x&&await p.subscribe?.(F);if(q){let ee;for await(let G of q)try{if(!(G.type==="transaction"?G.writes[0]:G)){qe.default.error?.("Bad subscription event",G);continue}if(G.source=p,G.type==="end_txn"){if(ee?.resolve(),G.localTime&&B!==G.localTime){if(G.remoteNodeIds?.length>0){let Ae=[Symbol.for("seq"),G.remoteNodeIds[0]],te=d.get(Ae),K=te?.nodes;K||(K=[]);for(let Be of G.remoteNodeIds.slice(1)){let we=K.find(ce=>ce.id===Be);K=K.filter(ce=>ce.id!==Be||ce===we),we||(we={id:Be,seqId:0},K.push(we)),we.seqId=Math.max(te?.seqId??1,G.localTime),Be===ee?.nodeId&&(we.lastTxnTime=G.timestamp)}let ge=Math.max(te?.seqId??1,G.localTime);qe.default.trace?.("Received txn",c,ge,G.localTime,G.remoteNodeIds),d.put(Ae,{seqId:ge,nodes:K})}B=G.localTime}G.onCommit&&ee?.committed.then(G.onCommit);continue}if(ee)if(G.beginTxn)ee.resolve();else{ee.write_promises.push(k(G,ee));continue}!G.timestamp&&G.version&&(G.timestamp=G.version);let Ee=Dt(G,()=>{if(G.type==="transaction"){let Ae=[];for(let te of G.writes)try{Ae.push(k(te,G))}catch(K){throw K.message+=" writing "+JSON.stringify(te)+" of event "+JSON.stringify(G),K}return Promise.all(Ae)}else if(G.type==="define_schema"){let Ae=this.attributes.slice(0),te;for(let K of G.attributes)Ae.find(ge=>ge.name===K.name)||(Ae.push(K),te=!0);te&&(Et({table:s,database:c,attributes:Ae,origin:"cluster"}),DE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(ee=G,ee.write_promises=[k(G,G)],new Promise(Ae=>{ee.resolve=()=>Ae(Promise.all(ee.write_promises))})):k(G,G)});ee&&(ee.committed=Ee),O&&Ee&&!Ee?.waitingForUserChange&&(Ee.then(()=>DE.signalUserChange(new PE.UserEventMsg(process.pid))),Ee.waitingForUserChange=!0),G.onCommit&&(Ee?Ee.then(G.onCommit):G.onCommit())}catch(Re){qe.default.error?.("error in subscription handler",Re)}}}catch(C){qe.default.error?.(C)}})(),this}static get isCaching(){return U}static get shouldRevalidateEvents(){return this.prototype.get!==Ve.prototype.get}static getResource(p,A,w){let R=super.getResource(p,A,w);if(p!=null){Yi(p);try{if(R.hasOwnProperty(ve))return R;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let b=!w?.async||i.cache?.get?.(p),D=Ir(A),O=D.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return $a(p,A,{transaction:O,ensureLoaded:w?.ensureLoaded},b,B=>{if(B?DT(R,B):R[ve]=null,A.onlyIfCached&&A.noCacheStore){if(!R.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let k=Dd(p,B,A,R);if(k)return D?.disregardReadTxn(),R[cw]=!0,uw(k,C=>(DT(R,C),R))}return R})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(p)),b}}return R}ensureLoaded(){let p=Dd(this[ze],this[kr],this[Fe]);if(p)return this[cw]=!0,uw(p,A=>{this[kr]=A,this[ve]=A.value,this[wE]=A.version})}static getNewId(){let p=H?.type;if(p==="String"||p==="ID")return super.getNewId();if(!vt){let b=i.getEntry(Symbol.for("id_allocation")),D=b?.value,O;if(D&&D.nodeName===server.hostname&&(!kme(i)||D.pid===process.pid)){let B=D.start,k=D.end;O=B;for(let C of i.getKeys({start:k,end:B,limit:1,reverse:!0}))O=C}else D=R(b?.version??null),O=D.start;vt=new BigInt64Array([BigInt(O)+1n]),vt=new BigInt64Array(i.getUserSharedBuffer("id",vt.buffer)),vt.maxSafeId=D.end}let A=Number(Atomics.add(vt,0,1n)),w=p==="Int"?512:1048576;if(A+w>=vt.maxSafeId){let b=a(D=>{vt.maxSafeId=A+(p==="Int"?1023:4194303);let O=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,B=D?void 0:i.useReadTransaction(),k=Number(vt[0]);for(let x of i.getKeys({start:k+1,end:O,limit:1,transaction:B}))O=x;B?.done();let{value:C,version:F}=i.getEntry(Symbol.for("id_allocation"));if(vt.maxSafeId<O){if(C.end>vt.maxSafeId-100)return;qe.default.info?.("New id allocation",A,vt.maxSafeId,F),i.put(Symbol.for("id_allocation"),{start:C.start,end:vt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),F)}else{qe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${vt.maxSafeId}, but id of ${O} detected`);let x=R(F);x.alreadyUpdated||Atomics.store(vt,0,BigInt(x.start+1)),vt.maxSafeId=x.end}},"updateEnd");A+w===vt.maxSafeId?setImmediate(b):A+100>=vt.maxSafeId&&(qe.default.warn?.(`Synchronous id allocation required on table ${s}${p=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return A;function R(b){let D=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,O=D/4,B,k,C=!1,F,x;do{F=Math.floor(Math.random()*D),x={start:F,end:F+(p==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},B=0;for(let q of i.getKeys({start:F,limit:1,reverse:!0}))B=q;k=D;for(let q of i.getKeys({start:F+1,end:D,limit:1}))k=q;O*=.875,O<1e3&&!C&&(C=!0,qe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${p==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,F,B,k,O))}while(!(O<k-F&&(O<F-B||B===0)));return i.transactionSync(()=>{let q=i.getEntry(Symbol.for("id_allocation"));return(q?.version??null)==b?(qe.default.info?.("Allocated new id range",x),i.put(Symbol.for("id_allocation"),x,Date.now()),x):(qe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...q.value})})}}static setTTLExpiration(p){if(typeof p=="number")h=p*1e3,T||(T=0);else if(p&&typeof p=="object")h=p.expiration*1e3,T=(p.eviction||0)*1e3,Gr=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Gr=Gr||(h+T)/4,Ho()}static getResidencyRecord(p){return d.get([Symbol.for("residency_by_id"),p])}static setResidency(p){Ve.getResidency=p}static setResidencyById(p){Ve.getResidencyById=p}static getResidency(p,A,w){if(Ve.getResidencyById)return Ve.getResidencyById(p[t]);let R=Fa;if(A.replicateTo!=null){if(Array.isArray(A.replicateTo))return A.replicateTo.includes(server.hostname)?A.replicateTo:[server.hostname,...A.replicateTo];A.replicateTo>=0&&(R=A.replicateTo)}if(R>=0&&server.nodes){let b=[server.hostname];if(w)b.push(...w.slice(0,R));else{let D=server.nodes.map(k=>k.name),O=Math.floor(D.length*Math.random());b.push(...D.slice(O,O+R));let B=O+R-D.length;B>0&&b.push(...D.slice(0,B))}return b}}static enableAuditing(p=!0){m=p,p&&ie(),Ve.audit=p}static coerceId(p){return p===""?null:CT(p,H)}static async dropTable(){if(delete We[c][s],c===o){for(let p of S)d.remove(Ve.tableName+"/"+p.name),r[p.name]?.drop();d.remove(Ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));DE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[ai])return this.search(p);if(this[ze]===null){if(p?.conditions)return this.search(p);let A=Ve.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Fe]?.returnNonexistent)return this}allowRead(p,A){let w=Va(p);if(w?.read){if(w.isSuperUser)return!0;let R=w.attribute_permissions,b=A?.select;if(R?.length>0||Cd&&b){if(A||(A={}),b){let D=R?.length>0&&lw(R,"read");A.select=b.map(O=>{let B=O.name||O;if(!D||D[B]){let k=wn[B]?.definition?.tableClass;if(k){if(O.name||(O={name:O}),!k.prototype.allowRead.call(null,p,O))return!1;if(!O.select)return O.name}return O}}).filter(Boolean)}else A.select=R.filter(D=>D.read&&!wn[D.attribute_name]).map(D=>D.attribute_name);return A}else return!0}}allowUpdate(p,A){let w=Va(p);if(w?.update){let R=w.attribute_permissions;if(R?.length>0){let b=lw(R,"update");for(let D in A)if(!b[D])return!1;for(let D of R){let O=D.attribute_name;!D.update&&!(O in A)&&(A[O]=this.getProperty(O))}}return Ka(this[Fe])}}allowCreate(p,A){if(this[ai]){let w=Va(p);if(w?.insert){let R=w.attribute_permissions;if(R?.length>0){let b=lw(R,"insert");for(let D in A)if(!b[D])return!1;return Ka(this[Fe])}else return Ka(this[Fe])}}else return this.allowUpdate(p,{})}allowDelete(p){return Va(p)?.delete&&Ka(this[Fe])}update(p,A){if(!Ir(this[Fe]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let R;return typeof p=="object"&&p&&(A?(Object.isFrozen(p)&&(p={...p}),this[ve]={},this[_r]=p):(R=this[_r],R&&(p=Object.assign(R,p)),this[_r]=R=p)),this._writeUpdate(this[_r],A),this}addTo(p,A){if(typeof A=="number"||typeof A=="bigint")this[IE]===GY?this.set(p,(+this.getProperty(p)||0)+A):(this[IE]||this.update(),this.set(p,new yT(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,A){if(typeof A=="number")return this.addTo(p,-A);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[kr]}invalidate(){this._writeInvalidate()}_writeInvalidate(p){let A=this[Fe],w=this[ze];Yi(w),Ir(this[Fe]).addWrite({key:w,store:i,invalidated:!0,entry:this[kr],before:Ne.invalidate?.bind(this,A,w),beforeIntermediate:Me.invalidate?.bind(this,A,w),commit:a((b,D)=>{if(ui(b,D,p?.nodeId)<=0)return;let O=null;for(let B in r)O||(O={}),O[B]=this.getProperty(B);qe.default.trace?.(`Invalidating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),y(w,O,this[kr],b,Os,m,{user:A?.user,residencyId:p?.residencyId,nodeId:p?.nodeId},"invalidate")},"commit")})}_writeRelocate(p){let A=this[Fe],w=this[ze];Yi(w),Ir(this[Fe]).addWrite({key:w,store:i,invalidated:!0,entry:this[kr],before:Ne.relocate?.bind(this,A,w),beforeIntermediate:Me.relocate?.bind(this,A,w),commit:a((b,D)=>{if(ui(b,D,p?.nodeId)<=0)return;let O=Ve.getResidencyRecord(p.residencyId),B=0,k=null,C=D?.value;if(O&&!O.includes(server.hostname)){for(let F in r)k||(k={}),k[F]=C(F);B=Os}else k=C;qe.default.trace?.(`Relocating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),y(w,k,this[kr],b,B,m,{user:A.user,residencyId:p.residencyId,nodeId:p.nodeId,expiresAt:p.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(p,A){let w={previousResidency:this.getResidencyRecord(p.residencyId),isRelocation:!0},R=this.getResidency(A.value,w),b;if(R){if(!Array.isArray(R))throw new Error("Residency must be an array, but was: "+R);if(!R.includes(server.hostname))return;b=tt(R)}let O=y(p.key,A.value,p,p.version,0,!0,{residencyId:b,expiresAt:A.expiresAt},"relocate",!1,null)}static evict(p,A,w){let R=this.Source,b;if(!((U||m)&&(!A||(b=i.getEntry(p),!b||!A)||b.version!==w))){if(U){if(i.hasLock(p,b.version))return;let D;for(let O in r)D||(D={}),D[O]=A[O];if(D)return y(p,D,b,w,ya,null,null,null,!0)}return i.ifVersion(p,w,()=>{qa(p,A,null)}),m?y(p,null,b,w,ya,null,null,null,!0):i.remove(p,w)}}lock(){throw new Error("Not yet implemented")}static operation(p,A){return p.table||=s,p.schema||=c,zY.operation(p,A)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,A,w){let R=this[Fe],b=Ir(R),D=this[ze];Yi(D);let O=this[kr];this[IE]=A?GY:Ume;let B={key:D,store:i,entry:O,nodeName:R?.nodeName,validate:a(k=>{p||(p=this[_r]),A||p&&AT(this[_r]===p?this:p)?R?.source||(b.checkOverloaded(),this.validate(p,!A),V&&(p[V.name]=V.type==="Date"?new Date(k):V.type==="String"?new Date(k).toISOString():k),A&&(t&&p[t]!==D&&(p[t]=D),Y&&(O?.value?p[Y.name]=O?.value[Y.name]:p[Y.name]=Y.type==="Date"?new Date(k):Y.type==="String"?new Date(k).toISOString():k),p=hl(p))):b.removeWrite(B)},"validate"),before:A?Ne.put?()=>Ne.put(R,D,p):null:Ne.patch?()=>Ne.patch(R,D,p):Ne.put?()=>Ne.put(R,D,hl(this)):null,beforeIntermediate:A?Me.put?()=>Me.put(R,D,p):null:Me.patch?()=>Me.patch(R,D,p):Me.put?()=>Me.put(R,D,hl(this)):null,commit:a((k,C,F)=>{if(F){if(R&&C?.version>(R.lastModified||0)&&(R.lastModified=C.version),this[kr]=C,C?.value?.[ve])throw new Error("Can not assign a record to a record, check for circular references");A||(this[ve]=C?.value??null)}this[_r]=void 0,this[wE]=k;let x=C?.value,q=p;this[IE]=0;let ee=ui(k,C,w?.nodeId),G;if(ee<=0)if(m){let K=C.localTime,ge=C.version;qe.default.trace?.("Applying CRDT update to record with id: ",D,"applying later update:",ge);let Be=[];for(;K>k||ge>=k&&K>0;){let we=l.get(K);if(!we)break;let ce=xt(we);if(ge=ce.version,ge>=k){if(ge===k){if(ee=ui(k,{version:ge,localTime:K},w?.nodeId),ee===0)return;if(ee>0)continue}if(ce.type==="patch")Be.push(ce),G=p;else if(ce.type==="put"||ce.type==="delete")return}K=ce.previousLocalTime}Be.sort((we,ce)=>we.version-ce.version);for(let we of Be){let ce=we.getValue(i);if(q=TT(q,ce,A),qe.default.debug?.("Rebuilding update with future patch:",q),!q)return}}else{if(A)return;q=TT(q,x,A),qe.default.debug?.("Rebuilding update without audit:",q)}let Re;if(A?Re=q:(this[ve]=x,Re=hl(this,q)),this[ve]=Re,Re?.[ve])throw new Error("Can not assign a record to a record, check for circular references");let Ee;if(w?.residencyId!=null)Ee=w.residencyId;else{O?.residencyId&&(R.previousResidency=Ve.getResidencyRecord(O.residencyId));let K=Ve.getResidency(Re,R);if(K){if(!Array.isArray(K))throw new Error("Residency must be an array, got: "+K);K.includes(server.hostname)||K.push(server.hostname)}Ee=tt(K)}A||(G=p);let Ae=R?.expiresAt??(h?h+Date.now():-1);qe.default.trace?.(`Saving record with id: ${D}, timestamp: ${new Date(k).toISOString()}${Ae?", expires at: "+new Date(Ae).toISOString():""}${C?", replaces entry from: "+new Date(C.version).toISOString():", new entry"}`,Re),qa(D,x,Re);let te=A?"put":"patch";y(D,Re,C,k,0,m,{user:R?.user,residencyId:Ee,expiresAt:Ae,nodeId:w?.nodeId,originatingOperation:R?.originatingOperation},te,!1,G),R.expiresAt&&Ho()},"commit")};b.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[ai]){for await(let A of this.search(p))(await Ve.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[ve]?this._writeDelete(p):!1}_writeDelete(p){let A=Ir(this[Fe]),w=this[ze];Yi(w);let R=this[Fe];return A.addWrite({key:w,store:i,resource:this,nodeName:R?.nodeName,before:Ne.delete?.bind(this,R,w),beforeIntermediate:Me.delete?.bind(this,R,w),commit:a((b,D,O)=>{let B=D?.value;O&&(R&&D?.version>(R.lastModified||0)&&(R.lastModified=D.version),DT(this,D)),!(ui(b,D,p?.nodeId)<=0)&&(qa(this[ze],B),qe.default.trace?.(`Deleting record with id: ${w}, txn timestamp: ${new Date(b).toISOString()}`),m||g?(y(w,null,this[kr],b,0,m,{user:R?.user,nodeId:p?.nodeId},"delete"),m||Ho()):i.remove(this[ze]))},"commit")}),!0}search(p){let A=this[Fe],w=Ir(A);if(!p)throw new Error("No query provided");let R=p.conditions;R?R.length===void 0&&(R=R[Symbol.iterator]?Array.from(R):[R]):R=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[ze]&&(R=[{attribute:null,comparator:Array.isArray(this[ze])?"prefix":"starts_with",value:this[ze]}].concat(R));let b,D={};function O(K,ge){let Be;switch(ge){case"and":case void 0:if(K.length<1)throw new Error('An "and" operator requires at least one condition');Be=!0;break;case"or":if(K.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let we of K){if(we.conditions){we.conditions=O(we.conditions,we.operator);continue}let ce=we[0]??we.attribute,Ye=ce==null?H:Mi(S,ce);if(Ye)(Ye.type||fN[we.comparator])&&(we[1]===void 0?we.value=k(we.value,Ye):we[1]=k(we[1],Ye));else if(ce!=null)throw(0,Or.handleHDBError)(new Error,`${ce} is not a defined attribute`,404);if(we.chainedConditions)if(we.chainedConditions.length===1&&(!we.operator||we.operator=="and")){let rt=we.chainedConditions[0],Ze,st;if(rt.comparator==="gt"||rt.comparator==="greater_than"||rt.comparator==="ge"||rt.comparator==="greater_than_equal"?(Ze=we,st=rt):(Ze=rt,st=we),Ze.comparator!=="lt"&&Ze.comparator!=="less_than"&&Ze.comparator!=="le"&&Ze.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Bt=st.comparator==="ge"||st.comparator==="greater_than_equal",xo=Ze.comparator==="le"||Ze.comparator==="less_than_equal";we.comparator=(Bt?"ge":"gt")+(xo?"le":"lt"),we.value=[st.value,Ze.value]}else throw new Error("Multiple chained conditions are not currently supported")}return K}a(O,"prepareConditions");function B(K,ge){if(p.enforceExecutionOrder)return K;for(let Be of K)Be.conditions&&(Be.conditions=B(Be.conditions,Be.operator));return K.length>1&&ge!=="or"?(0,WY.sortBy)(K,fS(Ve)):K}a(B,"orderConditions");function k(K,ge){return Array.isArray(K)?K.map(Be=>CT(Be,ge)):CT(K,ge)}a(k,"coerceTypedValues");let C=p.operator;(R.length>0||C)&&(R=O(R,C));let F=typeof p.sort=="object"&&p.sort,x;if(F&&C!=="or"){let K=F.attribute;if(K==null)throw new Or.ClientError("Sort requires an attribute");if(b=R.find(ge=>Zu(ge.attribute)===Zu(K)),!b){let ge=Mi(S,K);if(!ge)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(K)?K.join("."):K} is not a defined attribute`,404);if(ge.indexed)b={attribute:K,comparator:"sort"},R.push(b);else if(R.length===0&&!p.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(K)?K.join("."):K} is not indexed and not combined with any other conditions`,404)}b&&(b.descending=!!F.descending)}R=B(R,C),F&&(b&&R[0]===b?F.next&&(x={dbOrderedAttribute:F.attribute,attribute:F.next.attribute,descending:F.next.descending,next:F.next.next}):(b&&R.splice(R.indexOf(b),1),x=F));let q=p.select;if(R.length===0&&(R=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:R,operator:C,postOrdering:x,selectApplied:!!q};let ee=w.useReadTxn(),G=EN(R,C,Ve,ee,p,A,(K,ge)=>Pd(K,q,A,ee,ge),D),Re=p.ensureLoaded!==!1;x||(G=te(G));let Ee=Ve.transformEntryForSelect(q,A,ee,D,Re,!0),Ae=Ve.transformToOrderedSelect(G,q,x,ee,A,Ee);function te(K){return p.offset||p.limit!==void 0?K.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):K}return a(te,"applyOffset"),x&&(Ae=te(Ae)),Ae.onDone=()=>{Ae.onDone=null,w.doneReadTxn()},Ae.selectApplied=!0,Ae.getColumns=()=>{if(q){let K=[];for(let ge of q)ge==="*"?K.push(...S.map(Be=>Be.name)):K.push(ge.name||ge);return K}return S.filter(K=>!K.computed&&!K.relationship).map(K=>K.name)},Ae}static transformToOrderedSelect(p,A,w,R,b,D){let O=new Us;if(w){p=Pd(p,A,R,b,null);let B;O.iterate=function(){let C,F=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),x,q=w.dbOrderedAttribute,ee,G,Re=!0;function Ee(te){let K=te.next&&Ee(te.next),ge=te.descending;return(Be,we)=>{let ce=Nl(Be,te.attribute,R),Ye=Nl(we,te.attribute,R),rt=ge?(0,Sl.compareKeys)(Ye,ce):(0,Sl.compareKeys)(ce,Ye);return rt===0?K?.(Be,we)||0:rt}}a(Ee,"createComparator");let Ae=Ee(w);return{async next(){let te;if(C)if(te=C.next(),te.done){if(x)return O.onDone&&O.onDone(),te}else return{value:await D.call(this,te.value)};B=[],ee&&B.push(ee);do if(te=await F.next(),te.done){if(x=!0,B.length)break;return O.onDone&&O.onDone(),te}else{let K=te.value;if(K?.then&&(K=await K),q){let ge=Nl(K,q,R);if(Re)Re=!1,G=ge;else if(ge!==G){G=ge,ee=K;break}}B.push(K)}while(!0);return w.isGrouped,B.sort(Ae),C=B[Symbol.iterator](),te=C.next(),te.done?(O.onDone&&O.onDone(),te):{value:await D.call(this,te.value)}},return(){O.onDone&&O.onDone(),F.return()},throw(){O.onDone&&O.onDone(),F.throw()}}};let k=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let F=0;F<A.length;F++){let x=A[F],q;if(x.name===C.attribute[0]){for(q=x.sort||(x.sort={});q.next;)q=q.next;q.attribute=C.attribute.slice(1),q.descending=C.descending}else x===C.attribute[0]&&(A[F]=q={name:x,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&k(C.next)},"applySortingOnSelect");k(w)}else O.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),O=O.map(function(B){try{let k=D.call(this,B);return typeof k?.catch=="function"?k.catch(C=>{throw C.partialObject={[t]:B.key},C}):k}catch(k){throw k.partialObject={[t]:B.key},k}});return O}static transformEntryForSelect(p,A,w,R,b,D){if(p&&(p===t||p?.length===1&&p[0]===t&&Array.isArray(p))){let C=a(F=>(A?.transaction?.stale&&(A.transaction.stale=!1),F?.key??F),"transform");return p===t?C:p.asArray?F=>[C(F)]:F=>({[t]:C(F)})}let O;b&&U&&!(typeof p=="string"?[p]:p)?.every(C=>{let F;return typeof C=="object"?F=C.name:F=C,r[F]||F===t})&&(O=!0);let B,k=a(function(C){let F;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(F=C.value||C.deref?.()?.value,!F&&(C.key===void 0||C.deref)||C.metadataFlags&Os){if(C.metadataFlags&Os&&A.replicateFrom===!1&&D&&C.residencyId)return Ba.SKIP;if(C=$a(C.key??C,A,{transaction:w,lazy:p?.length<4,ensureLoaded:b},this?.isSync,x=>x),C?.then)return C.then(k.bind(this));F=C?.value}if(O&&C?.metadataFlags&(Os|ya)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(A.onlyIfCached&&A.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let x=Dd(C.key??C,C,A);if(x?.then)return x.then(k)}}if(F==null)return D?Ba.SKIP:F;if(p&&!(p[0]==="*"&&p.length===1)){let x,q=a((G,Re)=>{let Ee;typeof G=="object"?Ee=G.name:Ee=G;let Ae=wn?.[Ee],te;if(Ae){let K=R?.[Ee];if(K)if(K.hasMappings){let Be=Ae.from?F[Ae.from]:Zu(C.key);te=K.get(Be),te||(te=[])}else te=K.fromRecord?.(F);else te=Ae(F,A,C);let ge=a(Be=>{if(Be&&typeof Be=="object"){let we=Ae.definition?.tableClass||Ve;B||(B={});let ce=B[Ee]||(B[Ee]=we.transformEntryForSelect(Ee===G?null:G.select||(Array.isArray(G)?G:null),A,w,K,b));if(Array.isArray(Be)){let Ye=[],rt=we.transformToOrderedSelect(Be,G.select,typeof G.sort=="object"&&G.sort,A,w,ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ze=a(Bt=>{for(;!Bt.done;){if(Bt?.then)return Bt.then(Ze);Ye.push(Bt.value),Bt=rt.next()}Re(Ye,Ee)},"nextValue"),st=Ze(rt.next());st&&(x||(x=[]),x.push(st));return}else if(Be=ce.call(this,Be),Be?.then){x||(x=[]),x.push(Be.then(Ye=>Re(Ye,Ee)));return}}Re(Be,Ee)},"handleResolvedValue");te?.then?(x||(x=[]),x.push(te.then(ge))):ge(te);return}else te=F[Ee],te&&typeof te=="object"&&Ee!==G&&(te=Ve.transformEntryForSelect(G.select||G,A,w,null)({value:te}));Re(te,Ee)},"selectAttribute"),ee;if(typeof p=="string")q(p,G=>{ee=G});else if(Array.isArray(p))if(p.asArray)ee=[],p.forEach((G,Re)=>{G==="*"?p[Re]=F:q(G,Ee=>ee[Re]=Ee)});else{ee={};let G=p.forceNulls;for(let Re of p)if(Re==="*")for(let Ee in F)ee[Ee]=F[Ee];else q(Re,(Ee,Ae)=>{Ee===void 0&&G&&(Ee=null),ee[Ae]=Ee})}else throw new Or.ClientError("Invalid select"+p);return x?Promise.all(x).then(()=>ee):ee}return F},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");m||Et({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),p||(p={});let A=!p.rawEvents,w=[],R=this,b=QR(Ve,this[ze]??null,function(O,B,k,C){try{let F=B.getValue?.(i,A),x=B.type;if(!F&&x==="patch"&&A){let ee=i.getEntry(O);ee?.version===B.version?F=ee.value:F=B.getValue?.(i,!0,k),x="put"}let q={id:O,localTime:k,value:F,version:B.version,type:x,beginTxn:C};w?w.push(q):this.send(q)}catch(F){qe.default.error?.(F)}},p.startTime||0,p),D=(async()=>{this[ai]&&(b.includeDescendants=!0,p.onlyChildren&&(b.onlyChildren=!0)),p.supportsTransactions&&(b.supportsTransactions=!0);let O=this[ze],B=p.previousCount;B>1e3&&(B=1e3);let k=p.startTime;if(this[ai]){if(k){if(B)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:F}of l.getRange({start:k,exclusiveStart:!0,snapshot:!1})){let x=xt(F);if(x.tableId!==n)continue;let q=x.recordId;if(O==null||KY(O,q)){let ee=x.getValue(i,A,C);if(b.send({id:q,localTime:C,value:ee,version:x.version,type:x.type}),b.queue?.length>$Y&&await b.waitForDrain()===!1)return}b.startTime=C}}else if(B){let C=[];for(let{key:F,value:x}of l.getRange({start:"z",end:!1,reverse:!0}))try{let q=xt(x);if(q.tableId!==n)continue;let ee=q.recordId;if(O==null||KY(O,ee)){let G=q.getValue(i,A,F);if(C.push({id:ee,localTime:F,value:G,version:q.version,type:q.type}),--B<=0)break}}catch(q){qe.default.error("Error getting history entry",F,q)}for(let F=C.length;F>0;)b.send(C[--F]);C[0]&&(b.startTime=C[0].localTime)}else if(!p.omitCurrent){for(let{key:C,value:F,version:x,localTime:q}of i.getRange({start:O??!1,end:O==null?void 0:[O,Sl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(F&&(b.send({id:C,localTime:q,value:F,version:x,type:"put"}),b.queue?.length>$Y&&await b.waitForDrain()===!1))return}}else{B&&!k&&(k=0);let C=this[kr]?.localTime;if(C===Gg&&(i.cache?.delete(O),this[kr]=i.getEntry(O),qe.default.trace?.("re-retrieved record",C,this[kr]?.localTime),C=this[kr]?.localTime),qe.default.trace?.("Subscription from",k,"from",O,C),k<C){let F=[],x=C;do{let q=l.get(x);if(q){p.omitCurrent=!0;let ee=xt(q),G=ee.getValue(i,A,x);A&&(ee.type="put"),F.push({id:O,value:G,localTime:x,...ee}),x=ee.previousLocalTime}else break;B&&B--}while(x>k&&B!==0);for(let q=F.length;q>0;)b.send(F[--q]);b.startTime=C}!p.omitCurrent&&this.doesExist()&&b.send({id:O,localTime:C,value:this[ve],version:this[wE],type:"put"})}for(let C of w)b.send(C);w=null})();return p.listener&&b.on("data",p.listener),b}static subscribeOnThisThread(p,A){return p===0||A?.crossThreads===!1}doesExist(){return!!(this[ve]||this[IE])}publish(p,A){this._writePublish(p,A)}_writePublish(p,A){let w=Ir(this[Fe]),R=this[ze]||null;R!=null&&Yi(R);let b=this[Fe];w.addWrite({key:R,store:i,entry:this[kr],nodeName:b?.nodeName,validate:a(()=>{b?.source||(w.checkOverloaded(),this.validate(p))},"validate"),before:Ne.publish?.bind(this,b,R,p),beforeIntermediate:Me.publish?.bind(this,b,R,p),commit:a((D,O,B)=>{O===void 0&&g&&!m&&Ho(),qe.default.trace?.(`Publishing message to id: ${R}, timestamp: ${new Date(D).toISOString()}`),y(R,O?.value??null,O,O?.version||D,0,!0,{user:b?.user,residencyId:A?.residencyId,expiresAt:b?.expiresAt,nodeId:A?.nodeId},"message",!1,p)},"commit")})}validate(p,A){let w,R=a((b,D,O)=>{if(D.type&&b!=null)if(A&&b.__op__&&(b=b.value),D.properties){typeof b!="object"&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be an object${D.type?" ("+D.type+")":""}`);let B=D.properties;for(let k=0,C=B.length;k<C;k++){let F=B[k],x=R(b[F.name],F,O+"."+F.name);x&&(b[F.name]=x)}if(D.sealed&&b!=null&&typeof b=="object")for(let k in b)B.find(C=>C.name===k)||(w||(w=[])).push(`Property ${k} is not allowed within object in property ${O}`)}else switch(D.type){case"Int":(typeof b!="number"||b>>0!==b)&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(B=>typeof B=="string")||(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a string`);break;case"Boolean":typeof b!="boolean"&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(D.elements)for(let B=0,k=b.length;B<k;B++){let C=b[B],F=R(C,D.elements,O+"[*]");F&&(b[B]=F)}}else(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a Buffer or Uint8Array`);break}D.nullable===!1&&b==null&&(w||(w=[])).push(`Property ${O} is required (and not does not allow null values)`)},"validateValue");for(let b=0,D=S.length;b<D;b++){let O=S[b];if(!(O.relationship||O.computed)&&(!A||O.name in p)){let B=R(p[O.name],O,O.name);B&&(p[O.name]=B)}}if(_)for(let b in p)S.find(D=>D.name===b)||(w||(w=[])).push(`Property ${b} is not allowed`);if(w)throw new Or.ClientError(w.join(". "))}getUpdatedTime(){return this[wE]}wasLoadedFromSource(){return U?!!this[cw]:void 0}static async addAttributes(p){let A=S.slice(0);for(let w of p){if(!w.name)throw new Or.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,jY.validateAttribute)(w.name),A.push(w)}return Et({table:s,database:c,schemaDefined:u,attributes:A}),Ve.indexingOperation}static async removeAttributes(p){let A=S.filter(w=>!p.includes(w.name));return Et({table:s,database:c,schemaDefined:u,attributes:A}),Ve.indexingOperation}static getSize(){let p=i.getStats();return(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getAuditSize(){let p=l?.getStats();return p&&(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getRecordCount(p){let A=i.getStats().entryCount,w=1e3/2,R=performance.now(),b=Math.floor(A/2),D=p?.exactCount,O=0,B=0,k;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&O++,B++,!D&&B<b&&performance.now()-R>w){k=B;break}if(k){let C=O;O=0;for(let{value:te}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:k}))te!=null&&O++;let F=k*2,x=(O+C)/F,q=Math.pow((O-C+1)/k/2,2)+x*(1-x)/F,ee=Math.max(Math.sqrt(q)*A,1),G=Math.round(x*A),Re=Math.max(G-1.96*ee,O+C),Ee=Math.min(G+1.96*ee,A),Ae=Math.pow(10,Math.round(Math.log10(ee)));return Ae>G&&(Ae=Ae/10),O=Math.round(G/Ae)*Ae,{recordCount:O,estimatedRange:[Math.round(Re),Math.round(Ee)]}}return{recordCount:O}}static updatedAttributes(){wn=this.propertyResolvers={$id:a((p,A,w)=>({value:w.key}),"$id"),$updatedtime:a((p,A,w)=>w.version,"$updatedtime"),$record:a((p,A,w)=>w?{value:p}:p,"$record")};for(let p of this.attributes){p.resolve=null;let A=p.relationship,w=p.computed;if(A)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),w&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Cd=!0,A.to)p.elements?.definition?(wn[p.name]=p.resolve=(R,b,D)=>{let O=R[A.from?A.from:t],B=p.elements.definition.tableClass;return D?Xu({attribute:A.to,value:O},Ir(b).getReadTxn(),!1,B,!1).asArray:B.search([{attribute:A.to,value:O}],b).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,A.from&&(p.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let R=p.definition||p.elements?.definition;R?(wn[p.name]=p.resolve=(b,D,O)=>{let B=b[A.from];if(B!==void 0){if(p.elements){let k,C=B?.map(F=>{let x=O?R.tableClass.primaryStore.getEntry(F,{transaction:Ir(D).getReadTxn()}):R.tableClass.get(F,D);return x?.then&&(k=!0),x});return A.filterMissing?k?Promise.all(C).then(F=>F.filter(YY)):C.filter(YY):k?Promise.all(C):C}return O?R.tableClass.primaryStore.getEntry(B,{transaction:Ir(D).getReadTxn()}):R.tableClass.get(B,D)}},p.set=(b,D)=>{if(Array.isArray(D)){let O=D.map(B=>B[ze]||B[R.tableClass.primaryKey]);b[A.from]=O}else{let O=D[ze]||D[R.tableClass.primaryKey];b[A.from]=O}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=A.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`);else w&&(typeof w.from=="function"&&this.setComputedAttribute(p.name,w.from),wn[p.name]=p.resolve=(R,b,D)=>{let O=typeof w.from=="string"?R[w.from]:R,B=this.userResolvers[p.name];if(B)return B(O,b,D);qe.default.warn(`Computed attribute "${p.name}" does not have a function assigned to it. Please use setComputedAttribute('${p.name}', resolver) to assign a resolver function.`),this.userResolvers[p.name]=()=>{}})}bT(this,this)}static setComputedAttribute(p,A){let w=Mi(S,p);if(!w){console.error(`The attribute "${p}" does not exist in the table "${s}"`);return}if(!w.computed){console.error(`The attribute "${p}" is not defined as computed in the table "${s}"`);return}this.userResolvers[p]=A}static async deleteHistory(p=0,A=!1){let w;for(let{key:R,value:b}of l.getRange({start:0,end:p}))await Td(),xt(b).tableId===n&&(w=pT(l,R,b));if(A)for(let{key:R,value:b,localTime:D}of i.getRange({start:0,versions:!0}))await Td(),b===null&&D<p&&(w=i.remove(R));await w}static async*getHistory(p=0,A=1/0){for(let{key:w,value:R}of l.getRange({start:p||1,end:A})){await Td();let b=xt(R);b.tableId===n&&(yield{id:b.recordId,localTime:w,version:b.version,type:b.type,value:b.getValue(i,!0,w),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(p){let A=[];if(p==null)throw new Error("An id is required");let w=i.getEntry(p);if(!w)return A;let R=w.localTime;if(!R)throw new Error("The entry does not have a local audit time");let b=0;do{await Td();let D=l.get(R);if(D){let O=xt(D);A.push({id:O.recordId,localTime:R,version:O.version,type:O.type,value:O.getValue(i,!0,R),user:O.user}),R=O.previousLocalTime}else break}while(b<1e3&&R);return A.reverse()}static cleanup(){Q?.remove()}}Ve.updatedAttributes();let ss=Ve.prototype;return ss[Mme]=!0,h&&Ve.setTTLExpiration(h/1e3),ne&&Se(),Ve;function qa(v,p,A){let w;for(let R in r){let b=r[R],D=b.isIndexing,O=wn[R],B=A&&(O?O(A):A[R]),k=p&&(O?O(p):p[R]);if(B===k&&!D)continue;w=!0;let C=b.indexNulls,F=(0,CE.getIndexedValues)(B,C),x=(0,CE.getIndexedValues)(k,C);if(x?.length>0){let q=new Set(x);if(F=F?F.filter(ee=>{if(q.has(ee))q.delete(ee);else return!0}):[],x=Array.from(q),(x.length>0||F.length>0)&&FY){let ee=x.concat(F).map(G=>({key:G,value:v}));b.prefetch(ee,VY)}for(let ee=0,G=x.length;ee<G;ee++)b.remove(x[ee],v)}else F?.length>0&&FY&&b.prefetch(F.map(q=>({key:q,value:v})),VY);if(F)for(let q=0,ee=F.length;q<ee;q++)b.put(F[q],v)}return w}a(qa,"updateIndices");function Yi(v){switch(typeof v){case"number":return!0;case"string":if(v.length<659)return!0;if(v.length>qY)throw new Error("Primary key size is too large: "+v.length);break;case"object":if(v===null)throw new Error("Invalid primary key of null");break;case"bigint":if(v<2n**64n&&v>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof v)}if((0,Sl.writeKey)(v,vme,0)>qY)throw new Error("Primary key size is too large: "+v.length);return!0}a(Yi,"checkValidId");function $a(v,p,A,w,R){if(Ve.getResidencyById&&A.ensureLoaded&&p?.replicateFrom!==!1){let D=Ve.getResidencyById(v);if(D&&!D.includes(server.hostname)&&I)return I({key:v,residency:D}).then(R)}let b=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),A.transaction?.isDone)return R(null,v);let D=i.getEntry(v,A);return D?.residencyId&&D.metadataFlags&Os&&I&&A.ensureLoaded&&p?.replicateFrom!==!1?I(D).then(O=>R(O,v)):(D&&p&&(D?.version>(p.lastModified||0)&&(p.lastModified=D.version),D?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=D.localTime)),R(D,v))},"whenPrefetched");return w?b():ae>0?(ae--,b()):new Promise((D,O)=>{ae===0?(ae--,i.prefetch([v],()=>{B(),k()})):(de.push(v),W.push(k),de.length>YE&&(ae--,B()));function B(){if(de.length>0){let C=W;i.prefetch(de,()=>{ae===-1?B():ae++;for(let F of C)F()}),de=[],W=[],Oe>2&&Oe--}else ae=Oe,Oe<vs&&Oe++}a(B,"prefetch");function k(){try{D(b())}catch(C){O(C)}}a(k,"load")})}a($a,"loadLocalRecord");function Va(v){if(!v?.role)return;let p=v.role.permission;if(p.super_user)return Bme;let A=p[c],w,R=A?.tables;if(R)return R[s];if(c==="data"&&(w=p[s])&&!w.tables)return w}a(Va,"getTablePermissions");function Dd(v,p,A,w){if(U){let R=!1;if(A.noCache?R=!0:(p?(!p.value||p.metadataFlags&(Os|ya)||p.expiresAt!=null&&p.expiresAt<Date.now())&&(R=!0):R=!0,qn(!R,"cache-hit",s)),R){let b=Ld(v,p,A).then(D=>(D?.value?.[ve]&&qe.default.error?.("Can not assign a record with a record property"),A&&(D?.version>(A.lastModified||0)&&(A.lastModified=D.version),A.lastRefreshed=Date.now()),D));if(A?.onlyIfCached||p?.value&&w?.allowStaleWhileRevalidate?.(p,v)){if(b.catch(D=>qe.default.warn?.(D)),A?.onlyIfCached&&!w.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return b}}else if(p?.value&&p.expiresAt!=null&&p.expiresAt<Date.now())return Ve.evict(p.key,p.value,p.version),p.value=null,{then(R){return R(p)}}}a(Dd,"ensureLoadedFromSource");function Ir(v){let p=v?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let A=p.next;if(!A)return p=p.next=new hc,p.lmdbDb=i,p;p=A}while(!0)}else return new np}a(Ir,"txnForContext");function Nl(v,p,A){if(!v)return;let w=v.value||i.getEntry(v.key)?.value;if(typeof p=="object"){let b=wn,D=w;for(let O=0,B=p.length;O<B;O++){let k=p[O],C=b?.[k];D=C&&D?C(D,A,!0)?.value:D?.[k],b=C?.definition?.tableClass?.propertyResolvers}return D}let R=wn[p];return R?R(w,A):w[p]}a(Nl,"getAttributeValue");function Pd(v,p,A,w,R){let b=R?.length,D={transaction:w,lazy:b>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},O;function B(k,C){let F=k?.value;if(!F)return Ba.SKIP;for(let x=0;x<b;x++)if(!O?.includes(x)&&!R[x](F,k))return Ba.SKIP;return C!==void 0&&(k.key=C),k}if(a(B,"processEntry"),b>0||!v.hasEntries){let k=v.map(C=>{if(O=null,typeof C=="object"&&C?.key!==void 0)return b>0?B(C):C;if(C==null)return Ba.SKIP;for(let F=0;F<b;F++){let q=R[F].idFilter;if(q){if(!q(C))return Ba.SKIP;O||(O=[]),O.push(F)}}return $a(C,A,D,!1,B)});return Array.isArray(v)&&(k=k.filter(C=>C!==Ba.SKIP)),k.hasEntries=!0,k}return v}a(Pd,"transformToEntries");function ui(v,p,A=server.replication?.getThisNodeId(l)){if(v<=p?.version){if(p?.version===v&&A!==void 0){let w=server.replication?.exportIdMapping(l),R=p.localTime,b=R&&l.get(R);if(b){let D,O,B=xt(b);for(let k in w)w[k]===A&&(D=k),w[k]===B.nodeId&&(O=k);if(D>O)return 1;if(D===O)return 0}}return-1}return 1}a(ui,"precedesExistingVersion");async function Ld(v,p,A){let w=p?.metadataFlags,R=p?.version,b,D;if(!i.attemptLock(v,R,()=>{clearTimeout(D);let C=i.getEntry(v);!C||!C.value||C.metadataFlags&(Os|ya)?b(Ld(v,i.getEntry(v),A)):b(C)}))return new Promise(C=>{b=C,D=setTimeout(()=>{i.unlock(v,R)},Lme)});let O=p?.value,B={requestContext:A,replacingRecord:O,replacingEntry:p,replacingVersion:R,noCacheStore:!1,source:null,resourceCache:A?.resourceCache},k=A?.responseHeaders;return new Promise((C,F)=>{let x;uw(Dt(B,async q=>{let ee=performance.now(),G,Re,Ee;try{for(let ge of Ve.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)){if(ge.available?.(p)===!1)continue;if(B.source=ge,G=await ge.get(v,B),G)break}Ee=w&Os;let te=B.lastModified||Ee&&R;Re=Ee||te>R||!O,te||(te=(0,CE.getNextMonotonicTime)());let K=performance.now()-ee;if(mr(K,"cache-resolution",s,null,"success"),k&&ym(k,"Server-Timing",`cache-resolve;dur=${K.toFixed(2)}`,!0),q.timestamp=te,h&&B.expiresAt==null&&(B.expiresAt=Date.now()+h),G){if(typeof G!="object")throw new Error("Only objects can be cached and stored in tables");if(G.status>0&&G.headers)if(G.status>=300)if(G.status===304)G=O,te=R;else throw new Or.ServerError(G.body||"Error from source",G.status);else G=G.body;typeof G.toJSON=="function"&&(G=G.toJSON()),t&&G[t]!==v&&(G[t]=v)}x=!0,C({key:v,version:te,value:G})}catch(te){te.message+=` while resolving record ${v} for ${s}`,O&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({key:v,version:R,value:O}),qe.default.trace?.(te.message,"(returned stale record)")):F(te);let K=performance.now()-ee;mr(K,"cache-resolution",s,null,"fail"),k&&ym(k,"Server-Timing",`cache-resolve;dur=${K.toFixed(2)}`,!0),B.transaction.abort();return}if(A?.noCacheStore||B.noCacheStore){B.transaction.abort();return}Ir(B).addWrite({key:v,store:i,entry:p,nodeName:"source",commit:a((te,K)=>{if(K?.version!==R)return;let ge=qa(v,O,G);G?(Me.put?.(B,v,G),qe.default.trace?.(`Writing resolved record from source with id: ${v}, timestamp: ${new Date(te).toISOString()}`),y(v,G,K,te,0,m&&Re||null,{user:B?.user,expiresAt:B.expiresAt},"put",!!Ee)):K&&(Me.delete?.(B,v),qe.default.trace?.(`Deleting resolved record from source with id: ${v}, timestamp: ${new Date(te).toISOString()}`),m||g?y(v,null,K,te,0,m&&Re||null,{user:B?.user},"delete",!!Ee):i.remove(v,R))},"commit")})}),()=>{i.unlock(v,R)},q=>{i.unlock(v,R),x&&qe.default.error?.("Error committing cache update",q)})})}a(Ld,"getFromSource");function Ka(v){if(!v||v.user?.role?.permission?.super_user)return!0;if(v.replicateTo)throw new Or.ClientError("Can not specify replication parameters without super user permissions",403);if(v.replicatedConfirmation)throw new Or.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Ka,"checkContextPermissions");function Ho(){if(Gr!==wd&&(wd=Gr,(0,ml.getWorkerIndex)()===(0,ml.getWorkerCount)()-1)){if(ka&&clearTimeout(ka),!Gr)return;let v=new Date;v.setMonth(0),v.setDate(1),v.setHours(0),v.setMinutes(0),v.setSeconds(0);let p=Math.ceil((Date.now()-v.getTime())/Gr)*Gr+v.getTime(),A=a(w=>{qe.default.trace?.(`Scheduled next cleanup scan at ${new Date(w)}ms`),ka=setTimeout(()=>X=X.then(async()=>{if(A(Math.max(w+Gr,Date.now())),i.rootStore.status!=="open"){clearTimeout(ka);return}let R=50,b=new Array(R),D=0;qe.default.info?.(`Starting cleanup scan for ${s}`);try{let O=0;for(let{key:B,value:k,version:C,expiresAt:F}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let x;k===null&&!m&&C+Pme<Date.now()?x=i.remove(B,C):F!=null&&F+T<Date.now()&&(x=Ve.evict(B,k,C),O++),x&&(await b[D],b[D]=x.catch(q=>{qe.default.error?.("Cleanup error",q)}),++D>=R&&(D=0)),await Td()}qe.default.info?.(`Finished cleanup scan for ${s}, evicted ${O} entries`)}catch(O){qe.default.warn?.(`Error in cleanup scan for ${s}:`,O)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");A(p)}}a(Ho,"scheduleCleanup");function ie(){Q=l?.addDeleteRemovalCallback(n,v=>{let p=i.getEntry(v);p?.value===null&&i.remove(v,p.version)})}a(ie,"addDeleteRemoval");function Se(){(0,ml.getWorkerIndex)()===0&&setInterval(async()=>{if(!Ol){Ol=!0;try{let v=ne.name,p=r[v];if(!p)throw new Error(`expiresAt attribute ${ne} must be indexed`);for(let A of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let w of p.getValues(A)){let R=i.getEntry(w);R?.value?R.value[v]<Date.now()&&Ve.evict(w,R.value,R.version):i.ifVersion(w,R?.version,()=>p.remove(A,w))}await Td()}}catch(v){qe.default.error?.("Error in evicting old records",v)}finally{Ol=!1}}},Dme).unref()}a(Se,"runRecordExpirationEviction");function tt(v){if(v){let p=v.join(","),A=d.get([Symbol.for("residency_by_set"),p]);return A||(d.put([Symbol.for("residency_by_set"),p],A=Math.floor(Math.random()*2147483647)),d.put([Symbol.for("residency_by_id"),A],v),A)}}a(tt,"getResidencyId")}function lw(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function VY(){}function Hme(e){zY=e}function CT(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return wT(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return wT(+e);case"Float":return e==="null"?null:wT(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;xme.test(e)||(e+="Z");let n=new Date(e);return wT(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,PT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function wT(e){if(isNaN(e))throw new SyntaxError;return e}function KY(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function uw(e,t,r){return e?.then?e.then(t,r):t(e)}function DT(e,t){e[kr]=t,e[ve]=t?.value??null,e[wE]=t?.version}function YY(e){return e!=null}function ci(e){try{return JSON.stringify(e)}catch{return e}}function kme(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ms,Ba,CE,WY,jY,gd,Or,DE,PE,qe,Sl,ml,PT,Cme,zY,Dme,Pme,FY,Lme,wE,Mme,kr,IE,GY,Ume,cw,Os,ya,vme,qY,$Y,Bme,AMe,xme,Td,Lf=Ie(()=>{Ms=L(M()),Ba=require("lmdb"),CE=L(sn()),WY=require("lodash"),jY=L(Wd());Vs();sp();gd=L(se());JR();Or=L(_e()),DE=L(eo()),PE=L(qs());De();tE();qe=L(Sc());ap();pc();Sl=require("ordered-binary"),ml=L(dt());ji();PT=L(re());Ll();Ii();mT();Of();Cme=new Uint8Array(9);Cme[8]=192;Dme=6e4,Pme=864e5;gd.initSync();FY=gd.get(Ms.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Lme=1e4,wE=Symbol.for("version"),Mme=Symbol.for("incremental-update"),kr=Symbol("entry"),IE=Symbol("is-saving"),GY=1,Ume=2,cw=Symbol("loaded-from-source"),Os=1,ya=8,vme=Buffer.allocUnsafeSlow(8192),qY=1978,$Y=100,Bme={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},AMe=(0,PT.convertToMS)(gd.get(Ms.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(LT,"makeTable");a(lw,"attributesAsObject");a(VY,"noop");a(Hme,"setServerUtilities");xme=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(CT,"coerceType");a(wT,"rejectNaN");a(KY,"isDescendantId");Td=a(()=>new Promise(setImmediate),"rest");a(uw,"when");a(DT,"updateResource");a(YY,"exists");a(ci,"stringify");a(kme,"hasOtherProcesses")});var lt={};je(lt,{database:()=>zl,databases:()=>We,dropDatabase:()=>BR,dropTableMeta:()=>Vme,getDatabases:()=>ut,getDefaultCompression:()=>Tm,getTables:()=>Fme,onRemovedDB:()=>z_,onUpdatedTable:()=>Nc,readMetaDb:()=>LE,resetDatabases:()=>Uu,table:()=>Et,tables:()=>jn});function Fme(){return BT||ut(),jn||{}}function ut(){if(BT)return We;BT=!0,yd=new Map;let e=(0,er.getHdbBasePath)()&&(0,Ut.join)((0,er.getHdbBasePath)(),yr.DATABASES_DIR_NAME),t=(0,er.get)(yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,rs.existsSync)(e)?e:(0,Ut.join)((0,er.getHdbBasePath)(),yr.LEGACY_DATABASES_DIR_NAME)),!e)return;if((0,rs.existsSync)(e))for(let n of(0,rs.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ut.basename)(n.name,".mdb");n.isFile()&&(0,Ut.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&LE((0,Ut.join)(e,n.name),null,s)}if((0,rs.existsSync)((0,Rd.getBaseSchemaPath)())){for(let n of(0,rs.readdirSync)((0,Rd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Ut.join)((0,Rd.getBaseSchemaPath)(),n.name),i=(0,Ut.join)((0,Rd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,rs.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Ut.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Ut.join)(i,o.name);LE((0,Ut.join)(s,o.name),(0,Ut.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,rs.existsSync)(i))for(let c of(0,rs.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Ut.extname)(c.name).toLowerCase()===".mdb"&&LE((0,Ut.join)(i,c.name),(0,Ut.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Ut.join)(l.path,(0,Ut.basename)(c+".mdb"));(0,rs.existsSync)(u)&&LE(u,c,n,null,!0)}}for(let n in We){let s=yd.get(n);if(s){let i=We[n];n.includes("delete")&&Vt.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(Vt.trace(`delete table class ${o}`),delete i[o])}else if(delete We[n],n==="data"){for(let i in jn)delete jn[i];delete jn[HT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(We.system)for(let n of r)We.system[n]&&(We.system[n].replicate=!1);return yd=null,We}function Uu(){BT=!1;for(let[,e]of Ha)e.needsDeletion=!0;ut();for(let[e,t]of Ha)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Ha.delete(e),delete We[t.databaseName],UE.forEach(r=>r(t.databaseName)));return We}function LE(e,t,r=fw,n,s){let i=new dw.default(e,!1);try{let o=Ha.get(e);o?o.needsDeletion=!1:(o=(0,bd.open)(i),Ha.set(e,o));let c=new Tl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(MT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,rs.existsSync)(n)&&(i.path=n,u=(0,bd.open)(i),u.isLegacy=!0):u=hT(o));let d=ZY(r),_=d[HT],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[T,m]=f.toString().split("/");m===""?m=h.name:m||(m=T,T=t,h.name||(h.name=m,h.indexed=!h.is_hash_attribute)),_?.add(T);let g=E.get(T);g||E.set(T,g={attributes:[]}),(m==null||h.is_hash_attribute)&&(g.primary=h),m!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:m}=h;if(!m){for(let W of T)if(W.is_hash_attribute||W.isPrimaryKey){m=W;break}if(!m){Vt.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`);continue}}let g=d[f],S={},y=[],I,U,H=typeof m.audit=="boolean"?m.audit:(0,er.get)(yr.CONFIG_PARAMS.LOGGING_AUDITLOG),X=m.trackDeletes,Y=m.expiration,V=m.eviction,ne=m.sealed,Q=m.splitSegments,de=m.replicate;if(g)S=g.indices,y=g.attributes,g.schemaVersion++;else{I=m.tableId,I?I>=(l.get(Ad)||0)&&(l.putSync(Ad,I+1),Vt.info(`Updating next table id (it was out of sync) to ${I+1} for ${f}`)):(m.tableId=I=l.get(Ad),I||(I=1),Vt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Ad,I+1),l.putSync(m.key,m));let W=new Tl.default(!m.is_hash_attribute,m.is_hash_attribute);if(W.compression=m.compression,W.compression){let ae=(0,er.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||XY;W.compression.threshold=ae}U=mh(o.openDB(m.key,W)),o.databaseName=r,U.rootStore=o,U.tableId=I}for(let W of T){W.attribute=W.name;try{if(!W.is_hash_attribute&&(W.indexed||W.attribute&&!W.name)){if(!S[W.name]){let Oe=new Tl.default(!W.is_hash_attribute,W.is_hash_attribute);S[W.name]=o.openDB(W.key,Oe),S[W.name].indexNulls=W.indexNulls}let ae=y.find(Oe=>Oe.name===W.name);ae?y.splice(y.indexOf(ae),1,W):y.push(W)}}catch(ae){Vt.error("Error trying to update attribute",W,y,S,ae)}}if(!g){g=eW(d,f,LT({primaryStore:U,auditStore:u,audit:H,sealed:ne,splitSegments:Q,replicate:de,expirationMS:Y&&Y*1e3,evictionMS:V&&V*1e3,trackDeletes:X,tableName:f,tableId:I,primaryKey:m.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:S,attributes:T,schemaDefined:m.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let W of ME)W(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function ZY(e){let t=We[e];if(t||(e==="data"?t=We[e]=jn:e==="system"?Object.defineProperty(We,"system",{value:t=Object.create(null),configurable:!0}):t=We[e]=Object.create(null)),yd&&!yd.has(e)){let r=new Set;t[HT]=r,yd.set(e,r)}return t}function eW(e,t,r){return e[t]=r,r}function zl({database:e,table:t}){e||(e=fw),ut();let r=ZY(e),n=(0,Ut.join)((0,er.getHdbBasePath)(),yr.DATABASES_DIR_NAME),s=(0,er.get)(yr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,er.get)(yr.CONFIG_PARAMS.STORAGE_PATH)||((0,rs.existsSync)(n)?n:(0,Ut.join)((0,er.getHdbBasePath)(),yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Ut.join)(n,(i?t:e)+".mdb"),c=Ha.get(o);if(!c||c.status==="closed"){let l=new dw.default(o,!1);c=(0,bd.open)(l),Ha.set(o,c)}return c.auditStore||(c.auditStore=hT(c)),c}async function BR(e){if(!We[e])throw new Error("Schema does not exist");let t=We[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Ha.delete(r.path),r.status==="open"&&(await r.close(),await vE.remove(r.path));if(r||(r=zl({database:e,table:null}),r.status==="open"&&(await r.close(),await vE.remove(r.path))),e==="data"){for(let n in jn)delete jn[n];delete jn[HT]}delete We[e],UE.forEach(n=>n(e))}function Et(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:_,schemaDefined:E,origin:f}=e;r||(r=fw);let h=zl({database:r,table:t}),T=We[r];Vt.trace(`Defining ${t} in ${r}`);let m=T?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let g,S,y;E==null&&(E=!0);let I=new Tl.default(!1);for(let Q of o)Q.attribute&&!Q.name?(Q.name=Q.attribute,Q.indexed=!0):Q.attribute=Q.name,Q.expiresAt&&(Q.indexed=!0);let U,H;if(m){if(g=m.primaryKey,m.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=m.splitSegments),m.attributes.splice(0,m.attributes.length,...o)}else{let Q=h.auditStore;S=o.find(Oe=>Oe.isPrimaryKey)||{},g=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=E,S.compression=Tm(),_&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,er.get)(yr.CONFIG_PARAMS.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),S.splitSegments=!1,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),f&&(S.origins?S.origins.includes(f)||S.origins.push(f):S.origins=[f]),Vt.trace(`${t} table loading, opening primary store`);let de=new Tl.default(!1,!0);de.compression=S.compression;let W=t+"/";if(y=h.dbisDb=h.openDB(MT.INTERNAL_DBIS_NAME,I),ne(),y.get(W))return H&&H(),Uu(),Et(e);let ae=mh(h.openDB(W,de));h.databaseName=r,ae.rootStore=h,ae.tableId=y.get(Ad),Vt.trace(`Assigning new table id ${ae.tableId} for ${t}`),ae.tableId||(ae.tableId=1),y.put(Ad,ae.tableId+1),S.tableId=ae.tableId,m=eW(T,t,LT({primaryStore:ae,auditStore:Q,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:_,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:g,tableName:t,tableId:ae.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:E,dbisDB:y})),m.schemaVersion=1,U=!0,y.put(W,S)}let X=m.indices;y=y||(h.dbisDb=h.openDB(MT.INTERNAL_DBIS_NAME,I)),m.dbisDB=y;let Y=[];for(let{key:Q,value:de}of y.getRange({start:!0})){let[W,ae]=Q.toString().split("/");if(ae===""&&(ae=de.name),ae){if(W!==t)continue}else continue;let Oe=o.find(Me=>Me.name===ae),Ne=!Oe?.indexed&&de.indexed&&!de.isPrimaryKey;if((!Oe||Ne)&&(ne(),U=!0,Oe||y.remove(Q),Ne)){let Me=m.indices[W];Me&&Y.push(Me)}}let V=[];try{for(let Q of o||[]){if((Q.relationship||Q.computed)&&(U=!0,Q.relationship))continue;let de=t+"/"+(Q.name||"");Object.defineProperty(Q,"key",{value:de,configurable:!0});let W=y.get(de);if(Q.isPrimaryKey){if(W=W||y.get(de=t+"/")||{},c!==void 0&&c!==m.audit||l!==void 0&&l!==m.sealed||d!==void 0&&d!==m.replicate||(+n||void 0)!==(+W.expiration||void 0)||(+s||void 0)!==(+W.eviction||void 0)){let Oe={...W};typeof c=="boolean"&&(c&&m.enableAuditing(c),Oe.audit=c),n&&(Oe.expiration=+n),s&&(Oe.eviction=+s),l!==void 0&&(Oe.sealed=l),d!==void 0&&(Oe.replicate=d),U=!0,ne(),y.put(de,Oe)}continue}W?.attribute&&!W.name&&(W.indexed=!0);let ae=!W||W.type!==Q.type||W.indexed!==Q.indexed||W.nullable!==Q.nullable||W.version!==Q.version||JSON.stringify(W.properties)!==JSON.stringify(Q.properties)||JSON.stringify(W.elements)!==JSON.stringify(Q.elements);if(Q.indexed){let Oe=new Tl.default(!0,!1),Ne=h.openDB(de,Oe);(ae||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<BE.workerData?.restartNumber)&&(U=!0,ne(),W=y.get(de),(ae||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<BE.workerData?.restartNumber)&&(U=!0,Q.indexNulls===void 0&&(Q.indexNulls=!0),m.primaryStore.getStats().entryCount>0&&(Q.lastIndexedKey=W?.lastIndexedKey??void 0,Q.indexingPID=process.pid,Ne.isIndexing=!0,Object.defineProperty(Q,"dbi",{value:Ne}),V.push(Q))),y.put(de,Q)),W?.indexNulls&&Q.indexNulls===void 0&&(Q.indexNulls=!0),Ne.indexNulls=Q.indexNulls,X[Q.name]=Ne}else ae&&(U=!0,ne(),y.put(de,Q))}}finally{H&&H()}if(U&&(m.schemaVersion++,m.updatedAttributes()),Vt.trace(`${t} table loading, running index`),V.length>0||Y.length>0?m.indexingOperation=$me(m,V,Y):U&&UT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,"schema-change",m.databaseName,m.tableName)),m.origin=f,U)for(let Q of ME)Q(m,f!=="cluster");return(n||s||i)&&m.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Vt.trace(`${t} table loaded`),m;function ne(){H||h.transactionSync(()=>({then(Q){H=Q}}))}a(ne,"startTxn")}async function $me(e,t,r){try{Vt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await UT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let _ of t)(0,bd.compareKeys)(_.lastIndexedKey,u)<0&&(u=_.lastIndexedKey),_.lastIndexedKey==null&&_.dbi.clearAsync();let d=0;for(let{key:_,value:E,version:f}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(E){if(d++,s=e.primaryStore.ifVersion(_,f,()=>{for(let h=0;h<l;h++){let T=t[h],m=T.name;try{let g=T.resolve,S=E&&(g?g(E):E[m]),y=(0,QY.getIndexedValues)(S);if(y)for(let I=0,U=y.length;I<U;I++)T.dbi.put(y[I],_)}catch(g){o[m]||(o[m]=!0,Vt.error(`Error indexing attribute ${m}`,g))}}}),s.then(()=>d--,h=>{d--,Vt.error(h)}),BE.workerData&&BE.workerData.restartNumber!==JY.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=_,e.dbisDB.put(h.key,h);if(i)return}d>Gme?await s:d>qme&&await new Promise(h=>setImmediate(h))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await UT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Vt.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Vt.error("Error in indexing",n)}}function Vme({table:e,database:t}){let r=zl({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Nc(e){return ME.push(e),{remove(){let t=ME.indexOf(e);t>-1&&ME.splice(t,1)}}}function z_(e){return UE.push(e),{remove(){let t=UE.indexOf(e);t>-1&&UE.splice(t,1)}}}function Tm(){let e=(0,er.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,er.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,er.get)(yr.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||XY,n={startingOffset:32};return t&&(n.dictionary=vE.readFileSync(t)),r&&(n.threshold=r),e&&n}var er,MT,bd,Ut,rs,Rd,Tl,dw,yr,vE,_w,QY,UT,vT,BE,Vt,JY,fw,HT,XY,jn,We,Ad,ME,UE,BT,Ha,yd,Gme,qme,De=Ie(()=>{er=L(se()),MT=L(Ht()),bd=require("lmdb"),Ut=require("path"),rs=require("fs"),Rd=L(Tt());Lf();Tl=L(r_()),dw=L(n_()),yr=L(M()),vE=L(require("fs-extra")),_w=L(_i()),QY=L(sn()),UT=L(eo()),vT=L(qs()),BE=require("worker_threads"),Vt=L(j()),JY=L(dt());ji();Ll();fw="data",HT=Symbol("defined-tables"),XY=((0,er.get)(yr.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,er.initSync)();jn=Object.create(null),We=Object.create(null);(0,_w._assignPackageExport)("databases",We);(0,_w._assignPackageExport)("tables",jn);Ad=Symbol.for("next-table-id"),ME=[],UE=[],Ha=new Map;a(Fme,"getTables");a(ut,"getDatabases");a(Uu,"resetDatabases");a(LE,"readMetaDb");a(ZY,"ensureDB");a(eW,"setTable");a(zl,"database");a(BR,"dropDatabase");a(Et,"table");Gme=1e3,qme=10;a($me,"runIndexing");a(Vme,"dropTableMeta");a(Nc,"onUpdatedTable");a(z_,"onRemovedDB");a(Tm,"getDefaultCompression")});var re=N((DMe,EW)=>{"use strict";var xa=require("path"),iW=require("fs-extra"),In=j(),tW=require("fs-extra"),xT=require("os"),Kme=require("net"),Yme=require("recursive-iterator"),Kt=M(),Wme=Eg(),rW=require("papaparse"),kT=require("moment"),{inspect:jme}=require("util"),nW=require("is-number"),CMe=require("lodash"),zme=require("minimist"),Qme=require("https"),Jme=require("http"),{hdb_errors:FT}=_e(),Xme=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,oW=require("util").promisify(setTimeout),Zme=100,eSe=5,tSe="",rSe=4,sW={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};EW.exports={isEmpty:ns,isEmptyOrZeroLength:Vi,arrayHasEmptyValues:iSe,arrayHasEmptyOrZeroLengthValues:oSe,buildFolderPath:aSe,isBoolean:aW,errorizeMessage:nSe,stripFileExtension:lSe,autoCast:uSe,autoCastJSON:cW,autoCastJSONDeep:hw,removeDir:dSe,compareVersions:_Se,isCompatibleDataVersion:fSe,escapeRawValue:ESe,unescapeValue:hSe,stringifyProps:pSe,timeoutPromise:SSe,isClusterOperation:gSe,getClusterUser:RSe,checkGlobalSchemaTable:ASe,getHomeDir:uW,getPropsFilePath:mSe,promisifyPapaParse:ySe,removeBOM:dW,createEventPromise:bSe,checkProcessRunning:OSe,checkSchemaTableExist:NSe,checkSchemaExists:_W,checkTableExists:fW,getStartOfTomorrowInSeconds:ISe,getLimitKey:wSe,isObject:cSe,isNotEmptyAndHasValue:sSe,autoCasterIsNumberCheck:lW,backtickASTSchemaItems:CSe,isPortTaken:TSe,createForkArgs:DSe,autoCastBoolean:PSe,async_set_timeout:oW,getTableHashAttribute:LSe,doesSchemaExist:MSe,doesTableExist:USe,stringifyObj:vSe,ms_to_time:BSe,changeExtension:HSe,getEnvCliRootPath:pw,noBootFile:xSe,httpRequest:kSe,transformReq:FSe,convertToMS:GSe,PACKAGE_ROOT:Kt.PACKAGE_ROOT};function nSe(e){return e instanceof Error?e:new Error(e)}a(nSe,"errorizeMessage");function ns(e){return e==null}a(ns,"isEmpty");function sSe(e){return!ns(e)&&(e||e===0||e===""||aW(e))}a(sSe,"isNotEmptyAndHasValue");function Vi(e){return ns(e)||e.length===0||e.size===0}a(Vi,"isEmptyOrZeroLength");function iSe(e){if(ns(e))return!0;for(let t=0;t<e.length;t++)if(ns(e[t]))return!0;return!1}a(iSe,"arrayHasEmptyValues");function oSe(e){if(Vi(e))return!0;for(let t=0;t<e.length;t++)if(Vi(e[t]))return!0;return!1}a(oSe,"arrayHasEmptyOrZeroLengthValues");function aSe(...e){try{return e.join(xa.sep)}catch{console.error(e)}}a(aSe,"buildFolderPath");function aW(e){return ns(e)?!1:e===!0||e===!1}a(aW,"isBoolean");function cSe(e){return ns(e)?!1:typeof e=="object"}a(cSe,"isObject");function lSe(e){return Vi(e)?tSe:e.slice(0,-rSe)}a(lSe,"stripFileExtension");function uSe(e){return ns(e)||e===""||typeof e!="string"?e:sW[e]!==void 0?sW[e]:lW(e)===!0?Number(e):Xme.test(e)?new Date(e):e}a(uSe,"autoCast");function cW(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(cW,"autoCastJSON");function hw(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=hw(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=hw(r);n!==r&&(e[t]=n)}return e}else return cW(e)}a(hw,"autoCastJSONDeep");function lW(e){if(e.startsWith("0.")&&nW(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&nW(e))}a(lW,"autoCasterIsNumberCheck");async function dSe(e){if(Vi(e))throw new Error(`Directory path: ${e} does not exist`);try{await tW.emptyDir(e),await tW.remove(e)}catch(t){throw In.error(`Error removing files in ${e} -- ${t}`),t}}a(dSe,"removeDir");function _Se(e,t){if(Vi(e)){In.info("Invalid current version sent as parameter.");return}if(Vi(t)){In.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(_Se,"compareVersions");function fSe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(fSe,"isCompatibleDataVersion");function ESe(e){if(ns(e))return e;let t=String(e);return t==="."?Kt.UNICODE_PERIOD:t===".."?Kt.UNICODE_PERIOD+Kt.UNICODE_PERIOD:t.replace(Kt.FORWARD_SLASH_REGEX,Kt.UNICODE_FORWARD_SLASH)}a(ESe,"escapeRawValue");function hSe(e){if(ns(e))return e;let t=String(e);return t===Kt.UNICODE_PERIOD?".":t===Kt.UNICODE_PERIOD+Kt.UNICODE_PERIOD?"..":String(e).replace(Kt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(hSe,"unescapeValue");function pSe(e,t){if(ns(e))return In.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+xT.EOL}!Vi(n)&&n[0]===";"?r+=" "+n+s+xT.EOL:Vi(n)||(r+=n+"="+s+xT.EOL)}catch{In.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(pSe,"stringifyProps");function uW(){let e;try{e=xT.homedir()}catch{e=process.env.HOME}return e}a(uW,"getHomeDir");function mSe(){let e=xa.join(uW(),Kt.HDB_HOME_DIR_NAME,Kt.BOOT_PROPS_FILE_NAME);return iW.existsSync(e)||(e=xa.join(__dirname,"../","hdb_boot_properties.file")),e}a(mSe,"getPropsFilePath");function SSe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(SSe,"timeoutPromise");async function TSe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Kme.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(TSe,"isPortTaken");function gSe(e){try{return Kt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){In.error(`Error checking operation against cluster ops ${t}`)}return!1}a(gSe,"isClusterOperation");function ASe(e,t){let r=(De(),oe(lt)).getDatabases();if(!r[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ASe,"checkGlobalSchemaTable");function RSe(e,t){if(ns(t)){In.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ns(e)||Vi(e)){In.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){In.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){In.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(RSe,"getClusterUser");function ySe(){rW.parsePromise=function(e,t,r){return new Promise(function(n,s){rW.parse(e,{header:!0,transformHeader:dW,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(ySe,"promisifyPapaParse");function dW(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(dW,"removeBOM");function bSe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;In.info(`Got cluster status event response: ${jme(s)}`);try{i.cancel()}catch{In.error("Error trying to cancel timeout.")}n(s)})})}a(bSe,"createEventPromise");async function OSe(e){let t=!0,r=0;do await oW(Zme*r++),(await Wme.findPs(e)).length>0&&(t=!1);while(t&&r<eSe);if(t)throw new Error(`process ${e} was not started`)}a(OSe,"checkProcessRunning");function NSe(e,t){let r=_W(e);if(r)return r;let n=fW(e,t);if(n)return n}a(NSe,"checkSchemaTableExist");function _W(e){let{getDatabases:t}=(De(),oe(lt));if(!t()[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_W,"checkSchemaExists");function fW(e,t){let{getDatabases:r}=(De(),oe(lt));if(!r()[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(fW,"checkTableExists");function ISe(){let e=kT().utc().add(1,Kt.MOMENT_DAYS_TAG).startOf(Kt.MOMENT_DAYS_TAG).unix(),t=kT().utc().unix();return e-t}a(ISe,"getStartOfTomorrowInSeconds");function wSe(){return kT().utc().format("DD-MM-YYYY")}a(wSe,"getLimitKey");function CSe(e){try{let t=new Yme(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){In.error("Got an error back ticking items."),In.error(t)}}a(CSe,"backtickASTSchemaItems");function DSe(e){return[e]}a(DSe,"createForkArgs");function PSe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(PSe,"autoCastBoolean");function LSe(e,t){let{getDatabases:r}=(De(),oe(lt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(LSe,"getTableHashAttribute");function MSe(e){let{getDatabases:t}=(De(),oe(lt));return t()[e]!==void 0}a(MSe,"doesSchemaExist");function USe(e,t){let{getDatabases:r}=(De(),oe(lt));return r()[e]?.[t]!==void 0}a(USe,"doesTableExist");function vSe(e){try{return JSON.stringify(e)}catch{return e}}a(vSe,"stringifyObj");function BSe(e){let t=kT.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(BSe,"ms_to_time");function HSe(e,t){let r=xa.basename(e,xa.extname(e));return xa.join(xa.dirname(e),r+t)}a(HSe,"changeExtension");function pw(){if(process.env[Kt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Kt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=zme(process.argv);if(e[Kt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Kt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(pw,"getEnvCliRootPath");var Ew;function xSe(){if(Ew)return Ew;let e=pw();if(pw()&&iW.pathExistsSync(xa.join(e,Kt.HDB_CONFIG_FILE)))return Ew=!0,!0}a(xSe,"noBootFile");function kSe(e,t){let r;return e.protocol==="http:"?r=Jme:r=Qme,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(kSe,"httpRequest");function FSe(e){if(!e.schema&&!e.database){e.schema=Kt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(FSe,"transformReq");function GSe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(GSe,"convertToMS")});var se=N((TW,gW)=>{"use strict";var mw=require("fs-extra"),gl=require("path"),hW=require("os"),qSe=require("properties-reader"),xE=j(),HE=re(),Le=M(),GT=Ct(),$Se="Error initializing environment manager",qT="BOOT_PROPS_FILE_PATH",pW=!1,VSe={[Le.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Bo={};Object.assign(TW,gW.exports={BOOT_PROPS_FILE_PATH:qT,getHdbBasePath:KSe,setHdbBasePath:YSe,get:mW,initSync:jSe,setProperty:Je,initTestEnvironment:QSe,setCloneVar:zSe});function KSe(){return Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(KSe,"getHdbBasePath");function YSe(e){Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(YSe,"setHdbBasePath");function mW(e){let t=GT.getConfigValue(e);return t===void 0?Bo[e]:t}a(mW,"get");function Je(e,t){VSe[e]&&(Bo[e]=t),GT.updateConfigObject(e,t)}a(Je,"setProperty");function WSe(){let e;try{e=HE.getPropsFilePath(),mw.accessSync(e,mw.constants.F_OK|mw.constants.R_OK),pW=!0;let t=qSe(e);return Bo[Le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Le.HDB_SETTINGS_NAMES.INSTALL_USER),Bo[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Bo[qT]=e,!0}catch{return xE.trace(`Environment manager found no properties file at ${e}`),!1}}a(WSe,"doesPropFileExist");function jSe(e=!1){try{((pW||WSe()||HE.noBootFile())&&!SW||e)&&(GT.initConfig(e),Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=GT.getConfigValue(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){xE.error($Se),xE.error(t),console.error(t),process.exit(1)}}a(jSe,"initSync");var SW=!1;function zSe(e){SW=e}a(zSe,"setCloneVar");function QSe(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=gl.join(__dirname,"../../","unitTests");Bo[qT]=gl.join(l,"hdb_boot_properties.file"),Je(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,gl.join(l,"settings.test")),Je(Le.HDB_SETTINGS_NAMES.INSTALL_USER,hW.userInfo()?hW.userInfo().username:void 0),Je(Le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Je(Le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,gl.join(l,"envDir","log")),Je(Le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Je(Le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Je(Le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Je(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,gl.join(l,"envDir")),Je(Le.CONFIG_PARAMS.STORAGE_PATH,gl.join(l,"envDir")),s&&(Je(Le.CONFIG_PARAMS.HTTP_SECUREPORT,mW(Le.CONFIG_PARAMS.HTTP_PORT)),Je(Le.CONFIG_PARAMS.HTTP_PORT,null)),Je(Le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Je(Le.CONFIG_PARAMS.HTTP_PORT,9926),Je(Le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Je(Le.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Je(Le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,HE.isEmpty(i)?!1:i),Je(Le.CONFIG_PARAMS.HTTP_CORS,HE.isEmpty(i)?!1:i),Je(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Je(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Je(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Je(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Je(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,gl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Je(Le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,HE.isEmpty(c)?!1:c),o&&(Je("CORS_ACCESSLIST",o),Je(Le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Je(Le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Je(Le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Je(Le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Je(Le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Je(Le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Je(Le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${qT}. Please check your boot props and settings files`;xE.fatal(r),xE.error(t)}}a(QSe,"initTestEnvironment")});var Tr=N((xMe,HW)=>{"use strict";var Nr=se();Nr.initSync();var JSe=require("fs-extra"),XSe=require("semver"),GE=require("path"),{monotonicFactory:ZSe}=require("ulidx"),RW=ZSe(),eTe=require("util"),yW=require("child_process"),tTe=eTe.promisify(yW.exec),rTe=yW.spawn,Fr=It(),Xe=M(),$T=re(),li=j(),VT=Xi(),nTe=dp(),kE=Ct(),{broadcast:sTe,onMessageByType:iTe,getWorkerIndex:oTe}=dt(),{isMainThread:bW}=require("worker_threads"),{Encoder:aTe,decode:Aw}=require("msgpackr"),OW=new aTe,{isEmpty:bl}=$T,NW=xn(),MMe=48*36e11;bW&&iTe(Xe.ITC_EVENT_TYPES.RESTART,()=>{tn=void 0,yl=void 0});var{connect:cTe,StorageType:lTe,RetentionPolicy:uTe,AckPolicy:Rw,DeliverPolicy:yw,DiscardPolicy:dTe,NatsConnection:UMe,JetStreamManager:vMe,JetStreamClient:BMe,StringCodec:HMe,JSONCodec:_Te,createInbox:bw,headers:fTe,ErrorCode:AW}=require("nats"),{PACKAGE_ROOT:ETe}=M(),hTe=Ou(),{recordAction:pTe}=(Ii(),oe(W_)),IW=_Te(),mTe="clustering",STe=hTe.engines[Fr.NATS_SERVER_NAME],TTe=GE.join(ETe,"dependencies"),gw=GE.join(TTe,`${process.platform}-${process.arch}`,Fr.NATS_BINARY_NAME),Sw,Tw,FE,Al,Rl;HW.exports={runCommand:wW,checkNATSServerInstalled:gTe,createConnection:Ow,getConnection:qE,getJetStreamManager:$E,getJetStream:DW,getNATSReferences:Ki,getServerList:RTe,createLocalStream:Nw,listStreams:PW,deleteLocalStream:yTe,getServerConfig:Od,listRemoteStreams:bTe,viewStream:OTe,viewStreamIterator:NTe,publishToStream:ITe,request:DTe,reloadNATS:Iw,reloadNATSHub:PTe,reloadNATSLeaf:LTe,extractServerName:CTe,requestErrorHandler:MTe,createLocalTableStream:vW,createTableStreams:BTe,purgeTableStream:BW,purgeSchemaTableStreams:HTe,getStreamInfo:xTe,updateLocalStreams:FTe,closeConnection:ATe,getJsmServerName:KT,addNatsMsgHeader:LW,clearClientCache:CW,updateRemoteConsumer:UTe,createConsumer:MW,updateConsumerIterator:vTe};async function wW(e,t=void 0){let{stdout:r,stderr:n}=await tTe(e,{cwd:t});if(n)throw new Error(n.replace(`
130
+ `))}},25).unref()}o.close?.(()=>{if(At.get(Zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&id()==0)try{nK(oK(At.get(Zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,kS),o.cantCleanupProperly||Nn.warn("Had to forcefully exit the thread",kS),process.exit(0)},5e3).unref()})}if(aK||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Nn.info("Could not close debugger",i)}}}).ref();let e;pE&&!xhe&&(e=lK()),Promise.resolve(e).then(()=>{if(id()===0)try{vhe(hI)}catch(t){console.error("Error displaying start-up log",t)}mE?.postMessage({type:Zt.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(cK,"startServers");function lK(){let e=[];for(let t in Fi){let r=Fi[t];if(t.includes?.("/")&&id()==0){whe(t)&&nK(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Nn.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=At.get(Zt.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=id();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?pE?n={fd:pE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:pE?n={fd:pE(+t,"::")}:n={port:t}}catch(o){console.error(`Unable to bind to port ${t}`,o);continue}e.push(new Promise((o,c)=>{r.listen(n,()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),Nn.trace("Listening on port "+t,kS)}).on("error",c)}))}return Promise.all(e)}a(lK,"listenOnPorts");!fI&&!Rhe?.noServerStart&&cK();function SI(e,t,r){let n=e?.read?e:new yhe({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Fi[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Fi[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Nn.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(SI,"deliverSocket");var X1=new Map;function khe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=X1.get(s),r){case"connection":i=SI(void 0,t),X1.set(s,i),i.write=(c,l,u)=>(mE.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(mE.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),mE.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(khe,"proxyRequest");var{getComponentName:GS}=(Ff(),oe(kf));function TI(e,t,r=!0){t||(t=At.get(Zt.CONFIG_PARAMS.HTTP_PORT));let n=Fi[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",rK),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Fi[t]=e;e.on("unhandled",rK)}a(TI,"registerServer");function gI(e){let t=[],r=e?.securePort;return r&&t.push({port:r,secure:!0}),r=e?.port,r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],At.get(Zt.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:At.get(Zt.CONFIG_PARAMS.HTTP_PORT),secure:At.get(Zt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),At.get(Zt.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:At.get(Zt.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&At.get(Zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:oK(At.get(Zt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}a(gI,"getPorts");function AI(e,t){let r=[];for(let{port:n,secure:s}of gI(t))r.push(uK(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?pI[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,TI(e,n,!1)),FS[n]=$S(pI,n);return r}a(AI,"httpServer");function qS(e,t){let r=hI.get(e)??[];hI.set(e,[...r,t])}a(qS,"setPortServerMap");function uK(e,t,r,n){if(qS(e,{protocol_name:t?"HTTPS":"HTTP",name:GS()}),!xS[e]){let s=r?"operationsApi_network":"http",i=At.get(s+"_keepAliveTimeout"),o=At.get(s+"_timeout"),c=At.get(s+"_headersTimeout"),l={noDelay:!0,keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:At.get(Zt.CONFIG_PARAMS.HTTP_MAXHEADERSIZE)},u=At.get(s+"_mtls"),d=At.get(s+"_mtls_required");t&&Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:Phe(),SNICallback:iK(r?"operations-api":"server",u),ALPNCallback:a(function(f){return f.protocols.includes("harperdb-replication")&&(this.isReplicationConnection=!0),"http/1.1"},"ALPNCallback"),ALPNProtocols:null});let _=Uhe(),E=xS[e]=(t?Ihe:Ohe)(l,async(f,h)=>{try{let m=performance.now(),g=new sK(f,h);r&&(g.isOperationsServer=!0);let S=await FS[e](g);if(!S){if(g._nodeResponse.statusCode)return;S=dK(g)}if(S.headers?.set||(S.headers=new EI(S.headers)),_?S.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):S.headers?.set?.("Server","HarperDB"),S.status===-1){for(let ne of S.headers||[])h.setHeader(ne[0],ne[1]);return f.baseRequest=g,h.baseResponse=S,xS[e].emit("unhandled",f,h)}let y=S.status||200,I=performance.now(),U=I-m,H=S.body,X;if(!S.handlesHeaders){let ne=S.headers||new EI;H?H.length>=0&&(typeof H=="string"?ne.set("Content-Length",Buffer.byteLength(H)):ne.set("Content-Length",H.length),X=!0):(ne.set("Content-Length","0"),X=!0);let Q=`hdb;dur=${U.toFixed(2)}`;S.wasCacheMiss&&(Q+=", miss"),Mhe(ne,"Server-Timing",Q,!0),h.headersSent||h.writeHead(y,ne&&(ne[Symbol.iterator]?Array.from(ne):ne)),X&&h.end(H)}let Y=g.handlerPath,V=g.method;if(EE(U,"duration",Y,V,S.wasCacheMiss==null?void 0:S.wasCacheMiss?"cache-miss":"cache-hit"),Q1(y<400,"success",Y,V),Q1(1,"response_"+y,Y,V),!X)if(H instanceof ReadableStream&&(H=J1.fromWeb(H)),(H[Symbol.iterator]||H[Symbol.asyncIterator])&&(H=J1.from(H)),H?.pipe){H.pipe(h),H.destroy&&h.on("close",()=>{H.destroy()});let ne=0;H.on("data",Q=>{ne+=Q.length}),H.on("end",()=>{EE(performance.now()-I,"transfer",Y,V),EE(ne,"bytes-sent",Y,V)})}else H?.then?H.then(ne=>{h.end(ne)},T):h.end(H)}catch(m){T(m)}function T(m){let g=m.headers;h.writeHead(m.statusCode||500,g&&(g[Symbol.iterator]?Array.from(g):g)),h.end(m.toString()),m.statusCode?m.statusCode===500?Nn.warn(m):Nn.info(m):Nn.error(m)}a(T,"onError")});i>=0&&(E.keepAliveTimeout=i),c>=0&&(E.headersTimeout=c),t&&(E.ports||(E.ports=[]),E.ports.push(e),l.SNICallback.initialize(E),u&&(E.mtlsConfig=u),E.on("secureConnection",f=>{f._parent.startTime&&EE(performance.now()-f._parent.startTime,"tls-handshake",e),EE(f.isSessionReused(),"tls-reused",e)}),E.isSecure=!0),TI(E,e)}return xS[e]}a(uK,"getHTTPServer");function $S(e,t){let r=dK;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a((...c)=>s(...c,o),"next_callback")}}return r}a($S,"makeCallbackChain");function dK(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new EI}}a(dK,"unhandled");function Fhe(e,t){AI(e,{requestOnly:!0,...t})}a(Fhe,"onRequest");function Ghe(e,t){let r;if(t.securePort){qS(t.securePort,{protocol_name:"TLS",name:GS()});let n=iK("server",t.mtls);r=Dhe({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,SNICallback:n},e),n.initialize(r),Fi[t.securePort]=r}return t.port&&(qS(t.port,{protocol_name:"TCP",name:GS()}),r=bhe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Fi[t.port]=r),r}a(Ghe,"onSocket");Object.defineProperty(Nhe.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});var Z1=[],mI={};function _K(e,t){for(let{port:r}of gI(t))Z1[t?.runFirst?"unshift":"push"]({listener:e,port:r}),mI[r]=$S(Z1,r)}a(_K,"onUpgrade");var eK=[],tK={};function qhe(e,t){let r=[];for(let{port:n,secure:s}of gI(t)){qS(n,{protocol_name:s?"WSS":"WS",name:GS()});let i=uK(n,s,t?.isOperationsServer,t?.mtls);hE[n]||(hE[n]=new Che({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),hE[n].on("connection",(o,c)=>{let l=new sK(c);l.isWebSocket=!0;let u=FS[n](l);tK[n](o,l,u)}),_K((o,c,l,u)=>o.__harperdb_request_upgraded?u(o,c,l):hE[n].handleUpgrade(o,c,l,d=>{o.__harperdb_request_upgraded=!0,u(o,c,l),hE[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{mI[n]&&mI[n](o,c,l)})),r.push(i),eK[t?.runFirst?"unshift":"push"]({listener:e,port:n}),tK[n]=$S(eK,n),FS[n]=$S(pI,n)}return r}a(qhe,"onWebSocket");function rK(e,t){t.writeHead(404),t.end(`Not found
131
+ `)}a(rK,"defaultNotFound")});var z1={};je(z1,{startHTTPThreads:()=>Vhe,startSocketServer:()=>II,updateWorkerIdleness:()=>gK});async function Vhe(e=2,t){try{if(t)OI(0,1,!0);else{let{loadRootComponents:r}=VS();if(e===0)return(0,Cs.setMainIsWorker)(!0),await RI().startServers(),Promise.resolve([]);await r()}TK();for(let r=0;r<e;r++)OI(r,e);return Promise.all(SK)}finally{(0,Cs.threadsHaveStarted)()}}function TK(){let e=(0,pK.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),bI=setInterval(()=>{WS.notify(e)},$he).unref())}function OI(e,t=1,r){if(yI++,(0,Cs.startWorker)("server/threads/threadServer.js",{name:ud.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===ud.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});SK.push(s),await s,od.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=YS.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=od.indexOf(n);o>-1&&od.splice(o,1)}if(a(i,"removeWorker"),ad){let o=ad;ad=[];for(let c of o)mK[c.localPort](null,c)}}}),r){let n=setInterval(()=>{NI?NI=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Cs.shutdownWorkers)(),yI=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function II(e=0,t){if(typeof e=="string")try{(0,jS.existsSync)(e)&&(0,jS.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Khe:r=Yhe(t):r=wI;let n=(0,cd.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=mK[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),NI=!0,r(o,(c,l)=>{if(!c){if(fK){let d=o._socket||new cd.Socket({handle:o,writable:!0,readable:!0});fK.deliverSocket(d,e,l),d.resume()}else yI>0?(ad.length===0&&setTimeout(()=>{ad.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,ad.push(o)):(console.log("start up a dynamic thread to handle request"),OI(0));mr(!1,"socket-routed");return}c.requests++;let u=o.fd;if(u>=0)c.postMessage({port:e,fd:u,data:l});else{let d=o._socket||new cd.Socket({handle:o,writable:!0,readable:!0});zhe(d,c,e)}mr(!0,"socket-routed")})};let s=Ou();WS.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function wI(e,t){let r,n=0;for(let s of od){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=KS)return KS=i,t(r);n=i}KS=0,t(r)}function Khe(e,t){let r={};e.getpeername(r);let n=r.address,s=ld.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);wI(e,o=>{ld.set(n,{worker:o,lastUsed:i}),t(o)})}function Yhe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new cd.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=ld.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);wI(n,_=>{ld.set(l,{worker:_,lastUsed:d}),s(_,o)})})}a(r,"findByHeaderAffinity")}function gK(){KS=0;for(let e of od)e.expectedIdle=e.recentELU.idle+Whe,e.requests=1;od.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function zhe(e,t,r){let n=jhe++;t.postMessage({port:r,requestId:n,event:"connection"}),e.on("data",s=>{let i=s.toString("latin1");t.postMessage({port:r,requestId:n,data:i,event:"data"})}).on("close",s=>{t.postMessage({port:r,requestId:n,event:"close",hadError:s})}).on("error",s=>{t.postMessage({port:r,requestId:n,event:"error",error:s})}).on("drain",s=>{t.postMessage({port:r,requestId:n,event:"drain",error:s})}).on("end",()=>{t.postMessage({port:r,requestId:n,event:"end"})}).resume(),YS.set(n,s=>{s.event=="data"&&e.write(Buffer.from(s.data,"latin1")),s.event=="end"&&(e.end(s.data&&Buffer.from(s.data,"latin1")),YS.delete(n)),s.event=="destroy"&&(e.destroy(),YS.delete(n))})}var Cs,cd,ud,WS,jS,hK,pK,od,ad,mK,fK,yI,SK,bI,$he,NI,KS,EK,ld,Whe,YS,jhe,_I=Ie(()=>{Cs=L(dt()),cd=require("net"),ud=L(M()),WS=L(j()),jS=require("fs");Ii();hK=require("worker_threads"),pK=L(uc()),od=[],ad=[],mK=[],yI=0,SK=[];hK.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Cs.onMessageFromWorkers)(e=>{e.type===ud.ITC_EVENT_TYPES.RESTART&&bI&&(clearInterval(bI),TK())}));$he=6e5;a(Vhe,"startHTTPThreads");a(TK,"licenseWarning");a(OI,"startHTTPWorker");a(II,"startSocketServer");KS=0;a(wI,"findMostIdleWorker");EK=36e5,ld=new Map;a(Khe,"findByRemoteAddressAffinity");a(Yhe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ld)r.lastUsed+EK<e&&ld.delete(t)},EK).unref();Whe=1e3;a(gK,"updateWorkerIdleness");(0,Cs.setMonitorListener)(gK);YS=new Map,jhe=1;a(zhe,"proxySocket")});var bK=N((hLe,yK)=>{"use strict";var Qhe=require("cluster"),dl=se();dl.initSync();var RK=M(),uLe=require("util"),vo=j(),dLe=require("fs"),Jhe=require("fastify"),_Le=Ou(),Xhe=require("@fastify/cors"),Zhe=require("@fastify/compress"),epe=require("@fastify/static"),tpe=bN(),rpe=require("path"),{PACKAGE_ROOT:npe}=M(),spe=Fs(),ipe=re(),ope=xn(),ape=uc(),{server:cpe}=(qr(),oe(ja)),{node_request_key:fLe}=(RS(),oe(vN)),{authHandler:lpe,handlePostRequest:upe,serverErrorHandler:dpe,reqBodyValidationHandler:_pe}=TS(),ELe=require("net"),{registerContentHandlers:fpe}=($c(),oe(o$)),Epe=6e4,hpe=1024*1024*1024,ppe="TRUE",{CONFIG_PARAMS:TE}=RK,dd;yK.exports={hdbServer:AK,start:AK};async function AK(e){try{vo.debug("In Fastify server"+process.cwd()),vo.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),vo.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Qhe.isMaster,await mpe();let t=e.securePort>0;dd=Spe(t),await dd.ready(),e||(e={}),e.isOperationsServer=!0;try{cpe.http(dd.server,e),dd.server.closeIdleConnections||await dd.listen({port:0,host:"::"})}catch(r){throw dd.close(),vo.error(r),vo.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),vo.fatal(t),process.exit(1)}}a(AK,"operationsServer");async function mpe(){vo.trace("Configuring HarperDB process."),spe.setSchemaDataToGlobal(),await ope.setUsersToGlobal(),await ape.getLicense()}a(mpe,"setUp");function Spe(e){vo.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Tpe(e),r=Jhe(t);r.server.headersTimeout=Ape(),r.setErrorHandler(dpe);let n=gpe();n&&r.register(Xhe,n),r.register(function(i,o,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(tpe),r.register(Zhe),r.register(epe,{root:rpe.join(npe,"studio/build-local")}),fpe(r);let s=dl.get(RK.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!ipe.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[_pe,lpe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),upe(i,o)}),r.get("/health",()=>"HarperDB is running."),vo.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Spe,"buildServer");function Tpe(e){let t=dl.get(TE.OPERATIONSAPI_NETWORK_TIMEOUT),r=dl.get(TE.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:hpe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(Tpe,"getServerOptions");function gpe(){let e=dl.get(TE.OPERATIONSAPI_NETWORK_CORS),t=dl.get(TE.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===ppe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(gpe,"getCORSOpts");function Ape(){return dl.get(TE.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Epe}a(Ape,"getHeaderTimeoutConfig")});var UI={};je(UI,{disableNATS:()=>ype,publishToStream:()=>JS,setNATSReplicator:()=>CI,setPublishToStream:()=>bpe,setSubscription:()=>MI,start:()=>Rpe});function Rpe(){gE.default.get(AE.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Npe()}function ype(e=!0){CK=e}function bpe(e,t){JS=e,MI=t}function Npe(){if(CK||process.env._DISABLE_NATS)return;let e=ut(),t=Object.keys(e);t.push("system");for(let r of t){let n=e[r];for(let s in n){let i=n[s];CI(s,r,i)}}Nc((r,n)=>{CI(r.tableName,r.databaseName,r),n&&PK(r)}),!OK&&(OK=!0)}function CI(e,t,r){if(t==="system"&&Ipe.includes(e))return;if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(s=>s?.isNATSReplicator))return;r.sourcedFrom(class extends Pr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ze],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ze]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ze],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[ze],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ze]})}static defineSchema(i){PK(i)}static subscribe(){let i=new Pn;return MI(t,e,i),i}static subscribeOnThisThread(i){return i<(gE.default.get(AE.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Ope)}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function n(s){let i=s?.transaction?.nats;if(!i)if(s?.transaction){s.transaction.nats=i=new zS(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=DK;return i}a(n,"getNATSTransaction")}function PK(e){let t=gE.default.get(AE.default.CONFIG_PARAMS.CLUSTERING_NODENAME);JS(`${PI.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,LI.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var NK,PI,LI,IK,wK,gE,AE,QS,CK,JS,MI,Ope,DK,OK,Ipe,zS,DI,LK=Ie(()=>{De();Vs();NK=L(Tr()),PI=L(It()),LI=L(Xi());Cl();IK=L(XS()),wK=L(sn()),gE=L(se()),AE=L(M()),QS=L(j());a(Rpe,"start");a(ype,"disableNATS");JS=NK.publishToStream,MI=IK.setSubscription;a(bpe,"setPublishToStream");Ope=2;a(Npe,"assignReplicationSource");Ipe=["hdb_job","hdb_analytics","hdb_raw_analytics","hdb_info","hdb_license"];a(CI,"setNATSReplicator");a(PK,"publishSchema");zS=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=gE.default.get(AE.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],l,u;for(let d of i){let _=d.table,E=d.operation=="put"?"upsert":d.operation;l||(QS.trace(`Sending transaction event ${E}`),u=l={operation:E,schema:s,table:_,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,E!=="delete"&&E!=="invalidate"&&(l.records=o)),l.table===_&&l.operation===E?(o.push(d.record),c.push(d.id)):u=u.next={operation:E,table:_,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(JS(`${PI.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,LI.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw QS.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},DI=class extends zS{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,wK.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};DK=new DI});async function HK({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await vI.get(e,{returnNonexistent:!0});i=new xI(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await vI.get(e);o&&o.delete()}i=new eT(e,t)}return n&&(n.id=e,n.user={username:t?.username},RE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function BI(){return ZS++,ZS>65500&&(ZS=1),ZS}function HI(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Oi.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return Dt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var UK,Ma,vK,BK,MK,vI,RE,ZS,eT,xI,xK=Ie(()=>{De();Zl();UK=L(sn()),Ma=L(j());pc();vK=L(dt()),BK=L(RI());qr();MK=100,vI=Et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),RE=Et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,vK.getWorkerIndex)()===0&&(async()=>{await BK.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of RE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await it.getUser(r.user.username));try{await HI(r,t,r)}catch{(0,Ma.warn)("Failed to publish will",t)}RE.delete(e.id)}})();a(HK,"getSession");ZS=1;a(BI,"getNextMessageId");eT=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(g=>g.topic===s),_;d?(_=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):_=i===2;let E={search:l,async:!0,user:this.user,startTime:o,omitCurrent:_,url:""};o&&(0,Ma.trace)("Resuming subscription from",s,"from",o);let f=Oi.getMatch(u,"mqtt");if(!f){let g=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw g.statusCode=404,g}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let g=E.url.slice(1);if(g.indexOf("#")>-1&&g.indexOf("#")!==g.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,g.indexOf("+")===g.length-1)E.onlyChildren=!0,E.url="/"+g.slice(0,g.length-1);else{let S=g.split("/"),y;for(let H=0;H<S.length;H++)if(S[H].indexOf("+")>-1)if(S[H]==="+")y=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&y)throw new Error("Filters can not be combined");let I=!0;S[S.length-1]==="#"&&(S.length--,I=!1),y&&(n=a(H=>{let X=H.id;if(!Array.isArray(X))if(X?.indexOf?.("/")>-1)X=X.split("/");else return!1;if(I&&X.length!==S.length)return!1;for(let Y=0;Y<S.length;Y++)if(S[Y]!=="+"&&S[Y]!==X[Y])return!1;return!0},"filter"));let U=S.indexOf("+");E.url="/"+(U>-1?S.slice(0,U):S).concat("").join("/")}}let h=f.path,T=f.Resource,m=await Dt(E,async()=>{let g=this.createContext();g.topic=s,g.retainHandling=i;let S=await T.subscribe(E,g);if(!S)return;if(!S[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let y=(async()=>{for await(let I of S)try{let U;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,U=this.needsAcknowledge(I)):(I.acknowledge?.(),U=BI());let H=I.id;if(Array.isArray(H)&&(H=Xl(H)),H==null&&(H=""),await this.listener(h+"/"+H,I.value,U,t)===!1)break;this.awaitingAcks?.size>MK?await new Promise(Y=>setTimeout(Y,this.awaitingAcks.size-MK)):await new Promise(setImmediate)}catch(U){(0,Ma.warn)(U)}})();return S});if(m)return m.topic=s,m.qos=t.qos,this.subscriptions.push(m),m}resume(){}needsAcknowledge(t){let r=BI();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,{acknowledge:t.acknowledge})),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r.acknowledge())}async removeSubscription(t){let r=this.subscriptions.find(n=>n.topic===t);if(r)return r.end(),this.subscriptions.splice(this.subscriptions.indexOf(r),1),!0}async publish(t,r){return HI(t,r,this.createContext())}createContext(){let t={session:this,socket:this.socket,user:this.user,authorize:!0};return this.request&&(t.request=this.request,t.url=this.request.url,t.headers=this.request.headers),t}setListener(t){this.listener=t}disconnect(t){this.keepaliveTimer&&clearTimeout(this.keepaliveTimer);let r=this.createContext();Dt(r,async()=>{try{if(!t){let n=await RE.get(this.sessionId);n?.doesExist()&&await HI(n,n.data,r)}}finally{await RE.delete(this.sessionId)}}).catch(n=>{(0,Ma.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(HI,"publish");xI=class extends eT{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=BI(),n={topic:t.topic,timestamp:t.localTime};return t.acknowledge&&(n.acknowledge=t.acknowledge),this.awaitingAcks.set(r,n),r}acknowledge(t){let r=this.awaitingAcks?.get(t);if(!r)return;this.awaitingAcks?.delete(t),r.acknowledge?.();let n=r.topic;for(let[,s]of this.awaitingAcks)if(s.topic===n&&s.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===n){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Ma.trace)("Received ack",n,r.timestamp),this.sessionRecord.update();return}}for(let s of this.sessionRecord.subscriptions)s.topic===n&&(s.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:n,startTime:s}=t;return n>0&&!s&&this.saveSubscriptions(),t.qos}removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t),n=super.removeSubscription(t);return r.qos>0&&this.saveSubscriptions(),n}saveSubscriptions(){this.sessionRecord.subscriptions=this.subscriptions.map(t=>{let r=t.startTime;return r||(r=t.startTime=(0,UK.getNextMonotonicTime)()),(0,Ma.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),vI.put(this.sessionRecord)}}});var FI={};je(FI,{bypassAuth:()=>wpe,start:()=>Cpe});function wpe(){$K=!0}function Cpe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new qK.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,_,E)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return E(u,d,_);o.events.emit("connection",u),dr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:f,onClose:h}=FK(u,T=>{u.send(T)},d,Promise.resolve(_).then(()=>d?.user),o);u.on("message",f),u.on("close",h),u.on("error",T=>{dr.info?.("WebSocket error",T)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),dr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let f=l.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=u.getPeerCertificate().subject.CN);try{d=await e.getUser(f,null,null),(0,_d.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&rT.notify?.({username:d?.username,status:xr.AUTH_AUDIT_STATUS.SUCCESS,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:u.remoteAddress})}catch(h){throw(0,_d.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&rT.error?.({username:f,status:xr.AUTH_AUDIT_STATUS.FAILURE,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:u.remoteAddress}),h}}else dr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(f){o.events.emit("error",f,u),dr.error?.(f)}else if(l.required)return dr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&$K&&u.remoteAddress.includes("127.0.0.1")&&(d=await(0,GK.getSuperUser)(),dr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:_,onClose:E}=FK(u,f=>u.write(f),null,d,o);u.on("data",_),u.on("close",E),u.on("error",f=>{dr.info?.("Socket error",f)})},{port:t,securePort:s,mtls:l})),c}function FK(e,t,r,n,s){kK||(kK=!0,V_(_=>{tT>0&&_.push({metric:"mqtt-connections",connections:tT,byThread:!0})}));let i;tT++;let o,c={protocolVersion:4},l=(0,nT.parser)({protocolVersion:5});function u(_){l.parse(_)}a(u,"onMessage");function d(){tT--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),qn(!1,"connection","mqtt","disconnect"),dr.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async _=>{n?.then&&(n=await n);let E=_.cmd;if(o)o.then&&await o;else if(E!=="connect"){dr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let f=_.topic,h=f?.indexOf("/",1),T=h>0?f.slice(0,h):f;mr(_.length,"bytes-received",T,g(_),"mqtt");try{switch(o?.receivedPacket?.(),E){case"connect":if(c.protocolVersion=_.protocolVersion,_.username)try{n=await it.getUser(_.username,_.password.toString(),r),(0,_d.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&rT.notify?.({username:n?.username,status:xr.AUTH_AUDIT_STATUS.SUCCESS,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(V){return(0,_d.get)(xr.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&rT.error?.({username:_.username,status:xr.AUTH_AUDIT_STATUS.FAILURE,type:xr.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",_,e,V),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",_,e),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(_,n),_.will){let V=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type")));_.will.data=_.will.payload?.length>0?V(_.will.payload):void 0,delete _.will.payload}o=HK({user:n,..._}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(V){return dr.error?.(V),s.events.emit("auth-failed",_,e,V),qn(!1,"connection","mqtt","connect"),m({cmd:"connack",reasonCode:V.code||5,returnCode:V.code||128})}s.events.emit("connected",o,e),qn(!0,"connection","mqtt","connect"),m({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((V,ne,Q,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",V);let W=V.indexOf("/",1),ae=W>0?V.slice(0,W):V;m({cmd:"publish",topic:V,payload:S(ne),messageId:Q||Math.floor(Math.random()*1e8),qos:de.qos},ae);let Oe=e._socket??e;return Oe.writableNeedDrain?new Promise(Ne=>Oe.once("drain",Ne)):!Oe.closed}catch(W){return dr.error?.(W),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let y=[];for(let V of _.subscriptions){let ne;try{let Q=await o.addSubscription(V,V.qos>=1);ne=Q?Q.qos||0:c.protocolVersion<5?128:143}catch(Q){s.events.emit("error",Q,e,V,o),Q.statusCode?Q.statusCode===500?dr.warn?.(Q):dr.info?.(Q):dr.error?.(Q),ne=c.protocolVersion<5?128:Q.statusCode===403?135:Q.statusCode===404?143:128}y.push(ne)}await o.committed,m({cmd:"suback",granted:y,messageId:_.messageId});break;case"unsubscribe":{let V=[];for(let ne of _.unsubscriptions)V.push(o.removeSubscription(ne)?0:17);m({cmd:"unsuback",granted:V,messageId:_.messageId});break}case"pubrel":m({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let I=_.qos===2?"pubrec":"puback",U=e.deserialize||(e.deserialize=Ro(r?.headers.get?.("content-type"))),X=(_.payload?.length||0)>0?U(_.payload):void 0,Y;try{Y=await o.publish(_,X)}catch(V){s.events.emit("error",V,e,_,o),dr.warn?.(V),_.qos>0&&m({cmd:I,messageId:_.messageId,reasonCode:128},_.topic);break}_.qos>0&&m({cmd:I,messageId:_.messageId,reasonCode:Y===!1?144:0},_.topic);break;case"pubrec":m({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(_.messageId);break;case"pingreq":m({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),qn(!0,"connection","mqtt","disconnect"),dr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,_,o),dr.error?.(y),m({cmd:"disconnect"})}function m(y,I){let U=(0,nT.generate)(y,c);t(U),mr(U.length,"bytes-sent",I,g(y),"mqtt")}a(m,"sendPacket");function g(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(g,"packetMethodName");function S(y){return qc(y,r)}a(S,"serialize")}),l.on("error",_=>{dr.warn("MQTT parsing error, closing connection:",_.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var nT,GK,_d,xr,kI,qK,rT,dr,$K,kK,tT,VK=Ie(()=>{nT=require("mqtt-packet");xK();GK=L(xn());$c();Ii();qr();_d=L(se()),xr=L(M()),kI=L(Sc()),qK=require("events"),rT=(0,kI.loggerWithTag)("auth-event"),dr=(0,kI.loggerWithTag)("mqtt"),$K=(0,_d.get)(xr.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(wpe,"bypassAuth");a(Cpe,"start");tT=0;a(FK,"onSocket")});var kf={};je(kf,{component_errors:()=>Ed,getComponentName:()=>Upe,loadComponent:()=>oT,loadComponentDirectories:()=>JK,setErrorReporter:()=>Mpe});function JK(e,t){t&&(qI=t),e&&($I=e);let r=[];if((0,Nt.existsSync)(GI)){let s=(0,Nt.readdirSync)(GI,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Ot.join)(GI,o);r.push(oT(c,qI,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(oT(n,qI,n,!1,null,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{QK=!0})}function Mpe(e){yE=e}async function oT(e,t,r,n,s,i){let o=(0,Nt.realpathSync)(e);if(sT.has(o))return sT.get(o);sT.set(o,!0),s&&($I=s);try{let c;n&&(Ed=new Map);let l=(0,Ot.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,Nt.existsSync)(l)?c=n?(0,aT.getConfigObj)():(0,YK.parseDocument)((0,Nt.readFileSync)(l,"utf8")).toJSON():c=VI;let u=(0,Ot.join)(e,"node_modules","harperdb");try{_l.isMainThread&&(n||(0,Nt.existsSync)(u)&&(0,Nt.realpathSync)(pd.PACKAGE_ROOT)!==(0,Nt.realpathSync)(u))&&((0,Nt.rmSync)(u,{recursive:!0,force:!0}),(0,Nt.existsSync)((0,Ot.join)(e,"node_modules"))||(0,Nt.mkdirSync)((0,Ot.join)(e,"node_modules")),(0,Nt.symlinkSync)(pd.PACKAGE_ROOT,u,"dir"))}catch(E){fd.default.error("Error symlinking harperdb module",E)}let d=iT,_=n;for(let E in c){iT=E;let f=c[E];if(Ed.set(n?E:(0,Ot.basename)(e),!1),!f)continue;let h,T=f.package;try{if(T){let I=e,U;for(;!(0,Nt.existsSync)(U=(0,Ot.join)(I,"node_modules",E));)if(I=(0,Ot.dirname)(I),I.length<(0,zK.getHdbBasePath)().length){U=null;break}if(U)h=await oT(U,t,r,!1),_=!0;else throw new Error(`Unable to find package ${E}:${T}`)}else h=Lpe[E];if(!h)continue;let m=a(I=>(I.origin=r,Et(I)),"ensureTable"),g=f.network||(f.port||f.securePort)&&f,S=g?.securePort||g?.https&&g.port,y=!g?.https&&g?.port;if(_l.isMainThread&&(h=await h.startOnMainThread?.({server:it,ensureTable:m,port:y,securePort:S,resources:t,...f})||h,n&&g))for(let I of[y,S])try{if(+I&&!KK.includes(I)){let U=KI.get(pd.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);U&&fd.default.warn("Session affinity is not recommended and may cause memory leaks"),(U||!AS)&&(KK.push(I),II(I,U))}}catch(U){console.error("Error listening on socket",I,U,E)}if(t.isWorker&&(h=await h.start?.({server:it,ensureTable:m,port:y,securePort:S,resources:t,...f})||h),$I.set(h,!0),(h.handleFile||h.handleDirectory||h.setupFile||h.setupDirectory)&&f.files!=null){if(f.files.includes(".."))throw(0,jK.handleHDBError)("Can not reference parent directories");let I=(0,Ot.join)(e,f.files).replace(/\\/g,"/"),U=I.indexOf("/*");if(U>-1&&f.files!==VI[E]?.files&&!(0,Nt.existsSync)(I.slice(0,U)))throw new Error(`The path '${I.slice(0,U)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let H=(0,Ot.basename)(e),X=f.path||"/";X=X.startsWith("/")?X:X.startsWith("./")?"/"+H+X.slice(2):X==="."?"/"+H:"/"+H+"/"+X;let Y,V,ne;if(f.root){let de=f.root;de.startsWith("/")&&(de=de.slice(1)),de.endsWith("/")&&(de=de.slice(0,-1)),de+="/",V=(0,Ot.join)(e,de)}else(ne=I.indexOf("/*"))>-1?(V=I.slice(0,ne+1),Y=(0,Ot.relative)(e,V)):f.files.indexOf("/")>-1&&(V=I.slice(0,I.lastIndexOf("/")+1),Y=(0,Ot.relative)(e,V));let Q=!1;if(_l.isMainThread&&h.setupDirectory&&(Q=await h.setupDirectory?.(X,V,t)),t.isWorker&&h.handleDirectory&&(Q=await h.handleDirectory?.(X,V,t)),Q){_=!0;continue}for(let de of await(0,WK.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:W,dirent:ae}=de;_=!0;let Oe=(0,Ot.relative)(e,W).replace(/\\/g,"/");if(Y)if(Oe.startsWith(Y))Oe=Oe.slice(Y.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${Oe}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ne=X+(X.endsWith("/")?"":"/")+Oe;try{if(ae.isFile()){let Me=await Ppe(W);_l.isMainThread&&await h.setupFile?.(Me,Ne,W,t),t.isWorker&&await h.handleFile?.(Me,Ne,W,t)}else _l.isMainThread&&await h.setupDirectory?.(Ne,W,t),t.isWorker&&await h.handleDirectory?.(Ne,W,t)}catch(Me){Me.message=`Could not load ${ae.isFile()?"file":"directory"} '${W}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${Me.message}`,yE?.(Me),((0,hd.getWorkerIndex)()===0?console:fd.default).error(Me),t.set(f.path||"/",new Xo(Me)),Ed.set(n?E:(0,Ot.basename)(e),Me.message)}}}}catch(m){m.message=`Could not load component '${E}' for application '${(0,Ot.basename)(e)}' due to: ${m.message}`,yE?.(m),((0,hd.getWorkerIndex)()===0?console:fd.default).error(m),t.set(f.path||"/",new Xo(m),null,!0),Ed.set(n?E:(0,Ot.basename)(e),m.message)}}if(iT=d,_l.isMainThread&&!QK&&i&&(0,hd.watchDir)(e,async()=>JK()),c.extensionModule){let E=await dS((0,Ot.join)(e,c.extensionModule));return sT.set(o,E),E}if(!_&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;yE?.(new Error(E)),((0,hd.getWorkerIndex)()===0?console:fd.default).error(E),Ed.set((0,Ot.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,yE?.(c),t.set("",new Xo(c))}}var Nt,Ot,_l,YK,KI,pd,WK,hd,fd,jK,zK,Dpe,aT,Ppe,GI,$I,QK,qI,Ed,Lpe,VI,KK,sT,yE,iT,Upe,Ff=Ie(()=>{Nt=require("fs"),Ot=require("path"),_l=require("worker_threads"),YK=require("yaml"),KI=L(se()),pd=L(M());eD();p$();g$();b$();O$();k$();SV();bV();WK=L(require("fast-glob")),hd=L(dt()),fd=L(j());cN();qr();jK=L(_e());De();_I();zK=L(se()),Dpe=L(bK());Nm();LK();us();VK();aT=L(Ct());RS();WR();({readFile:Ppe}=Nt.promises),GI=(0,aT.resolvePath)(KI.get(pd.CONFIG_PARAMS.COMPONENTSROOT)),$I=new Map,Ed=new Map;a(JK,"loadComponentDirectories");Lpe={REST:pS,rest:pS,graphql:oN,graphqlSchema:Rg,roles:aN,jsResource:uN,fastifyRoutes:DN,login:_N,static:PN,operationsApi:Dpe,customFunctions:{},http:{},clustering:UI,replication:oa,authentication:bf,mqtt:FI},VI={rest:!0,graphql:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(VI,"static",{value:{files:"web/**"}});KK=[],sT=new Map;a(Mpe,"setErrorReporter");Upe=a(()=>iT,"getComponentName");a(oT,"loadComponent")});var VS=N(($Le,ZK)=>{var{isMainThread:XK}=require("worker_threads"),{getTables:vpe,getDatabases:GLe,table:qLe}=(De(),oe(lt)),{loadComponentDirectories:Bpe,loadComponent:Hpe}=(Ff(),oe(kf)),{resetResources:xpe}=(Zl(),oe(n0)),kpe=rO(),Fpe=Ct(),{dirname:Gpe}=require("path"),{getConnection:qpe}=Tr(),$pe=se(),{CONFIG_PARAMS:Vpe}=M(),{loadCertificates:Kpe}=Js(),YI=new Map;async function Ype(e=!1){!XK&&$pe.get(Vpe.CLUSTERING_ENABLED)&&qpe();try{XK&&await kpe()}catch(n){console.error(n)}let t=xpe();vpe(),t.isWorker=e,await Kpe(),await Hpe(Gpe(Fpe.getConfigFilePath()),t,"hdb",!0,YI),await Bpe(YI,t);let r=[];for(let[n]of YI)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(Ype,"loadRootComponents");ZK.exports.loadRootComponents=Ype});var dt=N((KLe,oi)=>{"use strict";var{Worker:Wpe,MessageChannel:jpe,parentPort:Gi,isMainThread:JI,threadId:zpe,workerData:qi}=require("worker_threads"),{PACKAGE_ROOT:Qpe}=M(),{join:nY,isAbsolute:Jpe,extname:Xpe}=require("path"),{server:sY}=(qr(),oe(ja)),{watch:Zpe,readdir:eme}=require("fs/promises"),{totalmem:eY}=require("os"),bE=M(),iY=se(),$i=j(),{randomBytes:tme}=require("crypto"),{_assignPackageExport:rme}=_i(),nme=M(),tY=1024*1024,Ua=[],Ds=[],sme=50,XI=1e4,ime="restart",oY="request_thread_info",aY="resource_report",cY="thread_info",lY="added-port",ome="ack",WI;rme("threads",Ds);oi.exports={startWorker:jI,restartWorkers:ew,shutdownWorkers:dme,workers:Ua,setMonitorListener:Tme,onMessageFromWorkers:_me,onMessageByType:pY,broadcast:Eme,broadcastWithAcknowledgement:pme,setChildListenerByType:ume,getWorkerIndex:uY,getWorkerCount:dY,getTicketKeys:fY,setMainIsWorker:cme,setTerminateTimeout:ame,restartNumber:qi?.restartNumber||1};Ds.onMessageByType=pY;Ds.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ds.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};oi.exports.whenThreadsStarted=new Promise(e=>{oi.exports.threadsHaveStarted=e});var ZI;function ame(e){XI=e}a(ame,"setTerminateTimeout");function uY(){return qi?qi.workerIndex:ZI?0:void 0}a(uY,"getWorkerIndex");function dY(){return qi?qi.workerCount:ZI?1:void 0}a(dY,"getWorkerCount");function cme(e){ZI=e,oi.exports.threadsHaveStarted()}a(cme,"setMainIsWorker");var _Y=1,cT;function fY(){return cT||(cT=JI?tme(48):qi.ticketKeys,cT)}a(fY,"getTicketKeys");Object.defineProperty(sY,"workerIndex",{get(){return uY()}});Object.defineProperty(sY,"workerCount",{get(){return dY()}});var EY={[oY](e,t){mme(t)},[aY](e,t){Sme(t,e)}};function jI(e,t={}){let r=process.constrainedMemory?.()||eY();r=Math.min(r,eY(),2e4*tY);let n=iY.get(bE.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/tY/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of Ds){let u=new jpe;u.existingPort=l,i.push(u),o.push(u.port2)}Xpe(e)||(e+=".js");let c=new Wpe(Jpe(e)?e:nY(Qpe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:_Y=t.threadCount,name:t.name,restartNumber:oi.exports.restartNumber,ticketKeys:fY()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:lY,port:l,threadId:c.threadId},[l]);return uT(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>jI(e,t),c.on("error",l=>{$i.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Ua.splice(Ua.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<sme?(t.unexpectedRestarts=c.unexpectedRestarts+1,jI(e,t)):$i.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{EY[l.type]?.(l,c)}),Ua.push(c),Ame(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(jI,"startWorker");var lme=[bE.THREAD_TYPES.HTTP];async function ew(e=null,t=Math.max(_Y>3,1),r=!0){if(JI){if(r){let{loadRootComponents:o}=VS();await o()}oi.exports.restartNumber++,t<1&&(t=t*Ua.length);let n=[],s=[];for(let o of Ua.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;$i.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:oi.exports.restartNumber,type:bE.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=lme.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{$i.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},XI*2).unref();o.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&o.startCopy(),u()})});if(n.push(l),c&&r){let u=o.startCopy(),d=new Promise(_=>{let E=a(f=>{f.type===nme.ITC_EVENT_TYPES.CHILD_STARTED&&($i.trace("Worker has started",u.threadId),_(),s.splice(s.indexOf(d)),u.off("message",E))},"startListener");$i.trace("Waiting for worker to start",u.threadId),u.on("message",E)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Hu();r&&(e==="http"||!e)&&iY.get(bE.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Gi.postMessage({type:ime,workerType:e})}a(ew,"restartWorkers");function ume(e,t){EY[e]=t}a(ume,"setChildListenerByType");function dme(e){return ew(e,1/0,!1)}a(dme,"shutdownWorkers");var hY=[];function _me(e){hY.push(e)}a(_me,"onMessageFromWorkers");var zI=new Map;function pY(e,t){let r=zI.get(e);r||zI.set(e,r=[]),r.push(t)}a(pY,"onMessageByType");var fme=10;async function Eme(e,t){let r=0;for(let n of Ds)try{n.postMessage(e),r++>fme&&(r=0,await new Promise(setImmediate))}catch(s){$i.error("Unable to send message to worker",s)}t&&SY(e,null)}a(Eme,"broadcast");var lT=new Map,hme=1;function pme(e){return new Promise(t=>{let r=0;for(let n of Ds)try{let s=hme++,i=a(()=>{lT.delete(s),--r===0&&t(),n!==Gi&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,lT.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of lT)o.port===n&&o()})),n.postMessage(e),r++}catch(s){$i.error("Unable to send message to worker",s)}r===0&&t()})}a(pme,"broadcastWithAcknowledgement");function mme(e){e.postMessage({type:cY,workers:mY()})}a(mme,"sendThreadInfo");function mY(){let e=Date.now();return Ua.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(mY,"getChildWorkerInfo");function Sme(e,t){e.resources=t,e.resources.updated=Date.now()}a(Sme,"recordResourceReport");var QI;function Tme(e){QI=e}a(Tme,"setMonitorListener");var gme=1e3,rY=!1;function Ame(){rY||(rY=!0,setInterval(()=>{for(let e of Ua){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}QI&&QI()},gme).unref())}a(Ame,"startMonitoring");var Rme=1e3;if(Gi&&qi?.addPorts){uT(Gi);for(let e=0,t=qi.addPorts.length;e<t;e++){let r=qi.addPorts[e];r.threadId=qi.addThreadIds[e],uT(r)}setInterval(()=>{let e=process.memoryUsage();Gi.postMessage({type:aY,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Rme).unref(),WI=a(()=>new Promise((e,t)=>{Gi.on("message",r),Gi.postMessage({type:oY});function r(n){n.type===cY&&(Gi.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else WI=mY;oi.exports.getThreadInfo=WI;function uT(e,t){Ds.push(e),e.on("message",r=>{if(r.type===lY)r.port.threadId=r.threadId,uT(r.port);else if(r.type===ome){let n=lT.get(r.id);n&&n()}else SY(r,e)}).on("close",()=>{Ds.splice(Ds.indexOf(e),1)}).on("exit",()=>{Ds.splice(Ds.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(uT,"addPort");function SY(e,t){for(let n of hY)n(e,t);let r=zI.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){$i.error(s)}}a(SY,"notifyMessageListeners");if(JI){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await eme(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(nY(s,o.name));try{for await(let{filename:o}of Zpe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await ew(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");oi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else Gi.on("message",async e=>{let{type:t}=e;t===bE.ITC_EVENT_TYPES.SHUTDOWN&&(oi.exports.restartNumber=e.restartNumber,Gi.unref(),setTimeout(()=>{$i.warn("Thread did not voluntarily terminate",zpe),process.exit(0)},XI).unref())})});var rv={};je(rv,{AUDIT_STORE_OPTIONS:()=>Sf,Decoder:()=>Oc,HAS_CURRENT_RESIDENCY_ID:()=>Ja,HAS_EXPIRATION_EXTENDED_TYPE:()=>Zd,HAS_ORIGINATING_OPERATION:()=>Xd,HAS_PREVIOUS_RESIDENCY_ID:()=>Xa,REMOTE_SEQUENCE_UPDATE:()=>Pp,createAuditEntry:()=>Pl,getLastRemoved:()=>Cy,openAuditStore:()=>hT,readAuditEntry:()=>xt,removeAuditEntry:()=>pT,setAuditRetention:()=>bme,transactionKeyEncoder:()=>wY});function hT(e){let t=e.auditStore=e.openDB(tw.AUDIT_STORE_NAME,{create:!1,...Sf});t||(t=e.auditStore=e.openDB(tw.AUDIT_STORE_NAME,Sf),gY(t,1)),t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,t.deleteCallbacks=r,{remove(){delete r[i]}}};let n=null;function s(i=dT){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c,l;try{for(let{key:u,value:d}of t.getRange({start:1,snapshot:!1,end:Date.now()-rw}))if(c=pT(t,u,d),l=u,await new Promise(setImmediate),++o>=yme){i=10;break}await c}finally{o===0?i=Math.min(i<<1,rw/10):gY(t,l),s(i)}},i).unref()}if(a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,NE.getWorkerIndex)()===(0,NE.getWorkerCount)()-1&&s(dT),(0,NE.getWorkerIndex)()===0&&!TY)for(let i of t.getKeys({reverse:!0,limit:1}))i>Date.now()&&(TY=!0,ET.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function pT(e,t,r){if((Ome(r)&15)===nw){let n=xt(r),s=n.tableId;e.deleteCallbacks?.[s]?.(n.recordId)}return e.remove(t)}function gY(e,t){sw[0]=t,e.put(Symbol.for("last-removed"),CY)}function Cy(e){let t=e.get(Symbol.for("last-removed"));if(t)return CY.set(t),sw[0]}function bme(e,t=dT){rw=e,dT=t}function Pl(e,t,r,n,s,i,o,c,l,u,d,_,E){let f=DY[o];if(!f)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?va.setFloat64(0,n):Ps.set(kg),h=9),l){if(l&16761087)throw new Error("Illegal extended type");h++}g(s),g(t),m(r),va.setFloat64(h,e),h+=8,l&Ja&&g(u),l&Xa&&g(d),l&Zd&&(va.setFloat64(h,_),h+=8),l&Xd&&g(PY[E]),i?m(i):Ps[h++]=0,l?va.setUint16(n?8:0,f|l|32768):Ps[n?8:0]=f;let T=Ps.subarray(0,h);if(c)return Buffer.concat([T,c]);return T;function m(S){let y=h;h+=1,h=(0,fl.writeKey)(S,Ps,h);let I=h-y-1;I>127?I>16383?(ET.error("Key or username was too large for audit entry",S),h=y+1,Ps[y]=0):(Ps.copyWithin(y+2,y+1,h),va.setUint16(y,I|32768),h++):Ps[y]=I}function g(S){S<128?Ps[h++]=S:S<16384?(va.setUint16(h,S|32768),h+=2):S<1056964608?(va.setUint32(h,S|3221225472),h+=4):(Ps[h]=255,va.setUint32(h+1,S),h+=5)}}function Ome(e){let t=0;e[0]==66&&(t=8);let r=e[t];if(r<128)return r;let n=e.dataView||(e.dataView=new Oc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function xt(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new Oc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),o=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,_=n.readFloat64(),E,f,h,T;if(i&Ja&&(E=n.readInt()),i&Xa&&(f=n.readInt()),i&Zd&&(h=n.readFloat64()),i&Xd){let S=n.readInt();T=PY[S]}l=n.readInt();let m=n.position,g=n.position+=l;return{type:DY[i&7],tableId:c,nodeId:o,get recordId(){return(0,fl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:_,previousLocalTime:s,get user(){return g>m?(0,fl.readKey)(e,m,g):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(S,y,I){if(i&_T||i&OE&&!y)return S.decoder.decode(e.subarray(n.position,r));if(i&OE&&I)return iw(S.getEntry(this.recordId),I,S)},getBinaryValue(){return i&(_T|OE)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:E,previousResidencyId:f,expiresAt:h,originatingOperation:T}}catch(n){return ET.error("Reading audit entry error",n,e),{}}}var fl,fT,tw,NY,NE,IY,ET,Ps,va,wY,Sf,rw,yme,sw,CY,dT,TY,_T,OE,AY,nw,RY,yY,bY,OY,Pp,Ja,Xa,Xd,Zd,DY,PY,Oc,ji=Ie(()=>{fl=require("ordered-binary"),fT=L(se()),tw=L(Ht()),NY=L(M()),NE=L(dt()),IY=L(re());Ll();ET=L(j());mT();(0,fT.initSync)();Ps=Buffer.alloc(2816),va=new DataView(Ps.buffer,Ps.byteOffset,2816),wY={writeKey(e,t,r){return e===Jd?(t.set(Jd,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,fl.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,fl.readKey)(e,t,r)}},Sf={encoding:"binary",keyEncoder:wY},rw=(0,IY.convertToMS)((0,fT.get)(NY.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,yme=1e3,sw=new Float64Array(1),CY=new Uint8Array(sw.buffer),dT=1e4,TY=!1;a(hT,"openAuditStore");a(pT,"removeAuditEntry");a(gY,"updateLastRemoved");a(Cy,"getLastRemoved");a(bme,"setAuditRetention");_T=16,OE=32,AY=1,nw=2,RY=3,yY=4,bY=5,OY=6,Pp=11,Ja=512,Xa=1024,Xd=2048,Zd=4096,DY={put:AY|_T,[AY]:"put",delete:nw,[nw]:"delete",message:RY|_T,[RY]:"message",invalidate:yY|OE,[yY]:"invalidate",patch:bY|OE,[bY]:"patch",relocate:OY,[OY]:"relocate"},PY={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(Pl,"createAuditEntry");a(Ome,"readAction");a(xt,"readAuditEntry");Oc=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var ow={};je(ow,{add:()=>ST,applyReverse:()=>LY,getRecordAtTime:()=>iw,rebuildUpdateBefore:()=>TT});function ST(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 TT(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,ST(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function LY(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=Nme[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=MY}}function iw(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=xt(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":LY(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===MY&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=xt(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let _ in d)o[_]&&(s[_]=d[_],o[_]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var Nme,MY,mT=Ie(()=>{ji();a(ST,"add");ST.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)};Nme={add:ST};a(TT,"rebuildUpdateBefore");a(LY,"applyReverse");MY={};a(iw,"getRecordAtTime")});function es(e){return e[_r]||(e[_r]=Object.create(null))}function bT(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,l,u;if(o.resolve)u={get(){return o.resolve(this,this[Fe])},set(d){return o.set(this,d)},configurable:!0};else{switch(o.type){case"String":l=a(function(d){if(!(typeof d=="string"||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a string, attempt to assign ${d}`);es(this)[c]=d},"set");break;case"ID":l=a(function(d){if(!(typeof d=="string"||d?.length>0&&d.every?.(_=>typeof _=="string")||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a string, attempt to assign ${d}`);es(this)[c]=d},"set");break;case"Float":case"Number":l=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="number"||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a number, attempt to assign ${_}`);es(this)[c]=d},"set");break;case"Int":l=a(function(d){let _=d?.__op__?d.value:d;if(!(_>>0===_||d==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs((_>>0)-_)<=1)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new Ls.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${d}`);es(this)[c]=d},"set");break;case"Long":l=a(function(d){let _=d?.__op__?d.value:d;if(!(Math.round(_)===d&&Math.abs(_)<=9007199254740992||d==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs(_)<=9007199254740992)_=Math.round(_),d?.__op__?d.value=_:d=_;else throw new Ls.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${d}`);es(this)[c]=d},"set");break;case"BigInt":l=a(function(d){let _=d?.__op__?d.value:d;if(!(typeof _=="bigint"||d==null&&o.nullable!==!1))if(typeof _=="string"||typeof _=="number")_=BigInt(_),d?.__op__?d.value=_:d=_;else throw new Ls.ClientError(`${c} must be a number, attempt to assign ${d}`);es(this)[c]=d},"set");break;case"Boolean":l=a(function(d){if(!(typeof d=="boolean"||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a boolean, attempt to assign ${d}`);es(this)[c]=d},"set");break;case"Date":l=a(function(d){if(!(d instanceof Date||d==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=new Date(d);else throw new Ls.ClientError(`${c} must be a Date, attempt to assign ${d}`);es(this)[c]=d},"set");break;case"Bytes":l=a(function(d){if(!(d instanceof Uint8Array||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${d}`);es(this)[c]=d},"set");break;case"Any":case void 0:l=a(function(d){es(this)[c]=d},"set");break;default:l=a(function(d){if(!(typeof d=="object"||d==null&&o.nullable!==!1))throw new Ls.ClientError(`${c} must be an object, attempt to assign ${d}`);es(this)[c]=d},"set")}u={get(){let d=this[_r];if(d&&c in d){let E=d[c];if(E?.__op__){let f=this[ve]?.[c];return E.update(f)}return E}let _=this[ve]?.[c];if(_&&typeof _=="object"){let E=vY(_,o);if(E)return d||(d=this[_r]=Object.create(null)),d[c]=E}return _},set:l,enumerable:!0,configurable:!0}}u.get.isAttribute=!0,n[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let l=this[_r];return l?.[o]!==void 0?l[o]:this[ve]?.[o]}),i("set",function(o,c){let l=n[o];if(l)return l.set.call(this,c);if(t.sealed)throw new Ls.ClientError("Can not add a property to a sealed table schema");es(this)[o]=c}),i("deleteProperty",function(o){es(this)[o]=void 0}),i("toJSON",function(){let o=this[_r],c;for(let u in o){c||(c={...this[ve]});let d=o[u];if(d?.__op__){let _=c[u];d=d.update(_)}c[u]=d}return Object.keys(this).length>0&&(c||(c={...this[ve]}),Object.assign(c,this)),c||this[ve]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function vY(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[ve])throw new Error("Can not track an already tracked object, check for circular references");this[ve]=s}},bT(r,t)),new r(e)):new gT(e);case Array:let n=new RT(e.length);n[ve]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=vY(o,t?.elements)),n[s]=o}return n;default:return e}}function op(e){let t=e[_r],r;for(let s in t){r||(r={...e[ve]});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=op(i);r[s]=i}return Object.keys(e).length>0&&(r||(r={...e[ve]}),Object.assign(r,e)),r||e[ve]}function hl(e,t=e[_r]){let r;if(UY.call(e,ve)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=hl(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e[ve]});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=ow[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=hl(s);r[n]=s}return r?Object.freeze(r):UY.call(e,ve)?e[ve]:e}function AT(e){let t=e[ve];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[El]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.[ve]===s){if(AT(i))return!0}else return!0}}else{let r=e[_r];if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s[ve]===i){if(AT(s))return!0}else return!0}else return!0}}return!1}var Ls,_r,gT,UY,El,RT,yT,ap=Ie(()=>{Vs();Ls=L(_e());mT();_r=Symbol("own-data");a(es,"getChanges");a(bT,"assignTrackedAccessors");a(vY,"trackObject");gT=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[ve])throw new Error("Can not track an already tracked object, check for circular references");this[ve]=t}};bT(gT,{});a(op,"collapseData");UY=Object.prototype.hasOwnProperty;a(hl,"updateAndFreeze");a(AT,"hasChanges");El=Symbol.for("has-array-changes"),RT=class extends Array{static{a(this,"TrackedArray")}[El];constructor(t){super(t)}splice(...t){return this[El]=!0,super.splice(...t)}push(...t){return this[El]=!0,super.push(...t)}pop(){return this[El]=!0,super.pop()}unshift(...t){return this[El]=!0,super.unshift(...t)}shift(){return this[El]=!0,super.shift()}};RT.prototype.constructor=Array;yT=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var uR={};je(uR,{CONTEXT:()=>Fe,ID_PROPERTY:()=>ze,IS_COLLECTION:()=>ai,MultiPartId:()=>NT,RECORD_PROPERTY:()=>ve,Resource:()=>Pr,snake_case:()=>wme,transformForSelect:()=>IT});function wme(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function BY(e,t){if(pl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(pl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new NT;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){pl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return pl=!0,null;e[e.length-1]==="/"&&(pl=!0)}return t.coerceId(decodeURIComponent(e))}function ts(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r?(o?(d=i,o=o[Fe]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i[Fe]||i):d=i:(d=s,s=void 0,c=d[ze]??d[this.primaryKey]),c===null&&(u=!0)):i?o=i[Fe]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="object"&&s){if(l=s,typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let T=this.parseQuery(c.slice(f+1));l?T&&(l=Object.assign(T,l)):l=T,c=c.slice(0,f)}let h=this.parsePath(c,o,l);h?.id!==void 0?(h.query&&(l?l=Object.assign(h.query,l):l=h.query),u=h.isCollection,c=h.id):c=h}else if(s[Symbol.iterator]){c=[],u=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=null,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new el(c),c==null&&(u=!0);o||(o={});let _;if(l?.ensureLoaded!=null||l?.async||u?(_={...t},l?.ensureLoaded!=null&&(_.ensureLoaded=l.ensureLoaded),l?.async&&(_.async=l.async),u&&(_.isCollection=!0)):_=t,o.transaction){let f=this.getResource(c,o,_);return f.then?f.then(E):E(f)}else return Dt(o,()=>{let f=this.getResource(c,o,_);return f.then?f.then(E):E(f)},_);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,l,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,d,o):f.allowUpdate(o.user,d,o):t.type==="create"?f.allowCreate(o.user,d,o):f.allowDelete(o.user,l,o);if(h?.then)return h.then(T=>{if(!T)throw new OT(o.user);return typeof d?.then=="function"?d.then(m=>e(f,l,o,m)):e(f,l,o,d)});if(!h)throw new OT(o.user)}return typeof d?.then=="function"?d.then(h=>e(f,l,o,h)):e(f,l,o,d)}a(E,"authorizeActionOnResource")}}function rs(e,t){let r=new kY.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let n of["get","put","post","delete","query","move","copy"])typeof e[n]=="function"&&r.allow.push(n);throw r}function aw(e,t,r){let n=e[ve];if(n){let s=e[_r];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function IT(e,t){let r=t?.propertyResolvers,n=t[Fe],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):aw(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(aw(l,r,n));for(let _ of e)u.push(d(_));return u},"transform");let o=e.forceNulls;return a(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(E=>E&&typeof E=="object"?c(E):E);let u={},d=i(aw(l,r,n)),_;for(let E of e){let f=d(E);f===void 0&&o&&(f=null),f?.then?(_||(_=[]),_.push(f.then(h=>u[E.name||E]=h))):u[E.name||E]=f}return _?Promise.all(_).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=IT(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var HY,xY,kY,Fe,ze,ai,ve,Ime,Pr,OT,pl,NT,Vs=Ie(()=>{HY=require("crypto");Cl();xY=L(_i()),kY=L(_e());ap();pc();tE();Fe=Symbol.for("context"),ze=Symbol.for("primary-key"),ai=Symbol("is-collection"),ve=Symbol("stored-record"),Ime={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Pr=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[ze]=t;let n=r?.[Fe];this[Fe]=n!==void 0?n:r||null}static get=ts(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=IT(l,t.constructor);return typeof c?.map=="function"?c.map(u):u(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=ts(function(t,r,n,s){if(Array.isArray(s)&&t[ai]){let i=[],o=n.authorize;for(let c of s){let l=t.constructor,u=l.getResource(c[l.primaryKey],n,{async:!0});u.then?i.push(u.then(d=>d.put(c,n))):i.push(u.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):rs(t,"put")},{hasContent:!0,type:"update"});static patch=ts(function(t,r,n,s){return t.patch?t.patch(s,r):rs(t,"patch")},{hasContent:!0,type:"update"});static delete=ts(function(t,r,n,s){return t.delete?t.delete(r):rs(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,HY.randomUUID)()}static create(t,r,n){let s;return t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),n||(n={}),Dt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):rs(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>i):i})}static invalidate=ts(function(t,r,n,s){return t.invalidate?t.invalidate(r):rs(t,"delete")},{hasContent:!1,type:"update"});static post=ts(function(t,r,n,s){return t[ze]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=ts(function(t,r,n,s){return t.connect?t.connect(s,r):rs(t,"connect")},{hasContent:!0,type:"read"});static subscribe=ts(function(t,r,n,s){return t.subscribe?t.subscribe(r):rs(t,"subscribe")},{type:"read"});static publish=ts(function(t,r,n,s){return t[ze]!=null&&t.update?.(),t.publish?t.publish(s,r):rs(t,"publish")},{hasContent:!0,type:"create"});static search=ts(function(t,r,n,s){let i=t.search?t.search(r):rs(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=IT(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=ts(function(t,r,n,s){return t.search?t.search(s,r):rs(t,"search")},{hasContent:!0,type:"read"});static copy=ts(function(t,r,n,s){return t.copy?t.copy(s,r):rs(t,"copy")},{hasContent:!0,type:"create"});static move=ts(function(t,r,n,s){return t.move?t.move(s,r):rs(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this[ai])return(await this.constructor.create(this[ze],t,this[Fe]))[ze];rs(this,"post")}static isCollection(t){return t?.[ai]}static coerceId(t){return t}static parseQuery(t){return ES(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Ime[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:BY(t,this),isCollection:pl}}let i=BY(t,this);return pl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[Fe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u[ze]===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let _=d[ze],E=u.get(_);E?E.push(d):u.set(_,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s[ai]=!0),s}subscribe(t){return new Pn}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new Pn}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ze]}getContext(){return this[Fe]}};Pr.prototype[Fe]=null;(0,xY._assignPackageExport)("Resource",Pr);a(wme,"snake_case");OT=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(BY,"pathToId");NT=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(ts,"transactional");a(rs,"missingMethod");a(aw,"selectFromObject");a(IT,"transformForSelect")});var bO={};je(bO,{EVICTED:()=>ya,INVALIDATED:()=>Os,coerceType:()=>CT,makeTable:()=>LT,setServerUtilities:()=>Hme,updateResource:()=>DT});function LT(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:_,splitSegments:E,replicate:f}=e,{expirationMS:h,evictionMS:T,audit:m,trackDeletes:g}=e,{attributes:S}=e;S||(S=[]);let y=qg(i,n,l),I,U,H={},X=Promise.resolve(),Y,V,ne;for(let v of S)(v.assignCreatedTime||v.name==="__createdtime__")&&(Y=v),(v.assignUpdatedTime||v.name==="__updatedtime__")&&(V=v),v.expiresAt&&(ne=v),v.isPrimaryKey&&(H=v);let Q,de=[],W=[],ae=1,Oe=2,Ne={},Me={},Gr=864e5,Nd,ka,wn,Id=!1,Ol,Lw=new Map,KE=new Map,vt,Fa,Ga=Sd.get(Ms.CONFIG_PARAMS.REPLICATION_DATABASES);if(Array.isArray(Ga)){for(let v of Ga)if(v.name===c&&v.replicateTo>=0){Fa=v.replicateTo;break}}let Us=i.getRange({start:!1,end:!1}).constructor,vs=10,YE=6;m&&ie();class Ve extends Pr{static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=m;static databasePath=o;static databaseName=c;static attributes=S;static replicate=f;static sealed=_;static splitSegments=E??!0;static createdTimeProperty=Y;static updatedTimeProperty=V;static propertyResolvers;static userResolvers={};static sources=[];static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(p,A){if(A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource)p.intermediateSource=!0,this.sources.unshift(p);else{if(this.sources.some(O=>!O.intermediateSource)){if(this.sources.some(O=>O.name===p.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(p)}U=U||p.get&&(!p.get.reliesOnPrototype||p.prototype.get),I=I||p.load;let w=a(O=>{let B=this.sources;if(B=B.filter(k=>k.intermediateSource&&k[O]&&(!k[O].reliesOnPrototype||k.prototype[O])),B.length>0)if(B.length===1){let k=B[0];return(C,F,x)=>{if(C?.source!==k)return k[O](F,x,C)}}else return(k,C,F)=>{let x=[];for(let q of B){if(k?.source===q)break;x.push(q[O](C,F,k))}return Promise.all(x)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1];R.intermediateSource&&(R={});let b=a(O=>{if(R[O]&&(!R[O].reliesOnPrototype||R.prototype[O]))return(B,k,C)=>{if(!B?.source)return R[O](k,C,B)}},"getApplyToCanonicalSource");Ne={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Me={put:w("put"),patch:w("patch"),delete:w("delete"),publish:w("publish"),invalidate:w("invalidate")};let D=R.shouldRevalidateEvents;return(async()=>{let O=!1,B,k=a(async(C,F)=>{let x=C.value,q=C.table?We[c][C.table]:Ve;if(c===Ms.SYSTEM_SCHEMA_NAME&&(C.table===Ms.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===Ms.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(O=!0),C.id===void 0&&(C.id=x[q.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));C.source=p;let ee={residencyId:tt(C.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:C.nodeId},G=await q.getResource(C.id,F,ee);switch(C.type){case"put":return D?G._writeInvalidate(ee):G._writeUpdate(x,!0,ee);case"patch":return D?G._writeInvalidate(ee):G._writeUpdate(x,!1,ee);case"delete":return G._writeDelete(ee);case"publish":return G._writePublish(x,ee);case"invalidate":return G._writeInvalidate(ee);case"relocate":return G._writeRelocate(ee);default:qe.default.error?.("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=p.subscribe;C&&g==null&&(g=!0);let F={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},x=p.subscribeOnThisThread?p.subscribeOnThisThread((0,ml.getWorkerIndex)(),F):(0,ml.getWorkerIndex)()===0,q=C&&x&&await p.subscribe?.(F);if(q){let ee;for await(let G of q)try{if(!(G.type==="transaction"?G.writes[0]:G)){qe.default.error?.("Bad subscription event",G);continue}if(G.source=p,G.type==="end_txn"){if(ee?.resolve(),G.localTime&&B!==G.localTime){if(G.remoteNodeIds?.length>0){let Ae=[Symbol.for("seq"),G.remoteNodeIds[0]],te=d.get(Ae),K=te?.nodes;K||(K=[]);for(let Be of G.remoteNodeIds.slice(1)){let we=K.find(ce=>ce.id===Be);K=K.filter(ce=>ce.id!==Be||ce===we),we||(we={id:Be,seqId:0},K.push(we)),we.seqId=Math.max(te?.seqId??1,G.localTime),Be===ee?.nodeId&&(we.lastTxnTime=G.timestamp)}let ge=Math.max(te?.seqId??1,G.localTime);qe.default.trace?.("Received txn",c,ge,G.localTime,G.remoteNodeIds),d.put(Ae,{seqId:ge,nodes:K})}B=G.localTime}G.onCommit&&ee?.committed.then(G.onCommit);continue}if(ee)if(G.beginTxn)ee.resolve();else{ee.write_promises.push(k(G,ee));continue}!G.timestamp&&G.version&&(G.timestamp=G.version);let Ee=Dt(G,()=>{if(G.type==="transaction"){let Ae=[];for(let te of G.writes)try{Ae.push(k(te,G))}catch(K){throw K.message+=" writing "+JSON.stringify(te)+" of event "+JSON.stringify(G),K}return Promise.all(Ae)}else if(G.type==="define_schema"){let Ae=this.attributes.slice(0),te;for(let K of G.attributes)Ae.find(ge=>ge.name===K.name)||(Ae.push(K),te=!0);te&&(Et({table:s,database:c,attributes:Ae,origin:"cluster"}),DE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return G.beginTxn?(ee=G,ee.write_promises=[k(G,G)],new Promise(Ae=>{ee.resolve=()=>Ae(Promise.all(ee.write_promises))})):k(G,G)});ee&&(ee.committed=Ee),O&&Ee&&!Ee?.waitingForUserChange&&(Ee.then(()=>DE.signalUserChange(new PE.UserEventMsg(process.pid))),Ee.waitingForUserChange=!0),G.onCommit&&(Ee?Ee.then(G.onCommit):G.onCommit())}catch(Re){qe.default.error?.("error in subscription handler",Re)}}}catch(C){qe.default.error?.(C)}})(),this}static get isCaching(){return U}static get shouldRevalidateEvents(){return this.prototype.get!==Ve.prototype.get}static getResource(p,A,w){let R=super.getResource(p,A,w);if(p!=null){Yi(p);try{if(R.hasOwnProperty(ve))return R;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let b=!w?.async||i.cache?.get?.(p),D=Ir(A),O=D.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return $a(p,A,{transaction:O,ensureLoaded:w?.ensureLoaded},b,B=>{if(B?DT(R,B):R[ve]=null,A.onlyIfCached&&A.noCacheStore){if(!R.doesExist())throw new Or.ServerError("Entry is not cached",504)}else if(w?.ensureLoaded){let k=wd(p,B,A,R);if(k)return D?.disregardReadTxn(),R[cw]=!0,uw(k,C=>(DT(R,C),R))}return R})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(p)),b}}return R}ensureLoaded(){let p=wd(this[ze],this[kr],this[Fe]);if(p)return this[cw]=!0,uw(p,A=>{this[kr]=A,this[ve]=A.value,this[wE]=A.version})}static getNewId(){let p=H?.type;if(p==="String"||p==="ID")return super.getNewId();if(!vt){let b=i.getEntry(Symbol.for("id_allocation")),D=b?.value,O;if(D&&D.nodeName===server.hostname&&(!kme(i)||D.pid===process.pid)){let B=D.start,k=D.end;O=B;for(let C of i.getKeys({start:k,end:B,limit:1,reverse:!0}))O=C}else D=R(b?.version??null),O=D.start;vt=new BigInt64Array([BigInt(O)+1n]),vt=new BigInt64Array(i.getUserSharedBuffer("id",vt.buffer)),vt.maxSafeId=D.end}let A=Number(Atomics.add(vt,0,1n)),w=p==="Int"?512:1048576;if(A+w>=vt.maxSafeId){let b=a(D=>{vt.maxSafeId=A+(p==="Int"?1023:4194303);let O=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,B=D?void 0:i.useReadTransaction(),k=Number(vt[0]);for(let x of i.getKeys({start:k+1,end:O,limit:1,transaction:B}))O=x;B?.done();let{value:C,version:F}=i.getEntry(Symbol.for("id_allocation"));if(vt.maxSafeId<O){if(C.end>vt.maxSafeId-100)return;qe.default.info?.("New id allocation",A,vt.maxSafeId,F),i.put(Symbol.for("id_allocation"),{start:C.start,end:vt.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),F)}else{qe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${vt.maxSafeId}, but id of ${O} detected`);let x=R(F);x.alreadyUpdated||Atomics.store(vt,0,BigInt(x.start+1)),vt.maxSafeId=x.end}},"updateEnd");A+w===vt.maxSafeId?setImmediate(b):A+100>=vt.maxSafeId&&(qe.default.warn?.(`Synchronous id allocation required on table ${s}${p=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return A;function R(b){let D=(p==="Int"?Math.pow(2,31):Math.pow(2,49))-1,O=D/4,B,k,C=!1,F,x;do{F=Math.floor(Math.random()*D),x={start:F,end:F+(p==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},B=0;for(let q of i.getKeys({start:F,limit:1,reverse:!0}))B=q;k=D;for(let q of i.getKeys({start:F+1,end:D,limit:1}))k=q;O*=.875,O<1e3&&!C&&(C=!0,qe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${p==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,F,B,k,O))}while(!(O<k-F&&(O<F-B||B===0)));return i.transactionSync(()=>{let q=i.getEntry(Symbol.for("id_allocation"));return(q?.version??null)==b?(qe.default.info?.("Allocated new id range",x),i.put(Symbol.for("id_allocation"),x,Date.now()),x):(qe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...q.value})})}}static setTTLExpiration(p){if(typeof p=="number")h=p*1e3,T||(T=0);else if(p&&typeof p=="object")h=p.expiration*1e3,T=(p.eviction||0)*1e3,Gr=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");Gr=Gr||(h+T)/4,Ho()}static getResidencyRecord(p){return d.get([Symbol.for("residency_by_id"),p])}static setResidency(p){Ve.getResidency=p}static setResidencyById(p){Ve.getResidencyById=p}static getResidency(p,A,w){if(Ve.getResidencyById)return Ve.getResidencyById(p[t]);let R=Fa;if(A.replicateTo!=null){if(Array.isArray(A.replicateTo))return A.replicateTo.includes(server.hostname)?A.replicateTo:[server.hostname,...A.replicateTo];A.replicateTo>=0&&(R=A.replicateTo)}if(R>=0&&server.nodes){let b=[server.hostname];if(w)b.push(...w.slice(0,R));else{let D=server.nodes.map(k=>k.name),O=Math.floor(D.length*Math.random());b.push(...D.slice(O,O+R));let B=O+R-D.length;B>0&&b.push(...D.slice(0,B))}return b}}static enableAuditing(p=!0){m=p,p&&ie(),Ve.audit=p}static coerceId(p){return p===""?null:CT(p,H)}static async dropTable(){if(delete We[c][s],c===o){for(let p of S)d.remove(Ve.tableName+"/"+p.name),r[p.name]?.drop();d.remove(Ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));DE.signalSchemaChange(new PE.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(p){if(typeof p=="string")return this.getProperty(p);if(this[ai])return this.search(p);if(this[ze]===null){if(p?.conditions)return this.search(p);let A=Ve.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S}}if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Fe]?.returnNonexistent)return this}allowRead(p,A){let w=Va(p);if(w?.read){if(w.isSuperUser)return!0;let R=w.attribute_permissions,b=A?.select;if(R?.length>0||Id&&b){if(A||(A={}),b){let D=R?.length>0&&lw(R,"read");A.select=b.map(O=>{let B=O.name||O;if(!D||D[B]){let k=wn[B]?.definition?.tableClass;if(k){if(O.name||(O={name:O}),!k.prototype.allowRead.call(null,p,O))return!1;if(!O.select)return O.name}return O}}).filter(Boolean)}else A.select=R.filter(D=>D.read&&!wn[D.attribute_name]).map(D=>D.attribute_name);return A}else return!0}}allowUpdate(p,A){let w=Va(p);if(w?.update){let R=w.attribute_permissions;if(R?.length>0){let b=lw(R,"update");for(let D in A)if(!b[D])return!1;for(let D of R){let O=D.attribute_name;!D.update&&!(O in A)&&(A[O]=this.getProperty(O))}}return Ka(this[Fe])}}allowCreate(p,A){if(this[ai]){let w=Va(p);if(w?.insert){let R=w.attribute_permissions;if(R?.length>0){let b=lw(R,"insert");for(let D in A)if(!b[D])return!1;return Ka(this[Fe])}else return Ka(this[Fe])}}else return this.allowUpdate(p,{})}allowDelete(p){return Va(p)?.delete&&Ka(this[Fe])}update(p,A){if(!Ir(this[Fe]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let R;return typeof p=="object"&&p&&(A?(Object.isFrozen(p)&&(p={...p}),this[ve]={},this[_r]=p):(R=this[_r],R&&(p=Object.assign(R,p)),this[_r]=R=p)),this._writeUpdate(this[_r],A),this}addTo(p,A){if(typeof A=="number"||typeof A=="bigint")this[IE]===GY?this.set(p,(+this.getProperty(p)||0)+A):(this[IE]||this.update(),this.set(p,new yT(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(p,A){if(typeof A=="number")return this.addTo(p,-A);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[kr]}invalidate(){this._writeInvalidate()}_writeInvalidate(p){let A=this[Fe],w=this[ze];Yi(w),Ir(this[Fe]).addWrite({key:w,store:i,invalidated:!0,entry:this[kr],before:Ne.invalidate?.bind(this,A,w),beforeIntermediate:Me.invalidate?.bind(this,A,w),commit:a((b,D)=>{if(ui(b,D,p?.nodeId)<=0)return;let O=null;for(let B in r)O||(O={}),O[B]=this.getProperty(B);qe.default.trace?.(`Invalidating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),y(w,O,this[kr],b,Os,m,{user:A?.user,residencyId:p?.residencyId,nodeId:p?.nodeId},"invalidate")},"commit")})}_writeRelocate(p){let A=this[Fe],w=this[ze];Yi(w),Ir(this[Fe]).addWrite({key:w,store:i,invalidated:!0,entry:this[kr],before:Ne.relocate?.bind(this,A,w),beforeIntermediate:Me.relocate?.bind(this,A,w),commit:a((b,D)=>{if(ui(b,D,p?.nodeId)<=0)return;let O=Ve.getResidencyRecord(p.residencyId),B=0,k=null,C=D?.value;if(O&&!O.includes(server.hostname)){for(let F in r)k||(k={}),k[F]=C(F);B=Os}else k=C;qe.default.trace?.(`Relocating entry id: ${w}, timestamp: ${new Date(b).toISOString()}`),y(w,k,this[kr],b,B,m,{user:A.user,residencyId:p.residencyId,nodeId:p.nodeId,expiresAt:p.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(p,A){let w={previousResidency:this.getResidencyRecord(p.residencyId),isRelocation:!0},R=this.getResidency(A.value,w),b;if(R){if(!Array.isArray(R))throw new Error("Residency must be an array, but was: "+R);if(!R.includes(server.hostname))return;b=tt(R)}let O=y(p.key,A.value,p,p.version,0,!0,{residencyId:b,expiresAt:A.expiresAt},"relocate",!1,null)}static evict(p,A,w){let R=this.Source,b;if(!((U||m)&&(!A||(b=i.getEntry(p),!b||!A)||b.version!==w))){if(U){if(i.hasLock(p,b.version))return;let D;for(let O in r)D||(D={}),D[O]=A[O];if(D)return y(p,D,b,w,ya,null,null,null,!0)}return i.ifVersion(p,w,()=>{qa(p,A,null)}),m?y(p,null,b,w,ya,null,null,null,!0):i.remove(p,w)}}lock(){throw new Error("Not yet implemented")}static operation(p,A){return p.table||=s,p.schema||=c,zY.operation(p,A)}put(p){this.update(p,!0)}patch(p){this.update(p,!1)}_writeUpdate(p,A,w){let R=this[Fe],b=Ir(R),D=this[ze];Yi(D);let O=this[kr];this[IE]=A?GY:Ume;let B={key:D,store:i,entry:O,nodeName:R?.nodeName,validate:a(k=>{p||(p=this[_r]),A||p&&AT(this[_r]===p?this:p)?R?.source||(b.checkOverloaded(),this.validate(p,!A),V&&(p[V.name]=V.type==="Date"?new Date(k):V.type==="String"?new Date(k).toISOString():k),A&&(t&&p[t]!==D&&(p[t]=D),Y&&(O?.value?p[Y.name]=O?.value[Y.name]:p[Y.name]=Y.type==="Date"?new Date(k):Y.type==="String"?new Date(k).toISOString():k),p=hl(p))):b.removeWrite(B)},"validate"),before:A?Ne.put?()=>Ne.put(R,D,p):null:Ne.patch?()=>Ne.patch(R,D,p):Ne.put?()=>Ne.put(R,D,hl(this)):null,beforeIntermediate:A?Me.put?()=>Me.put(R,D,p):null:Me.patch?()=>Me.patch(R,D,p):Me.put?()=>Me.put(R,D,hl(this)):null,commit:a((k,C,F)=>{if(F){if(R&&C?.version>(R.lastModified||0)&&(R.lastModified=C.version),this[kr]=C,C?.value?.[ve])throw new Error("Can not assign a record to a record, check for circular references");A||(this[ve]=C?.value??null)}this[_r]=void 0,this[wE]=k;let x=C?.value,q=p;this[IE]=0;let ee=ui(k,C,w?.nodeId),G;if(ee<=0)if(m){let K=C.localTime,ge=C.version;qe.default.trace?.("Applying CRDT update to record with id: ",D,"applying later update:",ge);let Be=[];for(;K>k||ge>=k&&K>0;){let we=l.get(K);if(!we)break;let ce=xt(we);if(ge=ce.version,ge>=k){if(ge===k){if(ee=ui(k,{version:ge,localTime:K},w?.nodeId),ee===0)return;if(ee>0)continue}if(ce.type==="patch")Be.push(ce),G=p;else if(ce.type==="put"||ce.type==="delete")return}K=ce.previousLocalTime}Be.sort((we,ce)=>we.version-ce.version);for(let we of Be){let ce=we.getValue(i);if(q=TT(q,ce,A),qe.default.debug?.("Rebuilding update with future patch:",q),!q)return}}else{if(A)return;q=TT(q,x,A),qe.default.debug?.("Rebuilding update without audit:",q)}let Re;if(A?Re=q:(this[ve]=x,Re=hl(this,q)),this[ve]=Re,Re?.[ve])throw new Error("Can not assign a record to a record, check for circular references");let Ee;if(w?.residencyId!=null)Ee=w.residencyId;else{O?.residencyId&&(R.previousResidency=Ve.getResidencyRecord(O.residencyId));let K=Ve.getResidency(Re,R);if(K){if(!Array.isArray(K))throw new Error("Residency must be an array, got: "+K);K.includes(server.hostname)||K.push(server.hostname)}Ee=tt(K)}A||(G=p);let Ae=R?.expiresAt??(h?h+Date.now():-1);qe.default.trace?.(`Saving record with id: ${D}, timestamp: ${new Date(k).toISOString()}${Ae?", expires at: "+new Date(Ae).toISOString():""}${C?", replaces entry from: "+new Date(C.version).toISOString():", new entry"}`,Re),qa(D,x,Re);let te=A?"put":"patch";y(D,Re,C,k,0,m,{user:R?.user,residencyId:Ee,expiresAt:Ae,nodeId:w?.nodeId,originatingOperation:R?.originatingOperation},te,!1,G),R.expiresAt&&Ho()},"commit")};b.addWrite(B)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[ai]){for await(let A of this.search(p))(await Ve.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[ve]?this._writeDelete(p):!1}_writeDelete(p){let A=Ir(this[Fe]),w=this[ze];Yi(w);let R=this[Fe];return A.addWrite({key:w,store:i,resource:this,nodeName:R?.nodeName,before:Ne.delete?.bind(this,R,w),beforeIntermediate:Me.delete?.bind(this,R,w),commit:a((b,D,O)=>{let B=D?.value;O&&(R&&D?.version>(R.lastModified||0)&&(R.lastModified=D.version),DT(this,D)),!(ui(b,D,p?.nodeId)<=0)&&(qa(this[ze],B),qe.default.trace?.(`Deleting record with id: ${w}, txn timestamp: ${new Date(b).toISOString()}`),m||g?(y(w,null,this[kr],b,0,m,{user:R?.user,nodeId:p?.nodeId},"delete"),m||Ho()):i.remove(this[ze]))},"commit")}),!0}search(p){let A=this[Fe],w=Ir(A);if(!p)throw new Error("No query provided");let R=p.conditions;R?R.length===void 0&&(R=R[Symbol.iterator]?Array.from(R):[R]):R=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[ze]&&(R=[{attribute:null,comparator:Array.isArray(this[ze])?"prefix":"starts_with",value:this[ze]}].concat(R));let b,D={};function O(K,ge){let Be;switch(ge){case"and":case void 0:if(K.length<1)throw new Error('An "and" operator requires at least one condition');Be=!0;break;case"or":if(K.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+ge)}for(let we of K){if(we.conditions){we.conditions=O(we.conditions,we.operator);continue}let ce=we[0]??we.attribute,Ye=ce==null?H:Mi(S,ce);if(Ye)(Ye.type||fN[we.comparator])&&(we[1]===void 0?we.value=k(we.value,Ye):we[1]=k(we[1],Ye));else if(ce!=null)throw(0,Or.handleHDBError)(new Error,`${ce} is not a defined attribute`,404);if(we.chainedConditions)if(we.chainedConditions.length===1&&(!we.operator||we.operator=="and")){let rt=we.chainedConditions[0],Ze,st;if(rt.comparator==="gt"||rt.comparator==="greater_than"||rt.comparator==="ge"||rt.comparator==="greater_than_equal"?(Ze=we,st=rt):(Ze=rt,st=we),Ze.comparator!=="lt"&&Ze.comparator!=="less_than"&&Ze.comparator!=="le"&&Ze.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let Bt=st.comparator==="ge"||st.comparator==="greater_than_equal",xo=Ze.comparator==="le"||Ze.comparator==="less_than_equal";we.comparator=(Bt?"ge":"gt")+(xo?"le":"lt"),we.value=[st.value,Ze.value]}else throw new Error("Multiple chained conditions are not currently supported")}return K}a(O,"prepareConditions");function B(K,ge){if(p.enforceExecutionOrder)return K;for(let Be of K)Be.conditions&&(Be.conditions=B(Be.conditions,Be.operator));return K.length>1&&ge!=="or"?(0,WY.sortBy)(K,fS(Ve)):K}a(B,"orderConditions");function k(K,ge){return Array.isArray(K)?K.map(Be=>CT(Be,ge)):CT(K,ge)}a(k,"coerceTypedValues");let C=p.operator;(R.length>0||C)&&(R=O(R,C));let F=typeof p.sort=="object"&&p.sort,x;if(F&&C!=="or"){let K=F.attribute;if(K==null)throw new Or.ClientError("Sort requires an attribute");if(b=R.find(ge=>Ju(ge.attribute)===Ju(K)),!b){let ge=Mi(S,K);if(!ge)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(K)?K.join("."):K} is not a defined attribute`,404);if(ge.indexed)b={attribute:K,comparator:"sort"},R.push(b);else if(R.length===0&&!p.allowFullScan)throw(0,Or.handleHDBError)(new Error,`${Array.isArray(K)?K.join("."):K} is not indexed and not combined with any other conditions`,404)}b&&(b.descending=!!F.descending)}R=B(R,C),F&&(b&&R[0]===b?F.next&&(x={dbOrderedAttribute:F.attribute,attribute:F.next.attribute,descending:F.next.descending,next:F.next.next}):(b&&R.splice(R.indexOf(b),1),x=F));let q=p.select;if(R.length===0&&(R=[{attribute:t,comparator:"greater_than",value:!0}]),p.explain)return{conditions:R,operator:C,postOrdering:x,selectApplied:!!q};let ee=w.useReadTxn(),G=EN(R,C,Ve,ee,p,A,(K,ge)=>Cd(K,q,A,ee,ge),D),Re=p.ensureLoaded!==!1;x||(G=te(G));let Ee=Ve.transformEntryForSelect(q,A,ee,D,Re,!0),Ae=Ve.transformToOrderedSelect(G,q,x,ee,A,Ee);function te(K){return p.offset||p.limit!==void 0?K.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0):K}return a(te,"applyOffset"),x&&(Ae=te(Ae)),Ae.onDone=()=>{Ae.onDone=null,w.doneReadTxn()},Ae.selectApplied=!0,Ae.getColumns=()=>{if(q){let K=[];for(let ge of q)ge==="*"?K.push(...S.map(Be=>Be.name)):K.push(ge.name||ge);return K}return S.filter(K=>!K.computed&&!K.relationship).map(K=>K.name)},Ae}static transformToOrderedSelect(p,A,w,R,b,D){let O=new Us;if(w){p=Cd(p,A,R,b,null);let B;O.iterate=function(){let C,F=p[Symbol.asyncIterator]?p[Symbol.asyncIterator]():p[Symbol.iterator](),x,q=w.dbOrderedAttribute,ee,G,Re=!0;function Ee(te){let K=te.next&&Ee(te.next),ge=te.descending;return(Be,we)=>{let ce=Nl(Be,te.attribute,R),Ye=Nl(we,te.attribute,R),rt=ge?(0,Sl.compareKeys)(Ye,ce):(0,Sl.compareKeys)(ce,Ye);return rt===0?K?.(Be,we)||0:rt}}a(Ee,"createComparator");let Ae=Ee(w);return{async next(){let te;if(C)if(te=C.next(),te.done){if(x)return O.onDone&&O.onDone(),te}else return{value:await D.call(this,te.value)};B=[],ee&&B.push(ee);do if(te=await F.next(),te.done){if(x=!0,B.length)break;return O.onDone&&O.onDone(),te}else{let K=te.value;if(K?.then&&(K=await K),q){let ge=Nl(K,q,R);if(Re)Re=!1,G=ge;else if(ge!==G){G=ge,ee=K;break}}B.push(K)}while(!0);return w.isGrouped,B.sort(Ae),C=B[Symbol.iterator](),te=C.next(),te.done?(O.onDone&&O.onDone(),te):{value:await D.call(this,te.value)}},return(){O.onDone&&O.onDone(),F.return()},throw(){O.onDone&&O.onDone(),F.throw()}}};let k=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let F=0;F<A.length;F++){let x=A[F],q;if(x.name===C.attribute[0]){for(q=x.sort||(x.sort={});q.next;)q=q.next;q.attribute=C.attribute.slice(1),q.descending=C.descending}else x===C.attribute[0]&&(A[F]=q={name:x,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&k(C.next)},"applySortingOnSelect");k(w)}else O.iterate=(p[Symbol.asyncIterator]||p[Symbol.iterator]).bind(p),O=O.map(function(B){try{let k=D.call(this,B);return typeof k?.catch=="function"?k.catch(C=>{throw C.partialObject={[t]:B.key},C}):k}catch(k){throw k.partialObject={[t]:B.key},k}});return O}static transformEntryForSelect(p,A,w,R,b,D){if(p&&(p===t||p?.length===1&&p[0]===t&&Array.isArray(p))){let C=a(F=>(A?.transaction?.stale&&(A.transaction.stale=!1),F?.key??F),"transform");return p===t?C:p.asArray?F=>[C(F)]:F=>({[t]:C(F)})}let O;b&&U&&!(typeof p=="string"?[p]:p)?.every(C=>{let F;return typeof C=="object"?F=C.name:F=C,r[F]||F===t})&&(O=!0);let B,k=a(function(C){let F;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(F=C.value||C.deref?.()?.value,!F&&(C.key===void 0||C.deref)||C.metadataFlags&Os){if(C.metadataFlags&Os&&A.replicateFrom===!1&&D&&C.residencyId)return Ba.SKIP;if(C=$a(C.key??C,A,{transaction:w,lazy:p?.length<4,ensureLoaded:b},this?.isSync,x=>x),C?.then)return C.then(k.bind(this));F=C?.value}if(O&&C?.metadataFlags&(Os|ya)||C?.expiresAt!=null&&C?.expiresAt<Date.now()){if(A.onlyIfCached&&A.noCacheStore)return{[t]:C.key,message:"This entry has expired"};let x=wd(C.key??C,C,A);if(x?.then)return x.then(k)}}if(F==null)return D?Ba.SKIP:F;if(p&&!(p[0]==="*"&&p.length===1)){let x,q=a((G,Re)=>{let Ee;typeof G=="object"?Ee=G.name:Ee=G;let Ae=wn?.[Ee],te;if(Ae){let K=R?.[Ee];if(K)if(K.hasMappings){let Be=Ae.from?F[Ae.from]:Ju(C.key);te=K.get(Be),te||(te=[])}else te=K.fromRecord?.(F);else te=Ae(F,A,C);let ge=a(Be=>{if(Be&&typeof Be=="object"){let we=Ae.definition?.tableClass||Ve;B||(B={});let ce=B[Ee]||(B[Ee]=we.transformEntryForSelect(Ee===G?null:G.select||(Array.isArray(G)?G:null),A,w,K,b));if(Array.isArray(Be)){let Ye=[],rt=we.transformToOrderedSelect(Be,G.select,typeof G.sort=="object"&&G.sort,A,w,ce)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),Ze=a(Bt=>{for(;!Bt.done;){if(Bt?.then)return Bt.then(Ze);Ye.push(Bt.value),Bt=rt.next()}Re(Ye,Ee)},"nextValue"),st=Ze(rt.next());st&&(x||(x=[]),x.push(st));return}else if(Be=ce.call(this,Be),Be?.then){x||(x=[]),x.push(Be.then(Ye=>Re(Ye,Ee)));return}}Re(Be,Ee)},"handleResolvedValue");te?.then?(x||(x=[]),x.push(te.then(ge))):ge(te);return}else te=F[Ee],te&&typeof te=="object"&&Ee!==G&&(te=Ve.transformEntryForSelect(G.select||G,A,w,null)({value:te}));Re(te,Ee)},"selectAttribute"),ee;if(typeof p=="string")q(p,G=>{ee=G});else if(Array.isArray(p))if(p.asArray)ee=[],p.forEach((G,Re)=>{G==="*"?p[Re]=F:q(G,Ee=>ee[Re]=Ee)});else{ee={};let G=p.forceNulls;for(let Re of p)if(Re==="*")for(let Ee in F)ee[Ee]=F[Ee];else q(Re,(Ee,Ae)=>{Ee===void 0&&G&&(Ee=null),ee[Ae]=Ee})}else throw new Or.ClientError("Invalid select"+p);return x?Promise.all(x).then(()=>ee):ee}return F},"transform");return k}async subscribe(p){if(!l)throw new Error("Can not subscribe to a table without an audit log");m||Et({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),p||(p={});let A=!p.rawEvents,w=[],R=this,b=QR(Ve,this[ze]??null,function(O,B,k,C){try{let F=B.getValue?.(i,A),x=B.type;if(!F&&x==="patch"&&A){let ee=i.getEntry(O);ee?.version===B.version?F=ee.value:F=B.getValue?.(i,!0,k),x="put"}let q={id:O,localTime:k,value:F,version:B.version,type:x,beginTxn:C};w?w.push(q):this.send(q)}catch(F){qe.default.error?.(F)}},p.startTime||0,p),D=(async()=>{this[ai]&&(b.includeDescendants=!0,p.onlyChildren&&(b.onlyChildren=!0)),p.supportsTransactions&&(b.supportsTransactions=!0);let O=this[ze],B=p.previousCount;B>1e3&&(B=1e3);let k=p.startTime;if(this[ai]){if(k){if(B)throw new Or.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:C,value:F}of l.getRange({start:k,exclusiveStart:!0,snapshot:!1})){let x=xt(F);if(x.tableId!==n)continue;let q=x.recordId;if(O==null||KY(O,q)){let ee=x.getValue(i,A,C);if(b.send({id:q,localTime:C,value:ee,version:x.version,type:x.type}),b.queue?.length>$Y&&await b.waitForDrain()===!1)return}b.startTime=C}}else if(B){let C=[];for(let{key:F,value:x}of l.getRange({start:"z",end:!1,reverse:!0}))try{let q=xt(x);if(q.tableId!==n)continue;let ee=q.recordId;if(O==null||KY(O,ee)){let G=q.getValue(i,A,F);if(C.push({id:ee,localTime:F,value:G,version:q.version,type:q.type}),--B<=0)break}}catch(q){qe.default.error("Error getting history entry",F,q)}for(let F=C.length;F>0;)b.send(C[--F]);C[0]&&(b.startTime=C[0].localTime)}else if(!p.omitCurrent){for(let{key:C,value:F,version:x,localTime:q}of i.getRange({start:O??!1,end:O==null?void 0:[O,Sl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(F&&(b.send({id:C,localTime:q,value:F,version:x,type:"put"}),b.queue?.length>$Y&&await b.waitForDrain()===!1))return}}else{B&&!k&&(k=0);let C=this[kr]?.localTime;if(C===Gg&&(i.cache?.delete(O),this[kr]=i.getEntry(O),qe.default.trace?.("re-retrieved record",C,this[kr]?.localTime),C=this[kr]?.localTime),qe.default.trace?.("Subscription from",k,"from",O,C),k<C){let F=[],x=C;do{let q=l.get(x);if(q){p.omitCurrent=!0;let ee=xt(q),G=ee.getValue(i,A,x);A&&(ee.type="put"),F.push({id:O,value:G,localTime:x,...ee}),x=ee.previousLocalTime}else break;B&&B--}while(x>k&&B!==0);for(let q=F.length;q>0;)b.send(F[--q]);b.startTime=C}!p.omitCurrent&&this.doesExist()&&b.send({id:O,localTime:C,value:this[ve],version:this[wE],type:"put"})}for(let C of w)b.send(C);w=null})();return p.listener&&b.on("data",p.listener),b}static subscribeOnThisThread(p,A){return p===0||A?.crossThreads===!1}doesExist(){return!!(this[ve]||this[IE])}publish(p,A){this._writePublish(p,A)}_writePublish(p,A){let w=Ir(this[Fe]),R=this[ze]||null;R!=null&&Yi(R);let b=this[Fe];w.addWrite({key:R,store:i,entry:this[kr],nodeName:b?.nodeName,validate:a(()=>{b?.source||(w.checkOverloaded(),this.validate(p))},"validate"),before:Ne.publish?.bind(this,b,R,p),beforeIntermediate:Me.publish?.bind(this,b,R,p),commit:a((D,O,B)=>{O===void 0&&g&&!m&&Ho(),qe.default.trace?.(`Publishing message to id: ${R}, timestamp: ${new Date(D).toISOString()}`),y(R,O?.value??null,O,O?.version||D,0,!0,{user:b?.user,residencyId:A?.residencyId,expiresAt:b?.expiresAt,nodeId:A?.nodeId},"message",!1,p)},"commit")})}validate(p,A){let w,R=a((b,D,O)=>{if(D.type&&b!=null)if(A&&b.__op__&&(b=b.value),D.properties){typeof b!="object"&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be an object${D.type?" ("+D.type+")":""}`);let B=D.properties;for(let k=0,C=B.length;k<C;k++){let F=B[k],x=R(b[F.name],F,O+"."+F.name);x&&(b[F.name]=x)}if(D.sealed&&b!=null&&typeof b=="object")for(let k in b)B.find(C=>C.name===k)||(w||(w=[])).push(`Property ${k} is not allowed within object in property ${O}`)}else switch(D.type){case"Int":(typeof b!="number"||b>>0!==b)&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(B=>typeof B=="string")||(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a string`);break;case"Boolean":typeof b!="boolean"&&(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a bigint`)}break;case"Bytes":b instanceof Uint8Array||(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(D.elements)for(let B=0,k=b.length;B<k;B++){let C=b[B],F=R(C,D.elements,O+"[*]");F&&(b[B]=F)}}else(w||(w=[])).push(`Value ${ci(b)} in property ${O} must be a Buffer or Uint8Array`);break}D.nullable===!1&&b==null&&(w||(w=[])).push(`Property ${O} is required (and not does not allow null values)`)},"validateValue");for(let b=0,D=S.length;b<D;b++){let O=S[b];if(!(O.relationship||O.computed)&&(!A||O.name in p)){let B=R(p[O.name],O,O.name);B&&(p[O.name]=B)}}if(_)for(let b in p)S.find(D=>D.name===b)||(w||(w=[])).push(`Property ${b} is not allowed`);if(w)throw new Or.ClientError(w.join(". "))}getUpdatedTime(){return this[wE]}wasLoadedFromSource(){return U?!!this[cw]:void 0}static async addAttributes(p){let A=S.slice(0);for(let w of p){if(!w.name)throw new Or.ClientError("Attribute name is required");if(w.name.match(/[`/]/))throw new Or.ClientError("Attribute names cannot include backticks or forward slashes");(0,jY.validateAttribute)(w.name),A.push(w)}return Et({table:s,database:c,schemaDefined:u,attributes:A}),Ve.indexingOperation}static async removeAttributes(p){let A=S.filter(w=>!p.includes(w.name));return Et({table:s,database:c,schemaDefined:u,attributes:A}),Ve.indexingOperation}static getSize(){let p=i.getStats();return(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getAuditSize(){let p=l?.getStats();return p&&(p.treeBranchPageCount+p.treeLeafPageCount+p.overflowPages)*p.pageSize}static getRecordCount(p){let A=i.getStats().entryCount,w=1e3/2,R=performance.now(),b=Math.floor(A/2),D=p?.exactCount,O=0,B=0,k;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&O++,B++,!D&&B<b&&performance.now()-R>w){k=B;break}if(k){let C=O;O=0;for(let{value:te}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:k}))te!=null&&O++;let F=k*2,x=(O+C)/F,q=Math.pow((O-C+1)/k/2,2)+x*(1-x)/F,ee=Math.max(Math.sqrt(q)*A,1),G=Math.round(x*A),Re=Math.max(G-1.96*ee,O+C),Ee=Math.min(G+1.96*ee,A),Ae=Math.pow(10,Math.round(Math.log10(ee)));return Ae>G&&(Ae=Ae/10),O=Math.round(G/Ae)*Ae,{recordCount:O,estimatedRange:[Math.round(Re),Math.round(Ee)]}}return{recordCount:O}}static updatedAttributes(){wn=this.propertyResolvers={$id:a((p,A,w)=>({value:w.key}),"$id"),$updatedtime:a((p,A,w)=>w.version,"$updatedtime"),$record:a((p,A,w)=>w?{value:p}:p,"$record")};for(let p of this.attributes){p.resolve=null;let A=p.relationship,w=p.computed;if(A)if(p.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),w&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),Id=!0,A.to)p.elements?.definition?(wn[p.name]=p.resolve=(R,b,D)=>{let O=R[A.from?A.from:t],B=p.elements.definition.tableClass;return D?Qu({attribute:A.to,value:O},Ir(b).getReadTxn(),!1,B,!1).asArray:B.search([{attribute:A.to,value:O}],b).asArray},p.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},p.resolve.definition=p.elements.definition,A.from&&(p.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${p.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let R=p.definition||p.elements?.definition;R?(wn[p.name]=p.resolve=(b,D,O)=>{let B=b[A.from];if(B!==void 0){if(p.elements){let k,C=B?.map(F=>{let x=O?R.tableClass.primaryStore.getEntry(F,{transaction:Ir(D).getReadTxn()}):R.tableClass.get(F,D);return x?.then&&(k=!0),x});return A.filterMissing?k?Promise.all(C).then(F=>F.filter(YY)):C.filter(YY):k?Promise.all(C):C}return O?R.tableClass.primaryStore.getEntry(B,{transaction:Ir(D).getReadTxn()}):R.tableClass.get(B,D)}},p.set=(b,D)=>{if(Array.isArray(D)){let O=D.map(B=>B[ze]||B[R.tableClass.primaryKey]);b[A.from]=O}else{let O=D[ze]||D[R.tableClass.primaryKey];b[A.from]=O}},p.resolve.definition=p.definition||p.elements?.definition,p.resolve.from=A.from):console.error(`The relationship property "${p.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${p.name}" in table "${s}" must use either "from" or "to" arguments`);else w&&(typeof w.from=="function"&&this.setComputedAttribute(p.name,w.from),wn[p.name]=p.resolve=(R,b,D)=>{let O=typeof w.from=="string"?R[w.from]:R,B=this.userResolvers[p.name];if(B)return B(O,b,D);qe.default.warn(`Computed attribute "${p.name}" does not have a function assigned to it. Please use setComputedAttribute('${p.name}', resolver) to assign a resolver function.`),this.userResolvers[p.name]=()=>{}})}bT(this,this)}static setComputedAttribute(p,A){let w=Mi(S,p);if(!w){console.error(`The attribute "${p}" does not exist in the table "${s}"`);return}if(!w.computed){console.error(`The attribute "${p}" is not defined as computed in the table "${s}"`);return}this.userResolvers[p]=A}static async deleteHistory(p=0,A=!1){let w;for(let{key:R,value:b}of l.getRange({start:0,end:p}))await md(),xt(b).tableId===n&&(w=pT(l,R,b));if(A)for(let{key:R,value:b,localTime:D}of i.getRange({start:0,versions:!0}))await md(),b===null&&D<p&&(w=i.remove(R));await w}static async*getHistory(p=0,A=1/0){for(let{key:w,value:R}of l.getRange({start:p||1,end:A})){await md();let b=xt(R);b.tableId===n&&(yield{id:b.recordId,localTime:w,version:b.version,type:b.type,value:b.getValue(i,!0,w),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(p){let A=[];if(p==null)throw new Error("An id is required");let w=i.getEntry(p);if(!w)return A;let R=w.localTime;if(!R)throw new Error("The entry does not have a local audit time");let b=0;do{await md();let D=l.get(R);if(D){let O=xt(D);A.push({id:O.recordId,localTime:R,version:O.version,type:O.type,value:O.getValue(i,!0,R),user:O.user}),R=O.previousLocalTime}else break}while(b<1e3&&R);return A.reverse()}static cleanup(){Q?.remove()}}Ve.updatedAttributes();let is=Ve.prototype;return is[Mme]=!0,h&&Ve.setTTLExpiration(h/1e3),ne&&Se(),Ve;function qa(v,p,A){let w;for(let R in r){let b=r[R],D=b.isIndexing,O=wn[R],B=A&&(O?O(A):A[R]),k=p&&(O?O(p):p[R]);if(B===k&&!D)continue;w=!0;let C=b.indexNulls,F=(0,CE.getIndexedValues)(B,C),x=(0,CE.getIndexedValues)(k,C);if(x?.length>0){let q=new Set(x);if(F=F?F.filter(ee=>{if(q.has(ee))q.delete(ee);else return!0}):[],x=Array.from(q),(x.length>0||F.length>0)&&FY){let ee=x.concat(F).map(G=>({key:G,value:v}));b.prefetch(ee,VY)}for(let ee=0,G=x.length;ee<G;ee++)b.remove(x[ee],v)}else F?.length>0&&FY&&b.prefetch(F.map(q=>({key:q,value:v})),VY);if(F)for(let q=0,ee=F.length;q<ee;q++)b.put(F[q],v)}return w}a(qa,"updateIndices");function Yi(v){switch(typeof v){case"number":return!0;case"string":if(v.length<659)return!0;if(v.length>qY)throw new Error("Primary key size is too large: "+v.length);break;case"object":if(v===null)throw new Error("Invalid primary key of null");break;case"bigint":if(v<2n**64n&&v>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof v)}if((0,Sl.writeKey)(v,vme,0)>qY)throw new Error("Primary key size is too large: "+v.length);return!0}a(Yi,"checkValidId");function $a(v,p,A,w,R){if(Ve.getResidencyById&&A.ensureLoaded&&p?.replicateFrom!==!1){let D=Ve.getResidencyById(v);if(D&&!D.includes(server.hostname)&&I)return I({key:v,residency:D}).then(R)}let b=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),A.transaction?.isDone)return R(null,v);let D=i.getEntry(v,A);return D?.residencyId&&D.metadataFlags&Os&&I&&A.ensureLoaded&&p?.replicateFrom!==!1?I(D).then(O=>R(O,v)):(D&&p&&(D?.version>(p.lastModified||0)&&(p.lastModified=D.version),D?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=D.localTime)),R(D,v))},"whenPrefetched");return w?b():ae>0?(ae--,b()):new Promise((D,O)=>{ae===0?(ae--,i.prefetch([v],()=>{B(),k()})):(de.push(v),W.push(k),de.length>YE&&(ae--,B()));function B(){if(de.length>0){let C=W;i.prefetch(de,()=>{ae===-1?B():ae++;for(let F of C)F()}),de=[],W=[],Oe>2&&Oe--}else ae=Oe,Oe<vs&&Oe++}a(B,"prefetch");function k(){try{D(b())}catch(C){O(C)}}a(k,"load")})}a($a,"loadLocalRecord");function Va(v){if(!v?.role)return;let p=v.role.permission;if(p.super_user)return Bme;let A=p[c],w,R=A?.tables;if(R)return R[s];if(c==="data"&&(w=p[s])&&!w.tables)return w}a(Va,"getTablePermissions");function wd(v,p,A,w){if(U){let R=!1;if(A.noCache?R=!0:(p?(!p.value||p.metadataFlags&(Os|ya)||p.expiresAt!=null&&p.expiresAt<Date.now())&&(R=!0):R=!0,qn(!R,"cache-hit",s)),R){let b=Dd(v,p,A).then(D=>(D?.value?.[ve]&&qe.default.error?.("Can not assign a record with a record property"),A&&(D?.version>(A.lastModified||0)&&(A.lastModified=D.version),A.lastRefreshed=Date.now()),D));if(A?.onlyIfCached||p?.value&&w?.allowStaleWhileRevalidate?.(p,v)){if(b.catch(D=>qe.default.warn?.(D)),A?.onlyIfCached&&!w.doesExist())throw new Or.ServerError("Entry is not cached",504);return}else return b}}else if(p?.value&&p.expiresAt!=null&&p.expiresAt<Date.now())return Ve.evict(p.key,p.value,p.version),p.value=null,{then(R){return R(p)}}}a(wd,"ensureLoadedFromSource");function Ir(v){let p=v?.transaction;if(p){if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let A=p.next;if(!A)return p=p.next=new hc,p.lmdbDb=i,p;p=A}while(!0)}else return new np}a(Ir,"txnForContext");function Nl(v,p,A){if(!v)return;let w=v.value||i.getEntry(v.key)?.value;if(typeof p=="object"){let b=wn,D=w;for(let O=0,B=p.length;O<B;O++){let k=p[O],C=b?.[k];D=C&&D?C(D,A,!0)?.value:D?.[k],b=C?.definition?.tableClass?.propertyResolvers}return D}let R=wn[p];return R?R(w,A):w[p]}a(Nl,"getAttributeValue");function Cd(v,p,A,w,R){let b=R?.length,D={transaction:w,lazy:b>0||typeof p=="string"||p?.length<4,alwaysPrefetch:!0},O;function B(k,C){let F=k?.value;if(!F)return Ba.SKIP;for(let x=0;x<b;x++)if(!O?.includes(x)&&!R[x](F,k))return Ba.SKIP;return C!==void 0&&(k.key=C),k}if(a(B,"processEntry"),b>0||!v.hasEntries){let k=v.map(C=>{if(O=null,typeof C=="object"&&C?.key!==void 0)return b>0?B(C):C;if(C==null)return Ba.SKIP;for(let F=0;F<b;F++){let q=R[F].idFilter;if(q){if(!q(C))return Ba.SKIP;O||(O=[]),O.push(F)}}return $a(C,A,D,!1,B)});return Array.isArray(v)&&(k=k.filter(C=>C!==Ba.SKIP)),k.hasEntries=!0,k}return v}a(Cd,"transformToEntries");function ui(v,p,A=server.replication?.getThisNodeId(l)){if(v<=p?.version){if(p?.version===v&&A!==void 0){let w=server.replication?.exportIdMapping(l),R=p.localTime,b=R&&l.get(R);if(b){let D,O,B=xt(b);for(let k in w)w[k]===A&&(D=k),w[k]===B.nodeId&&(O=k);if(D>O)return 1;if(D===O)return 0}}return-1}return 1}a(ui,"precedesExistingVersion");async function Dd(v,p,A){let w=p?.metadataFlags,R=p?.version,b,D;if(!i.attemptLock(v,R,()=>{clearTimeout(D);let C=i.getEntry(v);!C||!C.value||C.metadataFlags&(Os|ya)?b(Dd(v,i.getEntry(v),A)):b(C)}))return new Promise(C=>{b=C,D=setTimeout(()=>{i.unlock(v,R)},Lme)});let O=p?.value,B={requestContext:A,replacingRecord:O,replacingEntry:p,replacingVersion:R,noCacheStore:!1,source:null,resourceCache:A?.resourceCache},k=A?.responseHeaders;return new Promise((C,F)=>{let x;uw(Dt(B,async q=>{let ee=performance.now(),G,Re,Ee;try{for(let ge of Ve.sources)if(ge.get&&(!ge.get.reliesOnPrototype||ge.prototype.get)){if(ge.available?.(p)===!1)continue;if(B.source=ge,G=await ge.get(v,B),G)break}Ee=w&Os;let te=B.lastModified||Ee&&R;Re=Ee||te>R||!O,te||(te=(0,CE.getNextMonotonicTime)());let K=performance.now()-ee;if(mr(K,"cache-resolution",s,null,"success"),k&&ym(k,"Server-Timing",`cache-resolve;dur=${K.toFixed(2)}`,!0),q.timestamp=te,h&&B.expiresAt==null&&(B.expiresAt=Date.now()+h),G){if(typeof G!="object")throw new Error("Only objects can be cached and stored in tables");if(G.status>0&&G.headers)if(G.status>=300)if(G.status===304)G=O,te=R;else throw new Or.ServerError(G.body||"Error from source",G.status);else G=G.body;typeof G.toJSON=="function"&&(G=G.toJSON()),t&&G[t]!==v&&(G[t]=v)}x=!0,C({key:v,version:te,value:G})}catch(te){te.message+=` while resolving record ${v} for ${s}`,O&&((te.code==="ECONNRESET"||te.code==="ECONNREFUSED"||te.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(te.statusCode===500||te.statusCode===502||te.statusCode===503||te.statusCode===504))?(C({key:v,version:R,value:O}),qe.default.trace?.(te.message,"(returned stale record)")):F(te);let K=performance.now()-ee;mr(K,"cache-resolution",s,null,"fail"),k&&ym(k,"Server-Timing",`cache-resolve;dur=${K.toFixed(2)}`,!0),B.transaction.abort();return}if(A?.noCacheStore||B.noCacheStore){B.transaction.abort();return}Ir(B).addWrite({key:v,store:i,entry:p,nodeName:"source",commit:a((te,K)=>{if(K?.version!==R)return;let ge=qa(v,O,G);G?(Me.put?.(B,v,G),qe.default.trace?.(`Writing resolved record from source with id: ${v}, timestamp: ${new Date(te).toISOString()}`),y(v,G,K,te,0,m&&Re||null,{user:B?.user,expiresAt:B.expiresAt},"put",!!Ee)):K&&(Me.delete?.(B,v),qe.default.trace?.(`Deleting resolved record from source with id: ${v}, timestamp: ${new Date(te).toISOString()}`),m||g?y(v,null,K,te,0,m&&Re||null,{user:B?.user},"delete",!!Ee):i.remove(v,R))},"commit")})}),()=>{i.unlock(v,R)},q=>{i.unlock(v,R),x&&qe.default.error?.("Error committing cache update",q)})})}a(Dd,"getFromSource");function Ka(v){if(!v||v.user?.role?.permission?.super_user)return!0;if(v.replicateTo)throw new Or.ClientError("Can not specify replication parameters without super user permissions",403);if(v.replicatedConfirmation)throw new Or.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Ka,"checkContextPermissions");function Ho(){if(Gr!==Nd&&(Nd=Gr,(0,ml.getWorkerIndex)()===(0,ml.getWorkerCount)()-1)){if(ka&&clearTimeout(ka),!Gr)return;let v=new Date;v.setMonth(0),v.setDate(1),v.setHours(0),v.setMinutes(0),v.setSeconds(0);let p=Math.ceil((Date.now()-v.getTime())/Gr)*Gr+v.getTime(),A=a(w=>{qe.default.trace?.(`Scheduled next cleanup scan at ${new Date(w)}ms`),ka=setTimeout(()=>X=X.then(async()=>{if(A(Math.max(w+Gr,Date.now())),i.rootStore.status!=="open"){clearTimeout(ka);return}let R=50,b=new Array(R),D=0;qe.default.info?.(`Starting cleanup scan for ${s}`);try{let O=0;for(let{key:B,value:k,version:C,expiresAt:F}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let x;k===null&&!m&&C+Pme<Date.now()?x=i.remove(B,C):F!=null&&F+T<Date.now()&&(x=Ve.evict(B,k,C),O++),x&&(await b[D],b[D]=x.catch(q=>{qe.default.error?.("Cleanup error",q)}),++D>=R&&(D=0)),await md()}qe.default.info?.(`Finished cleanup scan for ${s}, evicted ${O} entries`)}catch(O){qe.default.warn?.(`Error in cleanup scan for ${s}:`,O)}}),Math.min(w-Date.now(),2147483647)).unref()},"startNextTimer");A(p)}}a(Ho,"scheduleCleanup");function ie(){Q=l?.addDeleteRemovalCallback(n,v=>{let p=i.getEntry(v);p?.value===null&&i.remove(v,p.version)})}a(ie,"addDeleteRemoval");function Se(){(0,ml.getWorkerIndex)()===0&&setInterval(async()=>{if(!Ol){Ol=!0;try{let v=ne.name,p=r[v];if(!p)throw new Error(`expiresAt attribute ${ne} must be indexed`);for(let A of p.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let w of p.getValues(A)){let R=i.getEntry(w);R?.value?R.value[v]<Date.now()&&Ve.evict(w,R.value,R.version):i.ifVersion(w,R?.version,()=>p.remove(A,w))}await md()}}catch(v){qe.default.error?.("Error in evicting old records",v)}finally{Ol=!1}}},Dme).unref()}a(Se,"runRecordExpirationEviction");function tt(v){if(v){let p=v.join(","),A=d.get([Symbol.for("residency_by_set"),p]);return A||(d.put([Symbol.for("residency_by_set"),p],A=Math.floor(Math.random()*2147483647)),d.put([Symbol.for("residency_by_id"),A],v),A)}}a(tt,"getResidencyId")}function lw(e,t){let r=e.attr_object||(e.attr_object={}),n=r[t];if(n)return n;n=r[t]=Object.create(null);for(let s of e)n[s.attribute_name]=s[t];return n}function VY(){}function Hme(e){zY=e}function CT(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;try{switch(r){case"Int":case"Long":if(e[0]==="$")return wT(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return wT(+e);case"Float":return e==="null"?null:wT(+e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":if(isNaN(e)){if(e==="null")return null;xme.test(e)||(e+="Z");let n=new Date(e);return wT(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,PT.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function wT(e){if(isNaN(e))throw new SyntaxError;return e}function KY(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function uw(e,t,r){return e?.then?e.then(t,r):t(e)}function DT(e,t){e[kr]=t,e[ve]=t?.value??null,e[wE]=t?.version}function YY(e){return e!=null}function ci(e){try{return JSON.stringify(e)}catch{return e}}function kme(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ms,Ba,CE,WY,jY,Sd,Or,DE,PE,qe,Sl,ml,PT,Cme,zY,Dme,Pme,FY,Lme,wE,Mme,kr,IE,GY,Ume,cw,Os,ya,vme,qY,$Y,Bme,AMe,xme,md,Lf=Ie(()=>{Ms=L(M()),Ba=require("lmdb"),CE=L(sn()),WY=require("lodash"),jY=L(Kd());Vs();sp();Sd=L(se());JR();Or=L(_e()),DE=L(eo()),PE=L(qs());De();tE();qe=L(Sc());ap();pc();Sl=require("ordered-binary"),ml=L(dt());ji();PT=L(re());Ll();Ii();mT();yf();Cme=new Uint8Array(9);Cme[8]=192;Dme=6e4,Pme=864e5;Sd.initSync();FY=Sd.get(Ms.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Lme=1e4,wE=Symbol.for("version"),Mme=Symbol.for("incremental-update"),kr=Symbol("entry"),IE=Symbol("is-saving"),GY=1,Ume=2,cw=Symbol("loaded-from-source"),Os=1,ya=8,vme=Buffer.allocUnsafeSlow(8192),qY=1978,$Y=100,Bme={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},AMe=(0,PT.convertToMS)(Sd.get(Ms.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(LT,"makeTable");a(lw,"attributesAsObject");a(VY,"noop");a(Hme,"setServerUtilities");xme=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(CT,"coerceType");a(wT,"rejectNaN");a(KY,"isDescendantId");md=a(()=>new Promise(setImmediate),"rest");a(uw,"when");a(DT,"updateResource");a(YY,"exists");a(ci,"stringify");a(kme,"hasOtherProcesses")});var lt={};je(lt,{database:()=>zl,databases:()=>We,dropDatabase:()=>BR,dropTableMeta:()=>Vme,getDatabases:()=>ut,getDefaultCompression:()=>Tm,getTables:()=>Fme,onRemovedDB:()=>W_,onUpdatedTable:()=>Nc,readMetaDb:()=>LE,resetDatabases:()=>Uu,table:()=>Et,tables:()=>zn});function Fme(){return BT||ut(),zn||{}}function ut(){if(BT)return We;BT=!0,Ad=new Map;let e=(0,er.getHdbBasePath)()&&(0,Ut.join)((0,er.getHdbBasePath)(),br.DATABASES_DIR_NAME),t=(0,er.get)(br.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,er.get)(br.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,ns.existsSync)(e)?e:(0,Ut.join)((0,er.getHdbBasePath)(),br.LEGACY_DATABASES_DIR_NAME)),!e)return;if((0,ns.existsSync)(e))for(let n of(0,ns.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ut.basename)(n.name,".mdb");n.isFile()&&(0,Ut.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&LE((0,Ut.join)(e,n.name),null,s)}if((0,ns.existsSync)((0,gd.getBaseSchemaPath)())){for(let n of(0,ns.readdirSync)((0,gd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,Ut.join)((0,gd.getBaseSchemaPath)(),n.name),i=(0,Ut.join)((0,gd.getTransactionAuditStoreBasePath)(),n.name);for(let o of(0,ns.readdirSync)(s,{withFileTypes:!0}))if(o.isFile()&&(0,Ut.extname)(o.name).toLowerCase()===".mdb"){let c=(0,Ut.join)(i,o.name);LE((0,Ut.join)(s,o.name),(0,Ut.basename)(o.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,ns.existsSync)(i))for(let c of(0,ns.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,Ut.extname)(c.name).toLowerCase()===".mdb"&&LE((0,Ut.join)(i,c.name),(0,Ut.basename)(c.name,".mdb"),n);let o=s.tables;if(o)for(let c in o){let l=o[c],u=(0,Ut.join)(l.path,(0,Ut.basename)(c+".mdb"));(0,ns.existsSync)(u)&&LE(u,c,n,null,!0)}}for(let n in We){let s=Ad.get(n);if(s){let i=We[n];n.includes("delete")&&Vt.trace(`defined tables ${Array.from(s.keys())}`);for(let o in i)s.has(o)||(Vt.trace(`delete table class ${o}`),delete i[o])}else if(delete We[n],n==="data"){for(let i in zn)delete zn[i];delete zn[HT]}}let r=["hdb_temp","hdb_certificate","hdb_analytics","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if(We.system)for(let n of r)We.system[n]&&(We.system[n].replicate=!1);return Ad=null,We}function Uu(){BT=!1;for(let[,e]of Ha)e.needsDeletion=!0;ut();for(let[e,t]of Ha)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Ha.delete(e),delete We[t.databaseName],UE.forEach(r=>r(t.databaseName)));return We}function LE(e,t,r=fw,n,s){let i=new dw.default(e,!1);try{let o=Ha.get(e);o?o.needsDeletion=!1:(o=(0,Rd.open)(i),Ha.set(e,o));let c=new Tl.default(!1),l=o.dbisDb||(o.dbisDb=o.openDB(MT.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,ns.existsSync)(n)&&(i.path=n,u=(0,Rd.open)(i),u.isLegacy=!0):u=hT(o));let d=ZY(r),_=d[HT],E=new Map;for(let{key:f,value:h}of l.getRange({start:!1})){let[T,m]=f.toString().split("/");m===""?m=h.name:m||(m=T,T=t,h.name||(h.name=m,h.indexed=!h.is_hash_attribute)),_?.add(T);let g=E.get(T);g||E.set(T,g={attributes:[]}),(m==null||h.is_hash_attribute)&&(g.primary=h),m!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:m}=h;if(!m){for(let W of T)if(W.is_hash_attribute||W.isPrimaryKey){m=W;break}if(!m){Vt.warn(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`);continue}}let g=d[f],S={},y=[],I,U,H=typeof m.audit=="boolean"?m.audit:(0,er.get)(br.CONFIG_PARAMS.LOGGING_AUDITLOG),X=m.trackDeletes,Y=m.expiration,V=m.eviction,ne=m.sealed,Q=m.splitSegments,de=m.replicate;if(g)S=g.indices,y=g.attributes,g.schemaVersion++;else{I=m.tableId,I?I>=(l.get(Td)||0)&&(l.putSync(Td,I+1),Vt.info(`Updating next table id (it was out of sync) to ${I+1} for ${f}`)):(m.tableId=I=l.get(Td),I||(I=1),Vt.debug("Table {table_name} missing an id, assigning {table_id}"),l.putSync(Td,I+1),l.putSync(m.key,m));let W=new Tl.default(!m.is_hash_attribute,m.is_hash_attribute);if(W.compression=m.compression,W.compression){let ae=(0,er.get)(br.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||XY;W.compression.threshold=ae}U=mh(o.openDB(m.key,W)),o.databaseName=r,U.rootStore=o,U.tableId=I}for(let W of T){W.attribute=W.name;try{if(!W.is_hash_attribute&&(W.indexed||W.attribute&&!W.name)){if(!S[W.name]){let Oe=new Tl.default(!W.is_hash_attribute,W.is_hash_attribute);S[W.name]=o.openDB(W.key,Oe),S[W.name].indexNulls=W.indexNulls}let ae=y.find(Oe=>Oe.name===W.name);ae?y.splice(y.indexOf(ae),1,W):y.push(W)}}catch(ae){Vt.error("Error trying to update attribute",W,y,S,ae)}}if(!g){g=eW(d,f,LT({primaryStore:U,auditStore:u,audit:H,sealed:ne,splitSegments:Q,replicate:de,expirationMS:Y&&Y*1e3,evictionMS:V&&V*1e3,trackDeletes:X,tableName:f,tableId:I,primaryKey:m.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:S,attributes:T,schemaDefined:m.schemaDefined,dbisDB:l})),g.schemaVersion=1;for(let W of ME)W(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function ZY(e){let t=We[e];if(t||(e==="data"?t=We[e]=zn:e==="system"?Object.defineProperty(We,"system",{value:t=Object.create(null),configurable:!0}):t=We[e]=Object.create(null)),Ad&&!Ad.has(e)){let r=new Set;t[HT]=r,Ad.set(e,r)}return t}function eW(e,t,r){return e[t]=r,r}function zl({database:e,table:t}){e||(e=fw),ut();let r=ZY(e),n=(0,Ut.join)((0,er.getHdbBasePath)(),br.DATABASES_DIR_NAME),s=(0,er.get)(br.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(s.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&s[e]?.tables?.[t]?.path;n=i||s[e]?.path||process.env.STORAGE_PATH||(0,er.get)(br.CONFIG_PARAMS.STORAGE_PATH)||((0,ns.existsSync)(n)?n:(0,Ut.join)((0,er.getHdbBasePath)(),br.LEGACY_DATABASES_DIR_NAME));let o=(0,Ut.join)(n,(i?t:e)+".mdb"),c=Ha.get(o);if(!c||c.status==="closed"){let l=new dw.default(o,!1);c=(0,Rd.open)(l),Ha.set(o,c)}return c.auditStore||(c.auditStore=hT(c)),c}async function BR(e){if(!We[e])throw new Error("Schema does not exist");let t=We[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Ha.delete(r.path),r.status==="open"&&(await r.close(),await vE.remove(r.path));if(r||(r=zl({database:e,table:null}),r.status==="open"&&(await r.close(),await vE.remove(r.path))),e==="data"){for(let n in zn)delete zn[n];delete zn[HT]}delete We[e],UE.forEach(n=>n(e))}function Et(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:_,schemaDefined:E,origin:f}=e;r||(r=fw);let h=zl({database:r,table:t}),T=We[r];Vt.trace(`Defining ${t} in ${r}`);let m=T?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let g,S,y;E==null&&(E=!0);let I=new Tl.default(!1);for(let Q of o)Q.attribute&&!Q.name?(Q.name=Q.attribute,Q.indexed=!0):Q.attribute=Q.name,Q.expiresAt&&(Q.indexed=!0);let U,H;if(m){if(g=m.primaryKey,m.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=m.splitSegments),m.attributes.splice(0,m.attributes.length,...o)}else{let Q=h.auditStore;S=o.find(Oe=>Oe.isPrimaryKey)||{},g=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=E,S.compression=Tm(),_&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,er.get)(br.CONFIG_PARAMS.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),f&&(S.origins?S.origins.includes(f)||S.origins.push(f):S.origins=[f]),Vt.trace(`${t} table loading, opening primary store`);let de=new Tl.default(!1,!0);de.compression=S.compression;let W=t+"/";if(y=h.dbisDb=h.openDB(MT.INTERNAL_DBIS_NAME,I),ne(),y.get(W))return H&&H(),Uu(),Et(e);let ae=mh(h.openDB(W,de));h.databaseName=r,ae.rootStore=h,ae.tableId=y.get(Td),Vt.trace(`Assigning new table id ${ae.tableId} for ${t}`),ae.tableId||(ae.tableId=1),y.put(Td,ae.tableId+1),S.tableId=ae.tableId,m=eW(T,t,LT({primaryStore:ae,auditStore:Q,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:_,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:g,tableName:t,tableId:ae.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:E,dbisDB:y})),m.schemaVersion=1,U=!0,y.put(W,S)}let X=m.indices;y=y||(h.dbisDb=h.openDB(MT.INTERNAL_DBIS_NAME,I)),m.dbisDB=y;let Y=[];for(let{key:Q,value:de}of y.getRange({start:!0})){let[W,ae]=Q.toString().split("/");if(ae===""&&(ae=de.name),ae){if(W!==t)continue}else continue;let Oe=o.find(Me=>Me.name===ae),Ne=!Oe?.indexed&&de.indexed&&!de.isPrimaryKey;if((!Oe||Ne)&&(ne(),U=!0,Oe||y.remove(Q),Ne)){let Me=m.indices[W];Me&&Y.push(Me)}}let V=[];try{for(let Q of o||[]){if((Q.relationship||Q.computed)&&(U=!0,Q.relationship))continue;let de=t+"/"+(Q.name||"");Object.defineProperty(Q,"key",{value:de,configurable:!0});let W=y.get(de);if(Q.isPrimaryKey){if(W=W||y.get(de=t+"/")||{},c!==void 0&&c!==m.audit||l!==void 0&&l!==m.sealed||d!==void 0&&d!==m.replicate||(+n||void 0)!==(+W.expiration||void 0)||(+s||void 0)!==(+W.eviction||void 0)){let Oe={...W};typeof c=="boolean"&&(c&&m.enableAuditing(c),Oe.audit=c),n&&(Oe.expiration=+n),s&&(Oe.eviction=+s),l!==void 0&&(Oe.sealed=l),d!==void 0&&(Oe.replicate=d),U=!0,ne(),y.put(de,Oe)}continue}W?.attribute&&!W.name&&(W.indexed=!0);let ae=!W||W.type!==Q.type||W.indexed!==Q.indexed||W.nullable!==Q.nullable||W.version!==Q.version||JSON.stringify(W.properties)!==JSON.stringify(Q.properties)||JSON.stringify(W.elements)!==JSON.stringify(Q.elements);if(Q.indexed){let Oe=new Tl.default(!0,!1),Ne=h.openDB(de,Oe);(ae||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<BE.workerData?.restartNumber)&&(U=!0,ne(),W=y.get(de),(ae||W.indexingPID&&W.indexingPID!==process.pid||W.restartNumber<BE.workerData?.restartNumber)&&(U=!0,Q.indexNulls===void 0&&(Q.indexNulls=!0),m.primaryStore.getStats().entryCount>0&&(Q.lastIndexedKey=W?.lastIndexedKey??void 0,Q.indexingPID=process.pid,Ne.isIndexing=!0,Object.defineProperty(Q,"dbi",{value:Ne}),V.push(Q))),y.put(de,Q)),W?.indexNulls&&Q.indexNulls===void 0&&(Q.indexNulls=!0),Ne.indexNulls=Q.indexNulls,X[Q.name]=Ne}else ae&&(U=!0,ne(),y.put(de,Q))}}finally{H&&H()}if(U&&(m.schemaVersion++,m.updatedAttributes()),Vt.trace(`${t} table loading, running index`),V.length>0||Y.length>0?m.indexingOperation=$me(m,V,Y):U&&UT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,"schema-change",m.databaseName,m.tableName)),m.origin=f,U)for(let Q of ME)Q(m,f!=="cluster");return(n||s||i)&&m.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Vt.trace(`${t} table loaded`),m;function ne(){H||h.transactionSync(()=>({then(Q){H=Q}}))}a(ne,"startTxn")}async function $me(e,t,r){try{Vt.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await UT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let _ of t)(0,Rd.compareKeys)(_.lastIndexedKey,u)<0&&(u=_.lastIndexedKey),_.lastIndexedKey==null&&_.dbi.clearAsync();let d=0;for(let{key:_,value:E,version:f}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(E){if(d++,s=e.primaryStore.ifVersion(_,f,()=>{for(let h=0;h<l;h++){let T=t[h],m=T.name;try{let g=T.resolve,S=E&&(g?g(E):E[m]),y=(0,QY.getIndexedValues)(S);if(y)for(let I=0,U=y.length;I<U;I++)T.dbi.put(y[I],_)}catch(g){o[m]||(o[m]=!0,Vt.error(`Error indexing attribute ${m}`,g))}}}),s.then(()=>d--,h=>{d--,Vt.error(h)}),BE.workerData&&BE.workerData.restartNumber!==JY.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=_,e.dbisDB.put(h.key,h);if(i)return}d>Gme?await s:d>qme&&await new Promise(h=>setImmediate(h))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await UT.signalSchemaChange(new vT.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Vt.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Vt.error("Error in indexing",n)}}function Vme({table:e,database:t}){let r=zl({database:t,table:e}),n=[],s=r.dbisDb;for(let i of s.getKeys({start:e+"/",end:e+"0"}))n.push(s.remove(i));return Promise.all(n)}function Nc(e){return ME.push(e),{remove(){let t=ME.indexOf(e);t>-1&&ME.splice(t,1)}}}function W_(e){return UE.push(e),{remove(){let t=UE.indexOf(e);t>-1&&UE.splice(t,1)}}}function Tm(){let e=(0,er.get)(br.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,er.get)(br.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,er.get)(br.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||XY,n={startingOffset:32};return t&&(n.dictionary=vE.readFileSync(t)),r&&(n.threshold=r),e&&n}var er,MT,Rd,Ut,ns,gd,Tl,dw,br,vE,_w,QY,UT,vT,BE,Vt,JY,fw,HT,XY,zn,We,Td,ME,UE,BT,Ha,Ad,Gme,qme,De=Ie(()=>{er=L(se()),MT=L(Ht()),Rd=require("lmdb"),Ut=require("path"),ns=require("fs"),gd=L(Tt());Lf();Tl=L(e_()),dw=L(t_()),br=L(M()),vE=L(require("fs-extra")),_w=L(_i()),QY=L(sn()),UT=L(eo()),vT=L(qs()),BE=require("worker_threads"),Vt=L(j()),JY=L(dt());ji();Ll();fw="data",HT=Symbol("defined-tables"),XY=((0,er.get)(br.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,er.initSync)();zn=Object.create(null),We=Object.create(null);(0,_w._assignPackageExport)("databases",We);(0,_w._assignPackageExport)("tables",zn);Td=Symbol.for("next-table-id"),ME=[],UE=[],Ha=new Map;a(Fme,"getTables");a(ut,"getDatabases");a(Uu,"resetDatabases");a(LE,"readMetaDb");a(ZY,"ensureDB");a(eW,"setTable");a(zl,"database");a(BR,"dropDatabase");a(Et,"table");Gme=1e3,qme=10;a($me,"runIndexing");a(Vme,"dropTableMeta");a(Nc,"onUpdatedTable");a(W_,"onRemovedDB");a(Tm,"getDefaultCompression")});var re=N((DMe,EW)=>{"use strict";var xa=require("path"),iW=require("fs-extra"),In=j(),tW=require("fs-extra"),xT=require("os"),Kme=require("net"),Yme=require("recursive-iterator"),Kt=M(),Wme=Eg(),rW=require("papaparse"),kT=require("moment"),{inspect:jme}=require("util"),nW=require("is-number"),CMe=require("lodash"),zme=require("minimist"),Qme=require("https"),Jme=require("http"),{hdb_errors:FT}=_e(),Xme=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,oW=require("util").promisify(setTimeout),Zme=100,eSe=5,tSe="",rSe=4,sW={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};EW.exports={isEmpty:ss,isEmptyOrZeroLength:Vi,arrayHasEmptyValues:iSe,arrayHasEmptyOrZeroLengthValues:oSe,buildFolderPath:aSe,isBoolean:aW,errorizeMessage:nSe,stripFileExtension:lSe,autoCast:uSe,autoCastJSON:cW,autoCastJSONDeep:hw,removeDir:dSe,compareVersions:_Se,isCompatibleDataVersion:fSe,escapeRawValue:ESe,unescapeValue:hSe,stringifyProps:pSe,timeoutPromise:SSe,isClusterOperation:gSe,getClusterUser:RSe,checkGlobalSchemaTable:ASe,getHomeDir:uW,getPropsFilePath:mSe,promisifyPapaParse:ySe,removeBOM:dW,createEventPromise:bSe,checkProcessRunning:OSe,checkSchemaTableExist:NSe,checkSchemaExists:_W,checkTableExists:fW,getStartOfTomorrowInSeconds:ISe,getLimitKey:wSe,isObject:cSe,isNotEmptyAndHasValue:sSe,autoCasterIsNumberCheck:lW,backtickASTSchemaItems:CSe,isPortTaken:TSe,createForkArgs:DSe,autoCastBoolean:PSe,async_set_timeout:oW,getTableHashAttribute:LSe,doesSchemaExist:MSe,doesTableExist:USe,stringifyObj:vSe,ms_to_time:BSe,changeExtension:HSe,getEnvCliRootPath:pw,noBootFile:xSe,httpRequest:kSe,transformReq:FSe,convertToMS:GSe,PACKAGE_ROOT:Kt.PACKAGE_ROOT};function nSe(e){return e instanceof Error?e:new Error(e)}a(nSe,"errorizeMessage");function ss(e){return e==null}a(ss,"isEmpty");function sSe(e){return!ss(e)&&(e||e===0||e===""||aW(e))}a(sSe,"isNotEmptyAndHasValue");function Vi(e){return ss(e)||e.length===0||e.size===0}a(Vi,"isEmptyOrZeroLength");function iSe(e){if(ss(e))return!0;for(let t=0;t<e.length;t++)if(ss(e[t]))return!0;return!1}a(iSe,"arrayHasEmptyValues");function oSe(e){if(Vi(e))return!0;for(let t=0;t<e.length;t++)if(Vi(e[t]))return!0;return!1}a(oSe,"arrayHasEmptyOrZeroLengthValues");function aSe(...e){try{return e.join(xa.sep)}catch{console.error(e)}}a(aSe,"buildFolderPath");function aW(e){return ss(e)?!1:e===!0||e===!1}a(aW,"isBoolean");function cSe(e){return ss(e)?!1:typeof e=="object"}a(cSe,"isObject");function lSe(e){return Vi(e)?tSe:e.slice(0,-rSe)}a(lSe,"stripFileExtension");function uSe(e){return ss(e)||e===""||typeof e!="string"?e:sW[e]!==void 0?sW[e]:lW(e)===!0?Number(e):Xme.test(e)?new Date(e):e}a(uSe,"autoCast");function cW(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(cW,"autoCastJSON");function hw(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let n=e[t],s=hw(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=hw(r);n!==r&&(e[t]=n)}return e}else return cW(e)}a(hw,"autoCastJSONDeep");function lW(e){if(e.startsWith("0.")&&nW(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&nW(e))}a(lW,"autoCasterIsNumberCheck");async function dSe(e){if(Vi(e))throw new Error(`Directory path: ${e} does not exist`);try{await tW.emptyDir(e),await tW.remove(e)}catch(t){throw In.error(`Error removing files in ${e} -- ${t}`),t}}a(dSe,"removeDir");function _Se(e,t){if(Vi(e)){In.info("Invalid current version sent as parameter.");return}if(Vi(t)){In.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(o.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(o[u],10)-parseInt(c[u],10),r)return r;return o.length-c.length}a(_Se,"compareVersions");function fSe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(fSe,"isCompatibleDataVersion");function ESe(e){if(ss(e))return e;let t=String(e);return t==="."?Kt.UNICODE_PERIOD:t===".."?Kt.UNICODE_PERIOD+Kt.UNICODE_PERIOD:t.replace(Kt.FORWARD_SLASH_REGEX,Kt.UNICODE_FORWARD_SLASH)}a(ESe,"escapeRawValue");function hSe(e){if(ss(e))return e;let t=String(e);return t===Kt.UNICODE_PERIOD?".":t===Kt.UNICODE_PERIOD+Kt.UNICODE_PERIOD?"..":String(e).replace(Kt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(hSe,"unescapeValue");function pSe(e,t){if(ss(e))return In.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+xT.EOL}!Vi(n)&&n[0]===";"?r+=" "+n+s+xT.EOL:Vi(n)||(r+=n+"="+s+xT.EOL)}catch{In.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(pSe,"stringifyProps");function uW(){let e;try{e=xT.homedir()}catch{e=process.env.HOME}return e}a(uW,"getHomeDir");function mSe(){let e=xa.join(uW(),Kt.HDB_HOME_DIR_NAME,Kt.BOOT_PROPS_FILE_NAME);return iW.existsSync(e)||(e=xa.join(__dirname,"../","hdb_boot_properties.file")),e}a(mSe,"getPropsFilePath");function SSe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:a(function(){clearTimeout(r)},"cancel")}}a(SSe,"timeoutPromise");async function TSe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=Kme.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(TSe,"isPortTaken");function gSe(e){try{return Kt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){In.error(`Error checking operation against cluster ops ${t}`)}return!1}a(gSe,"isClusterOperation");function ASe(e,t){let r=(De(),oe(lt)).getDatabases();if(!r[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(ASe,"checkGlobalSchemaTable");function RSe(e,t){if(ss(t)){In.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ss(e)||Vi(e)){In.warn("No users to search.");return}let r;try{let n=e.get(t);n&&n.role.permission.cluster_user===!0&&n.active===!0&&(r=n)}catch(n){In.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){In.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(RSe,"getClusterUser");function ySe(){rW.parsePromise=function(e,t,r){return new Promise(function(n,s){rW.parse(e,{header:!0,transformHeader:dW,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(ySe,"promisifyPapaParse");function dW(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(dW,"removeBOM");function bSe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;In.info(`Got cluster status event response: ${jme(s)}`);try{i.cancel()}catch{In.error("Error trying to cancel timeout.")}n(s)})})}a(bSe,"createEventPromise");async function OSe(e){let t=!0,r=0;do await oW(Zme*r++),(await Wme.findPs(e)).length>0&&(t=!1);while(t&&r<eSe);if(t)throw new Error(`process ${e} was not started`)}a(OSe,"checkProcessRunning");function NSe(e,t){let r=_W(e);if(r)return r;let n=fW(e,t);if(n)return n}a(NSe,"checkSchemaTableExist");function _W(e){let{getDatabases:t}=(De(),oe(lt));if(!t()[e])return FT.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_W,"checkSchemaExists");function fW(e,t){let{getDatabases:r}=(De(),oe(lt));if(!r()[e][t])return FT.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(fW,"checkTableExists");function ISe(){let e=kT().utc().add(1,Kt.MOMENT_DAYS_TAG).startOf(Kt.MOMENT_DAYS_TAG).unix(),t=kT().utc().unix();return e-t}a(ISe,"getStartOfTomorrowInSeconds");function wSe(){return kT().utc().format("DD-MM-YYYY")}a(wSe,"getLimitKey");function CSe(e){try{let t=new Yme(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){In.error("Got an error back ticking items."),In.error(t)}}a(CSe,"backtickASTSchemaItems");function DSe(e){return[e]}a(DSe,"createForkArgs");function PSe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(PSe,"autoCastBoolean");function LSe(e,t){let{getDatabases:r}=(De(),oe(lt)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(LSe,"getTableHashAttribute");function MSe(e){let{getDatabases:t}=(De(),oe(lt));return t()[e]!==void 0}a(MSe,"doesSchemaExist");function USe(e,t){let{getDatabases:r}=(De(),oe(lt));return r()[e]?.[t]!==void 0}a(USe,"doesTableExist");function vSe(e){try{return JSON.stringify(e)}catch{return e}}a(vSe,"stringifyObj");function BSe(e){let t=kT.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(BSe,"ms_to_time");function HSe(e,t){let r=xa.basename(e,xa.extname(e));return xa.join(xa.dirname(e),r+t)}a(HSe,"changeExtension");function pw(){if(process.env[Kt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Kt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=zme(process.argv);if(e[Kt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Kt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(pw,"getEnvCliRootPath");var Ew;function xSe(){if(Ew)return Ew;let e=pw();if(pw()&&iW.pathExistsSync(xa.join(e,Kt.HDB_CONFIG_FILE)))return Ew=!0,!0}a(xSe,"noBootFile");function kSe(e,t){let r;return e.protocol==="http:"?r=Jme:r=Qme,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8"),o.body="",o.on("data",c=>{o.body+=c}),o.on("end",()=>{n(o)})});i.on("error",o=>{s(o)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}a(kSe,"httpRequest");function FSe(e){if(!e.schema&&!e.database){e.schema=Kt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(FSe,"transformReq");function GSe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(GSe,"convertToMS")});var se=N((TW,gW)=>{"use strict";var mw=require("fs-extra"),gl=require("path"),hW=require("os"),qSe=require("properties-reader"),xE=j(),HE=re(),Le=M(),GT=Ct(),$Se="Error initializing environment manager",qT="BOOT_PROPS_FILE_PATH",pW=!1,VSe={[Le.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Bo={};Object.assign(TW,gW.exports={BOOT_PROPS_FILE_PATH:qT,getHdbBasePath:KSe,setHdbBasePath:YSe,get:mW,initSync:jSe,setProperty:Je,initTestEnvironment:QSe,setCloneVar:zSe});function KSe(){return Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(KSe,"getHdbBasePath");function YSe(e){Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(YSe,"setHdbBasePath");function mW(e){let t=GT.getConfigValue(e);return t===void 0?Bo[e]:t}a(mW,"get");function Je(e,t){VSe[e]&&(Bo[e]=t),GT.updateConfigObject(e,t)}a(Je,"setProperty");function WSe(){let e;try{e=HE.getPropsFilePath(),mw.accessSync(e,mw.constants.F_OK|mw.constants.R_OK),pW=!0;let t=qSe(e);return Bo[Le.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Le.HDB_SETTINGS_NAMES.INSTALL_USER),Bo[Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Bo[qT]=e,!0}catch{return xE.trace(`Environment manager found no properties file at ${e}`),!1}}a(WSe,"doesPropFileExist");function jSe(e=!1){try{((pW||WSe()||HE.noBootFile())&&!SW||e)&&(GT.initConfig(e),Bo[Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=GT.getConfigValue(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){xE.error($Se),xE.error(t),console.error(t),process.exit(1)}}a(jSe,"initSync");var SW=!1;function zSe(e){SW=e}a(zSe,"setCloneVar");function QSe(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=gl.join(__dirname,"../../","unitTests");Bo[qT]=gl.join(l,"hdb_boot_properties.file"),Je(Le.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,gl.join(l,"settings.test")),Je(Le.HDB_SETTINGS_NAMES.INSTALL_USER,hW.userInfo()?hW.userInfo().username:void 0),Je(Le.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Je(Le.HDB_SETTINGS_NAMES.LOG_PATH_KEY,gl.join(l,"envDir","log")),Je(Le.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Je(Le.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Je(Le.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Je(Le.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,gl.join(l,"envDir")),Je(Le.CONFIG_PARAMS.STORAGE_PATH,gl.join(l,"envDir")),s&&(Je(Le.CONFIG_PARAMS.HTTP_SECUREPORT,mW(Le.CONFIG_PARAMS.HTTP_PORT)),Je(Le.CONFIG_PARAMS.HTTP_PORT,null)),Je(Le.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Je(Le.CONFIG_PARAMS.HTTP_PORT,9926),Je(Le.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Je(Le.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),Je(Le.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,HE.isEmpty(i)?!1:i),Je(Le.CONFIG_PARAMS.HTTP_CORS,HE.isEmpty(i)?!1:i),Je(Le.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Je(Le.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Je(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Je(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Je(Le.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,gl.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Je(Le.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,HE.isEmpty(c)?!1:c),o&&(Je("CORS_ACCESSLIST",o),Je(Le.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Je(Le.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Je(Le.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Je(Le.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Je(Le.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Je(Le.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Je(Le.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${qT}. Please check your boot props and settings files`;xE.fatal(r),xE.error(t)}}a(QSe,"initTestEnvironment")});var Tr=N((xMe,HW)=>{"use strict";var Nr=se();Nr.initSync();var JSe=require("fs-extra"),XSe=require("semver"),GE=require("path"),{monotonicFactory:ZSe}=require("ulidx"),RW=ZSe(),eTe=require("util"),yW=require("child_process"),tTe=eTe.promisify(yW.exec),rTe=yW.spawn,Fr=It(),Xe=M(),$T=re(),li=j(),VT=Xi(),nTe=dp(),kE=Ct(),{broadcast:sTe,onMessageByType:iTe,getWorkerIndex:oTe}=dt(),{isMainThread:bW}=require("worker_threads"),{Encoder:aTe,decode:Aw}=require("msgpackr"),OW=new aTe,{isEmpty:bl}=$T,NW=xn(),MMe=48*36e11;bW&&iTe(Xe.ITC_EVENT_TYPES.RESTART,()=>{tn=void 0,yl=void 0});var{connect:cTe,StorageType:lTe,RetentionPolicy:uTe,AckPolicy:Rw,DeliverPolicy:yw,DiscardPolicy:dTe,NatsConnection:UMe,JetStreamManager:vMe,JetStreamClient:BMe,StringCodec:HMe,JSONCodec:_Te,createInbox:bw,headers:fTe,ErrorCode:AW}=require("nats"),{PACKAGE_ROOT:ETe}=M(),hTe=Ou(),{recordAction:pTe}=(Ii(),oe(K_)),IW=_Te(),mTe="clustering",STe=hTe.engines[Fr.NATS_SERVER_NAME],TTe=GE.join(ETe,"dependencies"),gw=GE.join(TTe,`${process.platform}-${process.arch}`,Fr.NATS_BINARY_NAME),Sw,Tw,FE,Al,Rl;HW.exports={runCommand:wW,checkNATSServerInstalled:gTe,createConnection:Ow,getConnection:qE,getJetStreamManager:$E,getJetStream:DW,getNATSReferences:Ki,getServerList:RTe,createLocalStream:Nw,listStreams:PW,deleteLocalStream:yTe,getServerConfig:yd,listRemoteStreams:bTe,viewStream:OTe,viewStreamIterator:NTe,publishToStream:ITe,request:DTe,reloadNATS:Iw,reloadNATSHub:PTe,reloadNATSLeaf:LTe,extractServerName:CTe,requestErrorHandler:MTe,createLocalTableStream:vW,createTableStreams:BTe,purgeTableStream:BW,purgeSchemaTableStreams:HTe,getStreamInfo:xTe,updateLocalStreams:FTe,closeConnection:ATe,getJsmServerName:KT,addNatsMsgHeader:LW,clearClientCache:CW,updateRemoteConsumer:UTe,createConsumer:MW,updateConsumerIterator:vTe};async function wW(e,t=void 0){let{stdout:r,stderr:n}=await tTe(e,{cwd:t});if(n)throw new Error(n.replace(`
132
132
  `,""));return r.replace(`
133
- `,"")}a(wW,"runCommand");async function gTe(){try{await JSe.access(gw)}catch{return!1}let e=await wW(`${gw} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return XSe.eq(t,STe)}a(gTe,"checkNATSServerInstalled");async function Ow(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await NW.getClusterUser();if(bl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}li.trace("create nats connection called");let i=await cTe({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),li.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&li.error("Error with Nats client connection, connection closed",o),i===tn&&CW()}),i}a(Ow,"createConnection");function CW(){tn=void 0,Al=void 0,Rl=void 0,yl=void 0}a(CW,"clearClientCache");async function ATe(){tn&&(await tn.drain(),tn=void 0,Al=void 0,Rl=void 0,yl=void 0)}a(ATe,"closeConnection");var tn,yl;async function qE(){return yl||(yl=Ow(Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),tn=await yl),tn||yl}a(qE,"getConnection");async function $E(){if(Al)return Al;bl(tn)&&await qE();let{domain:e}=Od(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Al=await tn.jetstreamManager({domain:e,timeout:6e4}),Al}a($E,"getJetStreamManager");async function DW(){if(Rl)return Rl;bl(tn)&&await qE();let{domain:e}=Od(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rl=tn.jetstream({domain:e,timeout:6e4}),Rl}a(DW,"getJetStream");async function Ki(){let e=tn||await qE(),t=Al||await $E(),r=Rl||await DW();return{connection:e,jsm:t,js:r}}a(Ki,"getNATSReferences");async function RTe(e){let t=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await NW.getClusterUser(),s=await Ow(t,r,n),i=bw(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=IW.decode(d.data);_.response_time=Date.now()-l,c.push(_)}})();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.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(RTe,"getServerList");async function Nw(e,t){let{jsm:r}=await Ki(),n=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:lTe.File,retention:uTe.Limits,subjects:t,discard:dTe.Old,max_msgs:s,max_bytes:i,max_age:n})}a(Nw,"createLocalStream");async function PW(){let{jsm:e}=await Ki(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(PW,"listStreams");async function yTe(e){let{jsm:t}=await Ki();await t.streams.delete(e)}a(yTe,"deleteLocalStream");async function bTe(e){let{connection:t}=await Ki(),r=[],n=bw(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(IW.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(bTe,"listRemoteStreams");async function OTe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ki(),i=RW(),o={durable_name:i,ack_policy:Rw.Explicit};t&&(o.deliver_policy=yw.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 _=Aw(d.data),E={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:_};if(d.headers&&(E.origin=d.headers.get(Fr.MSG_HEADERS.ORIGIN)),u.push(E),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(OTe,"viewStream");async function*NTe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ki(),i=RW(),o={durable_name:i,ack_policy:Rw.Explicit};t&&(o.deliver_policy=yw.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=Aw(u.data);d[0]||(d=[d]);for(let _ of d){let E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:_};u.headers&&(E.origin=u.headers.get(Fr.MSG_HEADERS.ORIGIN)),yield E}if(u.ack(),u.info.pending===0)break}await c.delete()}a(NTe,"viewStreamIterator");async function ITe(e,t,r,n){li.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=LW(n,r);let{js:s}=await Ki(),i=await KT(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:OW.encode(n);try{li.trace(`publishToStream publishing to subject: ${o}`),pTe(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 UW(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){li.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await Nw(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(ITe,"publishToStream");function LW(e,t){t===void 0&&(t=fTe());let r=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Fr.MSG_HEADERS.ORIGIN)&&r&&t.append(Fr.MSG_HEADERS.ORIGIN,r),t}a(LW,"addNatsMsgHeader");function Od(e){e=e.toLowerCase();let t=GE.join(Nr.get(Xe.CONFIG_PARAMS.ROOTPATH),mTe);if(e===Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bl(Tw)&&(Tw={port:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Fr.SERVER_SUFFIX.HUB,config_file:Fr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:GE.join(t,Fr.PID_FILES.HUB),hdb_nats_path:t}),Tw;if(e===Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bl(Sw)&&(Sw={port:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Fr.SERVER_SUFFIX.LEAF,config_file:Fr.NATS_CONFIG_FILES.LEAF_SERVER,domain:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Fr.SERVER_SUFFIX.LEAF,pid_file_path:GE.join(t,Fr.PID_FILES.LEAF),hdb_nats_path:t}),Sw;li.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Od,"getServerConfig");async function MW(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Rw.Explicit,durable_name:r,deliver_policy:yw.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(MW,"createConsumer");async function wTe(e,t,r){await e.consumers.delete(t,r)}a(wTe,"removeConsumer");function CTe(e){return e.split(".")[1]}a(CTe,"extractServerName");async function DTe(e,t,r=6e4,n=bw()){if(!$T.isObject(t))throw new Error("data param must be an object");let s=OW.encode(t),{connection:i}=await Ki(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Aw(c.data)}a(DTe,"request");function Iw(e){return new Promise(async(t,r)=>{let n=rTe(gw,["--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(Iw,"reloadNATS");async function PTe(){let{pid_file_path:e}=Od(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Iw(e)}a(PTe,"reloadNATSHub");async function LTe(){let{pid_file_path:e}=Od(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Iw(e)}a(LTe,"reloadNATSLeaf");function MTe(e,t,r){let n;switch(e.code){case AW.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case AW.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(MTe,"requestErrorHandler");async function UTe(e,t){let r=t+Fr.SERVER_SUFFIX.LEAF,{connection:n}=await Ki(),{jsm:s}=await qTe(r),{schema:i,table:o}=e,c=VT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await UW(async()=>{if(e.subscribe===!0)await MW(s,c,n.info.server_name,l);else try{await wTe(s,c,n.info.server_name)}catch(u){li.trace(u)}})}a(UTe,"updateRemoteConsumer");async function vTe(e,t,r,n){let s=VT.createNatsTableStreamName(e,t),i=r+Fr.SERVER_SUFFIX.LEAF,o={type:Xe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!bW&&oTe()<Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=XS();await c(o)}await sTe(o),n==="stop"&&await $T.async_set_timeout(1e3)}a(vTe,"updateConsumerIterator");function UW(e){return nTe.writeTransaction(Xe.SYSTEM_SCHEMA_NAME,Xe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(UW,"exclusiveLock");async function vW(e,t){let r=VT.createNatsTableStreamName(e,t),n=await KT(),s=kTe(e,t,n);await Nw(r,[s])}a(vW,"createLocalTableStream");async function BTe(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await vW(n,s)}}a(BTe,"createTableStreams");async function BW(e,t,r=void 0){if(Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=VT.createNatsTableStreamName(e,t),{domain:s}=Od(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await qE()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")li.warn(n);else throw n}}a(BW,"purgeTableStream");async function HTe(e,t){if(Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await BW(e,t[r])}a(HTe,"purgeSchemaTableStreams");async function xTe(e){return(await $E()).streams.info(e)}a(xTe,"getStreamInfo");function kTe(e,t,r){return`${Fr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(kTe,"createSubjectName");async function KT(){if(FE)return FE;if(FE=(await $E())?.nc?.info?.server_name,FE===void 0)throw new Error("Unable to get jetstream manager server name");return FE}a(KT,"getJsmServerName");async function FTe(){let e=await $E(),t=await KT(),r=await PW();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=GTe(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(".");li.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(FTe,"updateLocalStreams");function GTe(e){let{config:t}=e,r=!1,n=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Nr.get(Xe.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(GTe,"updateStreamLimits");async function qTe(e){let t,r;try{t=await tn.jetstream({domain:e}),r=await tn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw li.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(qTe,"connectToRemoteJS")});var XS=N(($Me,zW)=>{"use strict";var{decode:$Te}=require("msgpackr"),{isMainThread:FMe,parentPort:GMe,threadId:qMe}=require("worker_threads"),jT=Tr(),Nd=It(),Dw=M(),rn=j(),Cw=se(),VTe=M(),{onMessageByType:KTe}=dt(),GW=Xi(),{recordAction:xW,recordActionBinary:YTe}=(Ii(),oe(W_)),{publishToStream:WTe}=jT,{ConsumerEvents:kW}=require("nats"),jTe=$r(),{promisify:zTe}=require("util"),qW=zTe(setTimeout),zT=1e4,QT,WT,QTe,JTe,$W,VE=new Map,Id=new Map;zW.exports={initialize:VW,ingestConsumer:Pw,setSubscription:XTe,setIgnoreOrigin:tge,getDatabaseSubscriptions:ege,updateConsumer:KW};async function VW(){KTe(Dw.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await KW(n)}),$W=!0,rn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await jT.getNATSReferences();QT=e,WT=e.info.server_name,QTe=t,JTe=r}a(VW,"initialize");async function KW(e){if(e.status==="start"){let{js:t,jsm:r}=await YW(e.node_domain_name);Pw(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=VE.get(e.stream_name+e.node_domain_name);t&&(rn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),VE.set(e.stream_name+e.node_domain_name,"close")),Id.get(e.node_domain_name)==="failed"&&Id.set(e.node_domain_name,"close")}}a(KW,"updateConsumer");var JT=new Map;function XTe(e,t,r){let n=JT.get(e);n||JT.set(e,n=new Map),n.set(t,r),$W||VW().then(ZTe)}a(XTe,"setSubscription");async function ZTe(){let e=await jTe.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+Nd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await YW(r),!n))break;let{schema:o,table:c}=i,l=GW.createNatsTableStreamName(o,c);Pw(l,n,s,r)}}}a(ZTe,"accessConsumers");async function YW(e){let t,r,n=1;for(;!r;)try{t=await QT.jetstream({domain:e}),r=await QT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Id.get(e)==="close")break;Id.set(e,"failed"),n%10===1&&rn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<zT?n++*100:zT;await qW(i)}return{js:t,jsm:r}}a(YW,"connectToRemoteJS");function ege(){return JT}a(ege,"getDatabaseSubscriptions");var WW;function tge(e){WW=e}a(tge,"setIgnoreOrigin");var jW=100,FW=new Array(jW),YT=0;async function Pw(e,t,r,n){let{connection:s}=await jT.getNATSReferences();QT=s,WT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,WT),rn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Id.get(n)==="close")break;o%10===1&&rn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(rn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await jT.createConsumer(r,e,WT,new Date(Date.now()).toISOString()));let d=o++*100<zT?o++*100:zT;await qW(d)}let c=!1,l;for(;!c;){if(VE.get(e+n)==="close"||Id.get(n)==="close"){VE.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Cw.get(Dw.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),VE.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===kW.ConsumerDeleted&&(await l.close(),c=!0),d.type===kW.HeartbeatsMissed){let _=d.data;rn.trace(`${_} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),_===100&&(rn.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 FW[YT],FW[YT]=rge(d).catch(_=>{rn.error(_)}),++YT>=jW&&(YT=0)}catch(d){d.message==="consumer deleted"?(rn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):rn.error("Error consuming clustering ingest, restarting consumer",d)}}}a(Pw,"ingestConsumer");async function rge(e){let t=$Te(e.data);xW(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),rn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Cw.get(Dw.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Nd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Nd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(Nd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!WW),YTe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(Nd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:_,__origin:E,expiresAt:f}=t;rn.trace("processing message:",o,c,u,(d?"records: "+d.map(U=>U?.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),rn.trace(`messageProcessor nats msg id: ${e.headers.get(Nd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=_);let T=new Promise(U=>h=U),{timestamp:m,user:g,node_name:S}=E||{},y=JT.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:ww(o),value:d[0],id:_?.[0],expiresAt:f,timestamp:m,table:u,onCommit:h,user:g,nodeName:S});else{let U=d.map((H,X)=>({type:ww(o),value:H,expiresAt:f,id:_?.[X],table:u}));for(;l;)U.push({type:ww(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:U,table:u,timestamp:m,onCommit:h,user:g,nodeName:S})}Cw.get(VTe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&WTe(e.subject.split(".").slice(0,-1).join("."),GW.createNatsTableStreamName(c,u),e.headers,e.data),await T;let I=Date.now()-m;m&&xW(I,"replication-latency",e.subject,o,"ingest")}catch(o){rn.error(o)}e.ack()}a(rge,"messageProcessor");function ww(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(ww,"convertOperation")});var nge=XS();(async()=>{try{await nge.initialize()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();
133
+ `,"")}a(wW,"runCommand");async function gTe(){try{await JSe.access(gw)}catch{return!1}let e=await wW(`${gw} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return XSe.eq(t,STe)}a(gTe,"checkNATSServerInstalled");async function Ow(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await NW.getClusterUser();if(bl(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}li.trace("create nats connection called");let i=await cTe({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),li.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&li.error("Error with Nats client connection, connection closed",o),i===tn&&CW()}),i}a(Ow,"createConnection");function CW(){tn=void 0,Al=void 0,Rl=void 0,yl=void 0}a(CW,"clearClientCache");async function ATe(){tn&&(await tn.drain(),tn=void 0,Al=void 0,Rl=void 0,yl=void 0)}a(ATe,"closeConnection");var tn,yl;async function qE(){return yl||(yl=Ow(Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),tn=await yl),tn||yl}a(qE,"getConnection");async function $E(){if(Al)return Al;bl(tn)&&await qE();let{domain:e}=yd(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Al=await tn.jetstreamManager({domain:e,timeout:6e4}),Al}a($E,"getJetStreamManager");async function DW(){if(Rl)return Rl;bl(tn)&&await qE();let{domain:e}=yd(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(bl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rl=tn.jetstream({domain:e,timeout:6e4}),Rl}a(DW,"getJetStream");async function Ki(){let e=tn||await qE(),t=Al||await $E(),r=Rl||await DW();return{connection:e,jsm:t,js:r}}a(Ki,"getNATSReferences");async function RTe(e){let t=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await NW.getClusterUser(),s=await Ow(t,r,n),i=bw(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let _=IW.decode(d.data);_.response_time=Date.now()-l,c.push(_)}})();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.async_set_timeout(e),await o.drain(),await s.close(),await u,c}a(RTe,"getServerList");async function Nw(e,t){let{jsm:r}=await Ki(),n=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:lTe.File,retention:uTe.Limits,subjects:t,discard:dTe.Old,max_msgs:s,max_bytes:i,max_age:n})}a(Nw,"createLocalStream");async function PW(){let{jsm:e}=await Ki(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(PW,"listStreams");async function yTe(e){let{jsm:t}=await Ki();await t.streams.delete(e)}a(yTe,"deleteLocalStream");async function bTe(e){let{connection:t}=await Ki(),r=[],n=bw(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(IW.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(bTe,"listRemoteStreams");async function OTe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ki(),i=RW(),o={durable_name:i,ack_policy:Rw.Explicit};t&&(o.deliver_policy=yw.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 _=Aw(d.data),E={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:_};if(d.headers&&(E.origin=d.headers.get(Fr.MSG_HEADERS.ORIGIN)),u.push(E),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(OTe,"viewStream");async function*NTe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Ki(),i=RW(),o={durable_name:i,ack_policy:Rw.Explicit};t&&(o.deliver_policy=yw.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=Aw(u.data);d[0]||(d=[d]);for(let _ of d){let E={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:_};u.headers&&(E.origin=u.headers.get(Fr.MSG_HEADERS.ORIGIN)),yield E}if(u.ack(),u.info.pending===0)break}await c.delete()}a(NTe,"viewStreamIterator");async function ITe(e,t,r,n){li.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=LW(n,r);let{js:s}=await Ki(),i=await KT(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:OW.encode(n);try{li.trace(`publishToStream publishing to subject: ${o}`),pTe(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 UW(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){li.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await Nw(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(ITe,"publishToStream");function LW(e,t){t===void 0&&(t=fTe());let r=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Fr.MSG_HEADERS.ORIGIN)&&r&&t.append(Fr.MSG_HEADERS.ORIGIN,r),t}a(LW,"addNatsMsgHeader");function yd(e){e=e.toLowerCase();let t=GE.join(Nr.get(Xe.CONFIG_PARAMS.ROOTPATH),mTe);if(e===Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return bl(Tw)&&(Tw={port:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Fr.SERVER_SUFFIX.HUB,config_file:Fr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:GE.join(t,Fr.PID_FILES.HUB),hdb_nats_path:t}),Tw;if(e===Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return bl(Sw)&&(Sw={port:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Fr.SERVER_SUFFIX.LEAF,config_file:Fr.NATS_CONFIG_FILES.LEAF_SERVER,domain:kE.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Fr.SERVER_SUFFIX.LEAF,pid_file_path:GE.join(t,Fr.PID_FILES.LEAF),hdb_nats_path:t}),Sw;li.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(yd,"getServerConfig");async function MW(e,t,r,n){try{await e.consumers.add(t,{ack_policy:Rw.Explicit,durable_name:r,deliver_policy:yw.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(MW,"createConsumer");async function wTe(e,t,r){await e.consumers.delete(t,r)}a(wTe,"removeConsumer");function CTe(e){return e.split(".")[1]}a(CTe,"extractServerName");async function DTe(e,t,r=6e4,n=bw()){if(!$T.isObject(t))throw new Error("data param must be an object");let s=OW.encode(t),{connection:i}=await Ki(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return Aw(c.data)}a(DTe,"request");function Iw(e){return new Promise(async(t,r)=>{let n=rTe(gw,["--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(Iw,"reloadNATS");async function PTe(){let{pid_file_path:e}=yd(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Iw(e)}a(PTe,"reloadNATSHub");async function LTe(){let{pid_file_path:e}=yd(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Iw(e)}a(LTe,"reloadNATSLeaf");function MTe(e,t,r){let n;switch(e.code){case AW.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case AW.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(MTe,"requestErrorHandler");async function UTe(e,t){let r=t+Fr.SERVER_SUFFIX.LEAF,{connection:n}=await Ki(),{jsm:s}=await qTe(r),{schema:i,table:o}=e,c=VT.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await UW(async()=>{if(e.subscribe===!0)await MW(s,c,n.info.server_name,l);else try{await wTe(s,c,n.info.server_name)}catch(u){li.trace(u)}})}a(UTe,"updateRemoteConsumer");async function vTe(e,t,r,n){let s=VT.createNatsTableStreamName(e,t),i=r+Fr.SERVER_SUFFIX.LEAF,o={type:Xe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!bW&&oTe()<Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=XS();await c(o)}await sTe(o),n==="stop"&&await $T.async_set_timeout(1e3)}a(vTe,"updateConsumerIterator");function UW(e){return nTe.writeTransaction(Xe.SYSTEM_SCHEMA_NAME,Xe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(UW,"exclusiveLock");async function vW(e,t){let r=VT.createNatsTableStreamName(e,t),n=await KT(),s=kTe(e,t,n);await Nw(r,[s])}a(vW,"createLocalTableStream");async function BTe(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await vW(n,s)}}a(BTe,"createTableStreams");async function BW(e,t,r=void 0){if(Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=VT.createNatsTableStreamName(e,t),{domain:s}=yd(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await qE()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")li.warn(n);else throw n}}a(BW,"purgeTableStream");async function HTe(e,t){if(Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await BW(e,t[r])}a(HTe,"purgeSchemaTableStreams");async function xTe(e){return(await $E()).streams.info(e)}a(xTe,"getStreamInfo");function kTe(e,t,r){return`${Fr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(kTe,"createSubjectName");async function KT(){if(FE)return FE;if(FE=(await $E())?.nc?.info?.server_name,FE===void 0)throw new Error("Unable to get jetstream manager server name");return FE}a(KT,"getJsmServerName");async function FTe(){let e=await $E(),t=await KT(),r=await PW();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=GTe(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(".");li.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(FTe,"updateLocalStreams");function GTe(e){let{config:t}=e,r=!1,n=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=Nr.get(Xe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=Nr.get(Xe.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(GTe,"updateStreamLimits");async function qTe(e){let t,r;try{t=await tn.jetstream({domain:e}),r=await tn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw li.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(qTe,"connectToRemoteJS")});var XS=N(($Me,zW)=>{"use strict";var{decode:$Te}=require("msgpackr"),{isMainThread:FMe,parentPort:GMe,threadId:qMe}=require("worker_threads"),jT=Tr(),bd=It(),Dw=M(),rn=j(),Cw=se(),VTe=M(),{onMessageByType:KTe}=dt(),GW=Xi(),{recordAction:xW,recordActionBinary:YTe}=(Ii(),oe(K_)),{publishToStream:WTe}=jT,{ConsumerEvents:kW}=require("nats"),jTe=$r(),{promisify:zTe}=require("util"),qW=zTe(setTimeout),zT=1e4,QT,WT,QTe,JTe,$W,VE=new Map,Od=new Map;zW.exports={initialize:VW,ingestConsumer:Pw,setSubscription:XTe,setIgnoreOrigin:tge,getDatabaseSubscriptions:ege,updateConsumer:KW};async function VW(){KTe(Dw.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await KW(n)}),$W=!0,rn.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await jT.getNATSReferences();QT=e,WT=e.info.server_name,QTe=t,JTe=r}a(VW,"initialize");async function KW(e){if(e.status==="start"){let{js:t,jsm:r}=await YW(e.node_domain_name);Pw(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=VE.get(e.stream_name+e.node_domain_name);t&&(rn.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),VE.set(e.stream_name+e.node_domain_name,"close")),Od.get(e.node_domain_name)==="failed"&&Od.set(e.node_domain_name,"close")}}a(KW,"updateConsumer");var JT=new Map;function XTe(e,t,r){let n=JT.get(e);n||JT.set(e,n=new Map),n.set(t,r),$W||VW().then(ZTe)}a(XTe,"setSubscription");async function ZTe(){let e=await jTe.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+bd.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await YW(r),!n))break;let{schema:o,table:c}=i,l=GW.createNatsTableStreamName(o,c);Pw(l,n,s,r)}}}a(ZTe,"accessConsumers");async function YW(e){let t,r,n=1;for(;!r;)try{t=await QT.jetstream({domain:e}),r=await QT.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(Od.get(e)==="close")break;Od.set(e,"failed"),n%10===1&&rn.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<zT?n++*100:zT;await qW(i)}return{js:t,jsm:r}}a(YW,"connectToRemoteJS");function ege(){return JT}a(ege,"getDatabaseSubscriptions");var WW;function tge(e){WW=e}a(tge,"setIgnoreOrigin");var jW=100,FW=new Array(jW),YT=0;async function Pw(e,t,r,n){let{connection:s}=await jT.getNATSReferences();QT=s,WT=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,WT),rn.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(Od.get(n)==="close")break;o%10===1&&rn.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(rn.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await jT.createConsumer(r,e,WT,new Date(Date.now()).toISOString()));let d=o++*100<zT?o++*100:zT;await qW(d)}let c=!1,l;for(;!c;){if(VE.get(e+n)==="close"||Od.get(n)==="close"){VE.delete(e+n),c=!0;continue}l=await i.consume({max_messages:Cw.get(Dw.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),VE.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===kW.ConsumerDeleted&&(await l.close(),c=!0),d.type===kW.HeartbeatsMissed){let _=d.data;rn.trace(`${_} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),_===100&&(rn.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 FW[YT],FW[YT]=rge(d).catch(_=>{rn.error(_)}),++YT>=jW&&(YT=0)}catch(d){d.message==="consumer deleted"?(rn.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):rn.error("Error consuming clustering ingest, restarting consumer",d)}}}a(Pw,"ingestConsumer");async function rge(e){let t=$Te(e.data);xW(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),rn.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=Cw.get(Dw.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(bd.MSG_HEADERS.TRANSACTED_NODES)&&r.values(bd.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(bd.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!WW),YTe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(bd.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:_,__origin:E,expiresAt:f}=t;rn.trace("processing message:",o,c,u,(d?"records: "+d.map(U=>U?.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),rn.trace(`messageProcessor nats msg id: ${e.headers.get(bd.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=_);let T=new Promise(U=>h=U),{timestamp:m,user:g,node_name:S}=E||{},y=JT.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:ww(o),value:d[0],id:_?.[0],expiresAt:f,timestamp:m,table:u,onCommit:h,user:g,nodeName:S});else{let U=d.map((H,X)=>({type:ww(o),value:H,expiresAt:f,id:_?.[X],table:u}));for(;l;)U.push({type:ww(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:U,table:u,timestamp:m,onCommit:h,user:g,nodeName:S})}Cw.get(VTe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&WTe(e.subject.split(".").slice(0,-1).join("."),GW.createNatsTableStreamName(c,u),e.headers,e.data),await T;let I=Date.now()-m;m&&xW(I,"replication-latency",e.subject,o,"ingest")}catch(o){rn.error(o)}e.ack()}a(rge,"messageProcessor");function ww(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(ww,"convertOperation")});var nge=XS();(async()=>{try{await nge.initialize()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();