harperdb 4.7.0-beta.5 → 4.7.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "use strict";var a6=Object.create;var hm=Object.defineProperty;var c6=Object.getOwnPropertyDescriptor;var l6=Object.getOwnPropertyNames;var u6=Object.getPrototypeOf,d6=Object.prototype.hasOwnProperty;var a=(e,t)=>hm(e,"name",{value:t,configurable:!0});var ne=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)hm(e,r,{get:t[r],enumerable:!0})},NM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of l6(t))!d6.call(e,s)&&s!==r&&hm(e,s,{get:()=>t[s],enumerable:!(n=c6(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?a6(u6(e)):{},NM(t||!e||!e.__esModule?hm(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>NM(hm({},"__esModule",{value:!0}),e);var yt=M((GNe,PM)=>{var{join:f6,dirname:CM}=require("node:path"),{existsSync:m6,readFileSync:p6}=require("node:fs");function h6(){let t=__dirname,r,n=0;for(;!m6(r=f6(t,"package.json"));)if(t===(t=CM(t))||n++>10)throw new Error("Could not find package root");return r}a(h6,"findPackageJson");var OM=h6(),E6=JSON.parse(p6(OM,"utf8")),_6=CM(OM);PM.exports={packageJson:E6,PACKAGE_ROOT:_6}});var z={};ye(z,{AUTH_AUDIT_STATUS:()=>ai,AUTH_AUDIT_TYPES:()=>Fa,BOOT_PROPS_FILE_NAME:()=>H6,BOOT_PROP_PARAMS:()=>vM,CLUSTERING_FLAG:()=>Fb,CLUSTERING_PROCESSES:()=>N6,CLUSTER_MESSAGE_TYPE_ENUM:()=>Bb,CLUSTER_OPERATIONS:()=>r5,CONFIG_PARAMS:()=>F,CONFIG_PARAM_MAP:()=>MM,DATABASES_DIR_NAME:()=>jc,DATABASES_PARAM_CONFIG:()=>o5,DEFAULT_DATABASE_NAME:()=>O6,ESCAPED_FORWARD_SLASH_REGEX:()=>F6,FORWARD_SLASH_REGEX:()=>x6,FUNC_VAL:()=>_5,GEO_CONVERSION_ENUM:()=>s5,HDB_COMPONENT_CONFIG_FILE:()=>T6,HDB_CONFIG_FILE:()=>g6,HDB_DEFAULT_CONFIG_FILE:()=>S6,HDB_FILE_PERMISSIONS:()=>q6,HDB_HOME_DIR_NAME:()=>k6,HDB_PID_FILE:()=>C6,HDB_PROCESS_SERVICES:()=>w6,HDB_PROC_NAME:()=>y6,HDB_RESTART_SCRIPT:()=>R6,HDB_ROOT_DIR_NAME:()=>vb,HDB_SETTINGS_NAMES:()=>gm,HDB_SUPPORT_ADDRESS:()=>DM,INFO_TABLE_HASH_ATTRIBUTE:()=>z6,INSERT_MAX_CHARACTER_SIZE:()=>Y6,INSTALL_PROMPTS:()=>K6,ITC_EVENT_TYPES:()=>f_,JOB_STATUS_ENUM:()=>X6,JOB_TYPE_ENUM:()=>a5,JWT_ENUM:()=>Sm,LAUNCH_SERVICE_SCRIPTS:()=>L6,LEGACY_CONFIG_PARAMS:()=>i5,LEGACY_DATABASES_DIR_NAME:()=>l_,LICENSE_FILE_NAME:()=>J6,LICENSE_KEY_DIR_NAME:()=>xb,LICENSE_VALUES:()=>c5,LOG_LEVELS:()=>Em,LOG_NAMES:()=>P6,METADATA_PROPERTY:()=>d5,NODE_ERROR_CODES:()=>u5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>h5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>p5,PRE_4_0_0_VERSION:()=>g5,PROCESS_DESCRIPTORS:()=>I6,PROCESS_NAME_ENV_PROP:()=>V6,RAM_ALLOCATION_ENUM:()=>l5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>d_,REG_KEY_FILE_NAME:()=>Q6,RESTART_TIMEOUT_MS:()=>G6,ROLE_TYPES_ENUM:()=>D6,S3_BUCKET_AUTH_KEYS:()=>e5,SEARCH_NOT_FOUND_MESSAGE:()=>M6,SEARCH_WILDCARDS:()=>E5,SERVICE_ACTIONS_ENUM:()=>n5,SUPPORT_HELP_MSG:()=>v6,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>j6,SYSTEM_SCHEMA_NAME:()=>_m,SYSTEM_TABLE_NAMES:()=>Du,THREAD_TYPES:()=>Hb,TIME_STAMP_NAMES:()=>m5,TIME_STAMP_NAMES_ENUM:()=>f5,TRANSACTIONS_DIR_NAME:()=>$6,UNICODE_FORWARD_SLASH:()=>B6,UNICODE_PERIOD:()=>U6,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>W6,VALID_S3_FILE_TYPES:()=>Z6,VALID_SQL_OPS_ENUM:()=>t5,VALUE_SEARCH_COMPARATORS:()=>u_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>kb});var a_,c_,g6,S6,vb,T6,y6,R6,LM,Db,Mb,Ub,b6,A6,I6,w6,N6,C6,O6,P6,Em,L6,D6,DM,v6,M6,U6,x6,B6,F6,_m,k6,xb,H6,G6,q6,jc,l_,$6,V6,vM,K6,Y6,W6,Du,z6,j6,Q6,J6,X6,V,Z6,e5,t5,r5,n5,s5,gm,i5,F,MM,o5,a5,Bb,c5,l5,u5,d5,Fb,UM,xM,f5,m5,p5,u_,kb,h5,E5,_5,d_,Sm,f_,Hb,g5,ai,Fa,H=ne(()=>{a_=require("node:path"),c_=b(yt()),g6="harperdb-config.yaml",S6="defaultConfig.yaml",vb="hdb",T6="config.yaml",y6="harperdb.js",R6="restartHdb.js",LM="HarperDB",Db="Custom Functions",Mb="Clustering Hub",Ub="Clustering Leaf",b6="Clustering Ingest Service",A6="Clustering Reply Service",I6={HDB:LM,CLUSTERING_HUB:Mb,CLUSTERING_LEAF:Ub,CLUSTERING_INGEST_SERVICE:b6,CLUSTERING_REPLY_SERVICE:A6,CUSTOM_FUNCTIONS:Db,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"},w6={harperdb:LM,"clustering hub":Mb,"clustering leaf":Ub,"custom functions":Db,custom_functions:Db,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},N6={CLUSTERING_HUB_PROC_DESCRIPTOR:Mb,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ub},C6="hdb.pid",O6="data",P6={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Em={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},L6={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,a_.join)(c_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,a_.join)(c_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,a_.join)(c_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},D6={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},DM="support@harperdb.io",v6=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${DM}`,M6="None of the specified records were found.",U6="U+002E",x6=/\//g,B6="U+002F",F6=/U\+002F/g,_m="system",k6=".harperdb",xb="keys",H6="hdb_boot_properties.file",G6=6e4,q6=448,jc="database",l_="schema",$6="transactions",V6="PROCESS_NAME",vM={SETTINGS_PATH_KEY:"settings_path"},K6={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"},Y6=250,W6={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Du={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},z6="info_id",j6={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"},Q6="060493.ks",J6=".license",X6={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_REGISTRATION_INFO:"registration_info",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},Z6={CSV:".csv",JSON:".json"},e5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},t5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},r5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},n5={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},s5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},gm={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"},i5={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},F={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL:"http_mtls_certificateVerification_crl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"http_mtls_certificateVerification_crl_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"http_mtls_certificateVerification_crl_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"http_mtls_certificateVerification_crl_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"http_mtls_certificateVerification_crl_gracePeriod",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP:"http_mtls_certificateVerification_ocsp",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"http_mtls_certificateVerification_ocsp_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"http_mtls_certificateVerification_ocsp_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"http_mtls_certificateVerification_ocsp_errorCacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"http_mtls_certificateVerification_ocsp_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_MTLS_CERTIFICATEVERIFICATION:"replication_mtls_certificateVerification",REPLICATION_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"replication_mtls_certificateVerification_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL:"replication_mtls_certificateVerification_crl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"replication_mtls_certificateVerification_crl_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"replication_mtls_certificateVerification_crl_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"replication_mtls_certificateVerification_crl_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"replication_mtls_certificateVerification_crl_gracePeriod",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP:"replication_mtls_certificateVerification_ocsp",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"replication_mtls_certificateVerification_ocsp_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"replication_mtls_certificateVerification_ocsp_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"replication_mtls_certificateVerification_ocsp_errorCacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"replication_mtls_certificateVerification_ocsp_failureMode",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},MM={settings_path:vM.SETTINGS_PATH_KEY,hdb_root_key:F.ROOTPATH,hdb_root:F.ROOTPATH,rootpath:F.ROOTPATH,server_port_key:F.OPERATIONSAPI_NETWORK_PORT,server_port:F.OPERATIONSAPI_NETWORK_PORT,cert_key:F.TLS_CERTIFICATE,certificate:F.TLS_CERTIFICATE,private_key_key:F.TLS_PRIVATEKEY,private_key:F.TLS_PRIVATEKEY,http_secure_enabled_key:F.OPERATIONSAPI_NETWORK_HTTPS,https_on:F.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:F.OPERATIONSAPI_NETWORK_CORS,cors_on:F.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:F.LOGGING_LEVEL,log_level:F.LOGGING_LEVEL,log_path_key:F.LOGGING_ROOT,log_path:F.LOGGING_ROOT,clustering_node_name_key:F.CLUSTERING_NODENAME,node_name:F.CLUSTERING_NODENAME,clustering_enabled_key:F.CLUSTERING_ENABLED,clustering:F.CLUSTERING_ENABLED,max_http_threads:F.THREADS_COUNT,max_hdb_processes:F.THREADS_COUNT,server_timeout_key:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:F.LOGGING_AUDITLOG,disable_transaction_log:F.LOGGING_AUDITLOG,operation_token_timeout_key:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:F.HTTP_PORT,custom_functions_port:F.HTTP_PORT,custom_functions_directory_key:F.COMPONENTSROOT,custom_functions_directory:F.COMPONENTSROOT,max_custom_function_processes:F.THREADS_COUNT,logging_console:F.LOGGING_CONSOLE,log_to_file:F.LOGGING_FILE,log_to_stdstreams:F.LOGGING_STDSTREAMS,local_studio_on:F.LOCALSTUDIO_ENABLED,clustering_port:F.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:F.CLUSTERING_USER,customfunctions_network_port:F.HTTP_PORT,customfunctions_tls_certificate:F.TLS_CERTIFICATE,customfunctions_network_cors:F.HTTP_CORS,customfunctions_network_corsaccesslist:F.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:F.HTTP_HEADERSTIMEOUT,customfunctions_network_https:F.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:F.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:F.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:F.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:F.HTTP_TIMEOUT,customfunctions_tls:F.TLS,http_threads:F.THREADS_COUNT,threads:F.THREADS_COUNT,threads_count:F.THREADS_COUNT,customfunctions_processes:F.THREADS_COUNT,customfunctions_root:F.COMPONENTSROOT,operationsapi_root:F.ROOTPATH};for(let e in F){let t=F[e];MM[t.toLowerCase()]=t}o5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},a5={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},Bb={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"},c5={VERSION_DEFAULT:"2.2.0"},l5={DEVELOPMENT:8192,DEFAULT:512},u5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},d5=Symbol("metadata"),Fb="__clustering__",UM="__createdtime__",xM="__updatedtime__",f5={CREATED_TIME:UM,UPDATED_TIME:xM},m5=[UM,xM],p5=15984864e5,u_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},kb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},h5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},E5=["*","%"],_5="func_val",d_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Sm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},f_={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},Hb={HTTP:"http"},g5="3.x.x",ai={SUCCESS:"success",FAILURE:"failure"},Fa={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Qc=M(($Ne,kM)=>{"use strict";var BM=require("minimist");kM.exports=S5;function S5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=FM(process.env),n=FM(BM(process.argv))):(r=process.env,n=BM(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(S5,"assignCMDENVVariables");function FM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(FM,"objKeysToLowerCase")});var ci=M(ts=>{"use strict";global.Resource=ts.Resource=void 0;global.tables=ts.tables={};global.databases=ts.databases={};global.getUser=ts.getUser=void 0;global.authenticateUser=ts.authenticateUser=void 0;global.server=ts.server={};global.contentTypes=ts.contentTypes=null;global.threads=ts.threads=[];global.logger={};global.RequestTarget=ts.RequestTarget=void 0;global.operation=ts.operation=void 0;ts._assignPackageExport=(e,t)=>{global[e]=ts[e]=t}});var Gb=M((YNe,HM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=yt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let N=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let $=0,ee=0;try{N.add(I),$=o(n(p,I)).mtimeMs-5e3,ee=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}$>ee&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!N.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let N=f("npx",["tsc"],{cwd:p});if(N.stdout?.length&&console.log(N.stdout.toString()),N.stderr?.length&&console.log(N.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),$=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),$=!0}catch{}if(!$){console.log("Starting background TypeScript compilation...");let ee=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});ee.on("error",G=>{console.error("Error trying to compile TypeScript",G)}),ee.pid&&l(I,String(ee.pid),"utf-8"),ee.unref()}}}}let g=HM.constructor,R=g._findPath;g._findPath=function(S,y,N){if(S.startsWith(".")&&!N&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),$;I.startsWith(E)?$=n(p,r(E,I)):$=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let ee=n($,S),G=ee+".js";if(i(G))return G;if(s(ee).includes(".")&&i(ee))return ee}return R(S,y,N)}}});var Tm={};ye(Tm,{server:()=>Be});var GM,Be,Hr=ne(()=>{GM=b(ci()),Be={};(0,GM._assignPackageExport)("server",Be)});var Yt=M((WNe,$M)=>{"use strict";var T5="__dbis__",y5="__txns__",R5="__environment_name__",b5="__dbi_defintion__",A5={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"},I5=["__createdtime__","__updatedtime__"],w5="\uFFFF",qM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},N5=Object.values(qM);$M.exports={AUDIT_STORE_NAME:y5,INTERNAL_DBIS_NAME:T5,DBI_DEFINITION_NAME:b5,SEARCH_TYPES:A5,TIMESTAMP_NAMES:I5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:R5,TRANSACTIONS_DBI_NAMES_ENUM:qM,TRANSACTIONS_DBIS:N5,OVERFLOW_MARKER:w5}});var Jr=M((zNe,XM)=>{"use strict";var VM=(H(),v(z)),KM=Yt(),YM={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},WM=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),zM={500:WM("There was an error processing your request."),400:"Invalid request"},C5=zM[YM.INTERNAL_SERVER_ERROR],O5={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")},P5={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},L5={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"},D5={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"value is required",SEARCH_VALUE_TOO_LARGE:"value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${KM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${KM.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"},v5={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${VM.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${VM.INSERT_MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},jM={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"},M5={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."},U5={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")},x5={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"},B5={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},F5={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")},QM={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")},JM={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},k5={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},H5={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},G5={...jM,...L5,...O5,...M5,...U5,...x5,...B5,...F5,...v5,...QM,...JM,...k5,...H5,...P5};XM.exports={CHECK_LOGS_WRAPPER:WM,HDB_ERROR_MSGS:G5,DEFAULT_ERROR_MSGS:zM,DEFAULT_ERROR_RESP:C5,HTTP_STATUS_CODES:YM,LMDB_ERRORS_ENUM:D5,AUTHENTICATION_ERROR_MSGS:jM,VALIDATION_ERROR_MSGS:QM,ITC_ERRORS:JM}});var oe=M(Ae=>{"use strict";var ka=require("path"),nU=require("fs-extra"),vn=J(),ZM=require("fs-extra"),m_=require("os"),q5=require("net"),$5=require("recursive-iterator"),Ir=(H(),v(z)),{PACKAGE_ROOT:V5}=yt(),eU=require("papaparse"),p_=require("moment"),{inspect:K5}=require("util"),tU=require("is-number"),Y5=require("minimist"),W5=require("https"),z5=require("http"),j5=/^((\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)))$/,Q5=require("util").promisify(setTimeout),J5="",X5=4,rU={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=rs;Ae.isEmptyOrZeroLength=qi;Ae.arrayHasEmptyValues=t8;Ae.arrayHasEmptyOrZeroLengthValues=r8;Ae.buildFolderPath=n8;Ae.isBoolean=sU;Ae.errorizeMessage=Z5;Ae.stripFileExtension=i8;Ae.autoCast=o8;Ae.autoCastJSON=iU;Ae.autoCastJSONDeep=$b;Ae.removeDir=a8;Ae.compareVersions=c8;Ae.isCompatibleDataVersion=l8;Ae.escapeRawValue=u8;Ae.unescapeValue=d8;Ae.stringifyProps=f8;Ae.timeoutPromise=p8;Ae.isClusterOperation=E8;Ae.getClusterUser=g8;Ae.checkGlobalSchemaTable=_8;Ae.getHomeDir=aU;Ae.getPropsFilePath=m8;Ae.promisifyPapaParse=S8;Ae.removeBOM=cU;Ae.createEventPromise=T8;Ae.checkSchemaTableExist=y8;Ae.checkSchemaExists=lU;Ae.checkTableExists=uU;Ae.getStartOfTomorrowInSeconds=R8;Ae.getLimitKey=b8;Ae.isObject=s8;Ae.isNotEmptyAndHasValue=e8;Ae.autoCasterIsNumberCheck=oU;Ae.backtickASTSchemaItems=A8;Ae.isPortTaken=h8;Ae.createForkArgs=I8;Ae.autoCastBoolean=w8;Ae.asyncSetTimeout=Q5;Ae.getTableHashAttribute=N8;Ae.doesSchemaExist=C8;Ae.doesTableExist=O8;Ae.stringifyObj=P8;Ae.ms_to_time=L8;Ae.changeExtension=D8;Ae.getEnvCliRootPath=Vb;Ae.noBootFile=v8;Ae.httpRequest=M8;Ae.transformReq=U8;Ae.convertToMS=x8;Ae.PACKAGE_ROOT=V5;function Z5(e){return e instanceof Error?e:new Error(e)}a(Z5,"errorizeMessage");function rs(e){return e==null}a(rs,"isEmpty");function e8(e){return!rs(e)&&(e||e===0||e===""||sU(e))}a(e8,"isNotEmptyAndHasValue");function qi(e){return rs(e)||e.length===0||e.size===0}a(qi,"isEmptyOrZeroLength");function t8(e){if(rs(e))return!0;for(let t=0;t<e.length;t++)if(rs(e[t]))return!0;return!1}a(t8,"arrayHasEmptyValues");function r8(e){if(qi(e))return!0;for(let t=0;t<e.length;t++)if(qi(e[t]))return!0;return!1}a(r8,"arrayHasEmptyOrZeroLengthValues");function n8(...e){try{return e.join(ka.sep)}catch{console.error(e)}}a(n8,"buildFolderPath");function sU(e){return rs(e)?!1:e===!0||e===!1}a(sU,"isBoolean");function s8(e){return rs(e)?!1:typeof e=="object"}a(s8,"isObject");function i8(e){return qi(e)?J5:e.slice(0,-X5)}a(i8,"stripFileExtension");function o8(e){return rs(e)||e===""||typeof e!="string"?e:rU[e]!==void 0?rU[e]:oU(e)===!0?Number(e):j5.test(e)?new Date(e):e}a(o8,"autoCast");function iU(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(iU,"autoCastJSON");function $b(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=$b(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=$b(r);n!==r&&(e[t]=n)}return e}else return iU(e)}a($b,"autoCastJSONDeep");function oU(e){if(e.startsWith("0.")&&tU(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tU(e))}a(oU,"autoCasterIsNumberCheck");async function a8(e){if(qi(e))throw new Error(`Directory path: ${e} does not exist`);try{await ZM.emptyDir(e),await ZM.remove(e)}catch(t){throw vn.error(`Error removing files in ${e} -- ${t}`),t}}a(a8,"removeDir");function c8(e,t){if(qi(e)){vn.info("Invalid current version sent as parameter.");return}if(qi(t)){vn.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(c8,"compareVersions");function l8(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(l8,"isCompatibleDataVersion");function u8(e){if(rs(e))return e;let t=String(e);return t==="."?Ir.UNICODE_PERIOD:t===".."?Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD:t.replace(Ir.FORWARD_SLASH_REGEX,Ir.UNICODE_FORWARD_SLASH)}a(u8,"escapeRawValue");function d8(e){if(rs(e))return e;let t=String(e);return t===Ir.UNICODE_PERIOD?".":t===Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD?"..":String(e).replace(Ir.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(d8,"unescapeValue");function f8(e,t){if(rs(e))return vn.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+m_.EOL}!qi(n)&&n[0]===";"?r+=" "+n+s+m_.EOL:qi(n)||(r+=n+"="+s+m_.EOL)}catch{vn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(f8,"stringifyProps");function aU(){let e;try{e=m_.homedir()}catch{e=process.env.HOME}return e}a(aU,"getHomeDir");function m8(){let e=ka.join(aU(),Ir.HDB_HOME_DIR_NAME,Ir.BOOT_PROPS_FILE_NAME);return nU.existsSync(e)||(e=ka.join(__dirname,"../","hdb_boot_properties.file")),e}a(m8,"getPropsFilePath");function p8(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(p8,"timeoutPromise");async function h8(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=q5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(h8,"isPortTaken");function E8(e){try{return Ir.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){vn.error(`Error checking operation against cluster ops ${t}`)}return!1}a(E8,"isClusterOperation");function _8(e,t){let r=(we(),v(ft)).getDatabases();if(!r[e])return h_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return h_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(_8,"checkGlobalSchemaTable");function g8(e,t){if(rs(t)){vn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(rs(e)||qi(e)){vn.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){vn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){vn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(g8,"getClusterUser");function S8(){eU.parsePromise=function(e,t,r){return new Promise(function(n,s){eU.parse(e,{header:!0,transformHeader:cU,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(S8,"promisifyPapaParse");function cU(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(cU,"removeBOM");function T8(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;vn.info(`Got cluster status event response: ${K5(s)}`);try{i.cancel()}catch{vn.error("Error trying to cancel timeout.")}n(s)})})}a(T8,"createEventPromise");function y8(e,t){let r=lU(e);if(r)return r;let n=uU(e,t);if(n)return n}a(y8,"checkSchemaTableExist");function lU(e){let{getDatabases:t}=(we(),v(ft));if(!t()[e])return h_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(lU,"checkSchemaExists");function uU(e,t){let{getDatabases:r}=(we(),v(ft));if(!r()[e][t])return h_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(uU,"checkTableExists");function R8(){let e=p_().utc().add(1,"d").startOf("d").unix(),t=p_().utc().unix();return e-t}a(R8,"getStartOfTomorrowInSeconds");function b8(){return p_().utc().format("DD-MM-YYYY")}a(b8,"getLimitKey");function A8(e){try{let t=new $5(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){vn.error("Got an error back ticking items."),vn.error(t)}}a(A8,"backtickASTSchemaItems");function I8(e){return[e]}a(I8,"createForkArgs");function w8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(w8,"autoCastBoolean");function N8(e,t){let{getDatabases:r}=(we(),v(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(N8,"getTableHashAttribute");function C8(e){let{getDatabases:t}=(we(),v(ft));return t()[e]!==void 0}a(C8,"doesSchemaExist");function O8(e,t){let{getDatabases:r}=(we(),v(ft));return r()[e]?.[t]!==void 0}a(O8,"doesTableExist");function P8(e){try{return JSON.stringify(e)}catch{return e}}a(P8,"stringifyObj");function L8(e){let t=p_.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(L8,"ms_to_time");function D8(e,t){let r=ka.basename(e,ka.extname(e));return ka.join(ka.dirname(e),r+t)}a(D8,"changeExtension");function Vb(){if(process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Y5(process.argv);if(e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Vb,"getEnvCliRootPath");var qb;function v8(){if(qb)return qb;let e=Vb();if(Vb()&&nU.pathExistsSync(ka.join(e,Ir.HDB_CONFIG_FILE)))return qb=!0,!0}a(v8,"noBootFile");function M8(e,t){let r;return e.protocol==="http:"?r=z5:r=W5,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(M8,"httpRequest");function U8(e){if(!e.schema&&!e.database){e.schema=Ir.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(U8,"transformReq");function x8(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(x8,"convertToMS");var h_=Jr()});var Rt=M((XNe,_U)=>{"use strict";var Im=(H(),v(z)),B8=oe(),Mn=me(),wm=require("path"),F8=require("minimist"),dU=require("fs-extra"),fU=require("lodash");Mn.initSync();var{CONFIG_PARAMS:Ha,DATABASES_PARAM_CONFIG:ym,SYSTEM_SCHEMA_NAME:E_}=Im,Rm,bm,Am;function mU(){if(Rm!==void 0)return Rm;if(Mn.getHdbBasePath()!==void 0)return Rm=Mn.get(Ha.STORAGE_PATH)||wm.join(Mn.getHdbBasePath(),Im.DATABASES_DIR_NAME),Rm}a(mU,"getBaseSchemaPath");function pU(){if(bm!==void 0)return bm;if(Mn.getHdbBasePath()!==void 0)return bm=EU(E_),bm}a(pU,"getSystemSchemaPath");function hU(){if(Am!==void 0)return Am;if(Mn.getHdbBasePath()!==void 0)return Am=Mn.get(Im.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||wm.join(Mn.getHdbBasePath(),Im.TRANSACTIONS_DIR_NAME),Am}a(hU,"getTransactionAuditStoreBasePath");function k8(e,t){let r=Mn.get(Ha.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||wm.join(hU(),e.toString())}a(k8,"getTransactionAuditStorePath");function EU(e,t){e=e.toString(),t=t&&t.toString();let r=Mn.get(Im.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||wm.join(mU(),e)}a(EU,"getSchemaPath");function H8(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,F8(process.argv));let n=r[Ha.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!B8.isObject(n))throw o;i=n}for(let o of i){let c=o[E_];if(!c)continue;let l=Mn.get(Ha.DATABASES);l=l??{};let u=c?.tables?.[t]?.[ym.PATH];if(u)return fU.set(l,[E_,ym.TABLES,t,ym.PATH],u),Mn.setProperty(Ha.DATABASES,l),u;let d=c?.[ym.PATH];if(d)return fU.set(l,[E_,ym.PATH],d),Mn.setProperty(Ha.DATABASES,l),d}}let s=r[Ha.STORAGE_PATH.toUpperCase()];if(s){if(!dU.pathExistsSync(s))throw new Error(s+" does not exist");let i=wm.join(s,e);return dU.mkdirsSync(i),Mn.setProperty(Ha.STORAGE_PATH,s),i}return pU()}a(H8,"initSystemSchemaPaths");function G8(){Rm=void 0,bm=void 0,Am=void 0}a(G8,"resetPaths");_U.exports={getBaseSchemaPath:mU,getSystemSchemaPath:pU,getTransactionAuditStorePath:k8,getTransactionAuditStoreBasePath:hU,getSchemaPath:EU,initSystemSchemaPaths:H8,resetPaths:G8}});var Un=M((rCe,RU)=>{"use strict";var q8=Jr().LMDB_ERRORS_ENUM,eCe=require("lmdb"),$8=Yt(),tCe=require("buffer").Buffer,{OVERFLOW_MARKER:gU,MAX_SEARCH_KEY_LENGTH:__}=$8,SU=["number","string","symbol","boolean","bigint"];function V8(e){if(e=e?.primaryStore||e,!e)throw new Error(q8.ENV_REQUIRED)}a(V8,"validateEnv");function K8(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(K8,"stringifyData");function Y8(e){return e instanceof Date?e.valueOf():e}a(Y8,"convertKeyValueToWrite");function W8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(SU.includes(typeof e))return e.length>__?[e.slice(0,__)+gU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(SU.includes(typeof i))i.length>__?r.push(i.slice(0,__)+gU):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(W8,"getIndexedValues");var g_=0,TU=0;function yU(){TU=Date.now()-performance.now()}a(yU,"adjustStartTime");yU();var z8=6e4;setInterval(yU,z8).unref();function j8(){let e=performance.now()+TU;return e>g_?(g_=e,e):(g_+=488e-6,g_)}a(j8,"getNextMonotonicTime");RU.exports={validateEnv:V8,stringifyData:K8,convertKeyValueToWrite:Y8,getNextMonotonicTime:j8,getIndexedValues:W8}});var Nm=M((sCe,bU)=>{"use strict";var Q8=(H(),v(z)).OPERATIONS_ENUM,Kb=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=Q8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};bU.exports=Kb});var _e=M((oCe,wU)=>{"use strict";var vu=Jr(),J8=(H(),v(z)),S_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,AU),this.statusCode=n||vu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vu.DEFAULT_ERROR_MSGS[n]?vu.DEFAULT_ERROR_MSGS[n]:vu.DEFAULT_ERROR_MSGS[vu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&J()[s](i)}},Yb=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}},Wb=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function AU(e,t,r,n=J8.LOG_LEVELS.ERROR,s=null,i=!1){if(IU(e))return e;let o=new S_(e,t,r,n,s);return i&&delete o.stack,o}a(AU,"handleHDBError");function Mu(e){this.message=e}a(Mu,"Violation");Mu.prototype=Object.create(Error.prototype);Mu.prototype.constructor=Mu;Mu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var zb=class extends Mu{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function IU(e){return e.__proto__.constructor.name===S_.name}a(IU,"isHDBError");wU.exports={isHDBError:IU,handleHDBError:AU,ClientError:Yb,ServerError:Wb,AccessViolation:zb,Violation:Mu,hdbErrors:vu}});var Cm=M((lCe,PU)=>{"use strict";var cCe=Nm(),T_=(H(),v(z)),jb=oe(),NU=J(),X8=require("uuid"),{handleHDBError:y_,hdbErrors:Z8}=_e(),{HDB_ERROR_MSGS:R_,HTTP_STATUS_CODES:b_}=Z8;PU.exports=CU;function CU(e,t,r){for(let s=0;s<t.length;s++)OU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];eZ(i,r,e.operation)}}a(CU,"processRows");CU.validateAttribute=OU;function OU(e){if(Buffer.byteLength(String(e))>T_.INSERT_MAX_CHARACTER_SIZE)throw y_(new Error,R_.ATTR_NAME_LENGTH_ERR(e),b_.BAD_REQUEST,void 0,void 0,!0);if(jb.isEmptyOrZeroLength(e)||jb.isEmpty(e.trim()))throw y_(new Error,R_.ATTR_NAME_NULLISH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(OU,"validateAttribute");function eZ(e,t,r){if(!e.hasOwnProperty(t)||jb.isEmptyOrZeroLength(e[t])){if(r===T_.OPERATIONS_ENUM.INSERT||r===T_.OPERATIONS_ENUM.UPSERT){e[t]=X8.v4();return}throw NU.error("Update transaction aborted due to record with no hash value:",e),y_(new Error,R_.RECORD_MISSING_HASH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>T_.INSERT_MAX_CHARACTER_SIZE)throw NU.error(e),y_(new Error,R_.HASH_VAL_LENGTH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(eZ,"validateHash")});function BU(e){Jb=e}function sZ(){nZ=setInterval(function(){for(let e of Qb)if(e.stale){let t=e.getContext()?.url;MU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},rZ).unref()}var Xb,vU,MU,UU,xU,LU,Qb,tZ,Do,Om,DU,Jb,vo,A_,rZ,nZ,Pm=ne(()=>{Xb=b(Un()),vU=b(_e()),MU=b(J()),UU=b(me());H();xU=b(oe()),LU=100,Qb=new Set,tZ=(0,xU.convertToMS)(UU.get(F.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Do={CLOSED:0,OPEN:1,LINGERING:2};a(BU,"replicationConfirmation");vo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Do.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Do.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),Qb.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Qb.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Om&&!this.overloadChecked&&performance.now()-DU>tZ)throw new vU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Do.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Do.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,Xb.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let R=g[p===0?"before":"beforeIntermediate"];if(R){let S=R();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Do.LINGERING:Do.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<LU>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return Om||(Om=s,DU=performance.now(),Om.then(()=>{Om=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];Jb&&p&&i.push(Jb(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+LU/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Do.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},A_=class extends vo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Xb.getNextMonotonicTime)())}getReadTxn(){}},rZ=3e4;a(sZ,"startMonitoringTxns");sZ()});var FU,ns,Zb,Uu=ne(()=>{FU=require("events"),ns=class extends FU.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Zb;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)}},Zb=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Do.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new vo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var kU,Ga=ne(()=>{kU=b(ci());Pm();a(bt,"transaction");(0,kU._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var tA={};ye(tA,{add:()=>I_,applyReverse:()=>HU,getRecordAtTime:()=>eA,rebuildUpdateBefore:()=>w_});function I_(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 w_(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,I_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function HU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=iZ[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=GU}}function eA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":HU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===GU&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var iZ,GU,N_=ne(()=>{$i();a(I_,"add");I_.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)};iZ={add:I_};a(w_,"rebuildUpdateBefore");a(HU,"applyReverse");GU={};a(eA,"getRecordAtTime")});var wr=M(O_=>{var C_=J();for(let e of["trace","debug","info","warn","error","fatal","notify"])C_.logsAtLevel(e)&&(O_[e]=C_[e]);O_.loggerWithTag=e=>C_.loggerWithTag(e,!0);O_.setLogLevel=C_.setLogLevel});var zU={};ye(zU,{parse:()=>sA,streamAsJSON:()=>Dm,stringify:()=>Jc});function Dm(e){return new rA({value:e})}function qU(e){return console.error(e),JSON.stringify(Lm(e))}function $U(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Jc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===YU)return WU(e);if(t.resolution)return t.resolution.then(()=>Jc(e));throw t}}function WU(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+=WU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Jc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function sA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),cZ.test(e)?oZ.parse(e):JSON.parse(e)):null}var VU,nA,KU,oZ,aZ,YU,Lm,rA,cZ,iA=ne(()=>{VU=require("stream"),nA=b(J()),KU=b(require("json-bigint-fixes")),oZ=(0,KU.default)({useNativeBigInt:!0}),aZ=1e4,YU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw YU};({errorToString:Lm}=nA);a(Dm,"streamAsJSON");rA=class extends VU.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(nA.warn("Error serializing in stream",c),o={done:!1,value:{error:Lm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Lm(c)}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),qU)}catch(s){yield qU(s)}else yield Jc(t)}else yield Jc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);$U(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Lm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>aZ?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 $U(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(Lm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(qU,"handleError");a($U,"when");a(Jc,"stringify");a(WU,"jsStringify");cZ=/[[,:]\s*-?\d{16,}/;a(sA,"parse")});var sx={};ye(sx,{asyncSerialization:()=>uA,contentTypes:()=>lA,findBestSerializer:()=>L_,getDeserializer:()=>Bo,hasAsyncSerialization:()=>dA,registerContentHandlers:()=>Um,serialize:()=>xm,serializeMessage:()=>xo,toCsvStream:()=>P_});function lZ(e){try{return e?.[0]===123?cA(e):e}catch{return e}}function Um(e){e.register(uZ,{serializers:[{regex:/^application\/json$/,serializer:Dm},{regex:/^application\/cbor$/,serializer:a(function(t){return new Xc.EncoderStream(Mm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Zc.Readable.from((0,Vi.encodeIter)(t,Mm)):(0,Vi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),P_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Vi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Xc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function L_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=hn.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new JU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(hn.keys()).join(", "),406);n=hn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function xm(e,t,r){let n=QU&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof Ms)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=L_(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}),aA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Uo.createBrotliCompress)({params:{[Uo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Uo.constants.BROTLI_MODE_TEXT:Uo.constants.BROTLI_MODE_GENERIC,[Uo.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>QU?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Uo.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function xo(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Mo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=L_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=vm(e);return Mo?.length>0?(Mo.length===1?Mo[0]:Promise.all(Mo)).then(()=>xo(e,t,!0)):n}finally{Mo=void 0}}function uA(e){if(Mo)Mo.push(e);else throw new Error("Unable to serialize asynchronously")}function dA(){return!!Mo}function dZ(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 mZ(e){return fZ.includes(e)}function pZ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Bo(e="",t=!1){let r=pZ(e),n=r.type&&hn.get(r.type)?.deserialize||hZ(r);return t?s=>dZ(s).then(n):n}function hZ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!mZ(e.parameters.charset)&&aA.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 cA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function EZ(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function P_(e,t){let r=Zc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new ex.Transform(n,s);return r.pipe(i)}var Vi,Xc,Uo,JU,Zc,XU,oA,ZU,aA,ex,tx,rx,vm,cA,Mm,hn,lA,jU,nx,uZ,QU,Mo,fZ,Fo=ne(()=>{iA();Vi=require("msgpackr"),Xc=require("cbor-x"),Uo=require("zlib"),JU=b(_e()),Zc=b(require("stream"));Hr();XU=b(ci()),oA=b(me());H();ZU=b(require("yaml")),aA=b(wr());ss();ex=require("json2csv"),tx=b(require("fastify-plugin")),rx=oA.default.get(F.SERIALIZATION_BIGINT)!==!1,vm=rx?Jc:JSON.stringify,cA=rx?sA:JSON.parse,Mm={useRecords:!1,useToJSON:!0},hn=new Map,lA=hn;Be.contentTypes=lA;(0,XU._assignPackageExport)("contentTypes",lA);hn.set("application/json",{serializeStream:Dm,serialize:vm,deserialize(e){return cA(e)},q:.8});jU=new Xc.Encoder(Mm);hn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Xc.EncoderStream(Mm).end(e)},serialize:jU.encode,deserialize:jU.decode,q:1});hn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Zc.Readable.from((0,Vi.encodeIter)(e,Mm)):(0,Vi.pack)(e)},serialize:Vi.pack,deserialize:Vi.unpack,q:.9});hn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),P_(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]),P_(e,e?.getColumns?.())},q:.1});hn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Zc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});hn.set("text/yaml",{serialize(e){return ZU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});hn.set("text/event-stream",{serializeStream:a(function(e){return Zc.Readable.from(EZ(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
1
+ "use strict";var a6=Object.create;var hm=Object.defineProperty;var c6=Object.getOwnPropertyDescriptor;var l6=Object.getOwnPropertyNames;var u6=Object.getPrototypeOf,d6=Object.prototype.hasOwnProperty;var a=(e,t)=>hm(e,"name",{value:t,configurable:!0});var se=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ye=(e,t)=>{for(var r in t)hm(e,r,{get:t[r],enumerable:!0})},NM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of l6(t))!d6.call(e,s)&&s!==r&&hm(e,s,{get:()=>t[s],enumerable:!(n=c6(t,s))||n.enumerable});return e};var b=(e,t,r)=>(r=e!=null?a6(u6(e)):{},NM(t||!e||!e.__esModule?hm(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>NM(hm({},"__esModule",{value:!0}),e);var yt=M((GNe,PM)=>{var{join:f6,dirname:CM}=require("node:path"),{existsSync:m6,readFileSync:p6}=require("node:fs");function h6(){let t=__dirname,r,n=0;for(;!m6(r=f6(t,"package.json"));)if(t===(t=CM(t))||n++>10)throw new Error("Could not find package root");return r}a(h6,"findPackageJson");var OM=h6(),E6=JSON.parse(p6(OM,"utf8")),_6=CM(OM);PM.exports={packageJson:E6,PACKAGE_ROOT:_6}});var z={};ye(z,{AUTH_AUDIT_STATUS:()=>ai,AUTH_AUDIT_TYPES:()=>Fa,BOOT_PROPS_FILE_NAME:()=>H6,BOOT_PROP_PARAMS:()=>vM,CLUSTERING_FLAG:()=>Fb,CLUSTERING_PROCESSES:()=>N6,CLUSTER_MESSAGE_TYPE_ENUM:()=>Bb,CLUSTER_OPERATIONS:()=>r5,CONFIG_PARAMS:()=>F,CONFIG_PARAM_MAP:()=>MM,DATABASES_DIR_NAME:()=>jc,DATABASES_PARAM_CONFIG:()=>o5,DEFAULT_DATABASE_NAME:()=>O6,ESCAPED_FORWARD_SLASH_REGEX:()=>F6,FORWARD_SLASH_REGEX:()=>x6,FUNC_VAL:()=>_5,GEO_CONVERSION_ENUM:()=>s5,HDB_COMPONENT_CONFIG_FILE:()=>T6,HDB_CONFIG_FILE:()=>g6,HDB_DEFAULT_CONFIG_FILE:()=>S6,HDB_FILE_PERMISSIONS:()=>q6,HDB_HOME_DIR_NAME:()=>k6,HDB_PID_FILE:()=>C6,HDB_PROCESS_SERVICES:()=>w6,HDB_PROC_NAME:()=>y6,HDB_RESTART_SCRIPT:()=>R6,HDB_ROOT_DIR_NAME:()=>vb,HDB_SETTINGS_NAMES:()=>gm,HDB_SUPPORT_ADDRESS:()=>DM,INFO_TABLE_HASH_ATTRIBUTE:()=>z6,INSERT_MAX_CHARACTER_SIZE:()=>Y6,INSTALL_PROMPTS:()=>K6,ITC_EVENT_TYPES:()=>f_,JOB_STATUS_ENUM:()=>X6,JOB_TYPE_ENUM:()=>a5,JWT_ENUM:()=>Sm,LAUNCH_SERVICE_SCRIPTS:()=>L6,LEGACY_CONFIG_PARAMS:()=>i5,LEGACY_DATABASES_DIR_NAME:()=>l_,LICENSE_FILE_NAME:()=>J6,LICENSE_KEY_DIR_NAME:()=>xb,LICENSE_VALUES:()=>c5,LOG_LEVELS:()=>Em,LOG_NAMES:()=>P6,METADATA_PROPERTY:()=>d5,NODE_ERROR_CODES:()=>u5,OPERATIONS_ENUM:()=>V,PERMS_CRUD_ENUM:()=>h5,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>p5,PRE_4_0_0_VERSION:()=>g5,PROCESS_DESCRIPTORS:()=>I6,PROCESS_NAME_ENV_PROP:()=>V6,RAM_ALLOCATION_ENUM:()=>l5,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>d_,REG_KEY_FILE_NAME:()=>Q6,RESTART_TIMEOUT_MS:()=>G6,ROLE_TYPES_ENUM:()=>D6,S3_BUCKET_AUTH_KEYS:()=>e5,SEARCH_NOT_FOUND_MESSAGE:()=>M6,SEARCH_WILDCARDS:()=>E5,SERVICE_ACTIONS_ENUM:()=>n5,SUPPORT_HELP_MSG:()=>v6,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>j6,SYSTEM_SCHEMA_NAME:()=>_m,SYSTEM_TABLE_NAMES:()=>Du,THREAD_TYPES:()=>Hb,TIME_STAMP_NAMES:()=>m5,TIME_STAMP_NAMES_ENUM:()=>f5,TRANSACTIONS_DIR_NAME:()=>$6,UNICODE_FORWARD_SLASH:()=>B6,UNICODE_PERIOD:()=>U6,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>W6,VALID_S3_FILE_TYPES:()=>Z6,VALID_SQL_OPS_ENUM:()=>t5,VALUE_SEARCH_COMPARATORS:()=>u_,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>kb});var a_,c_,g6,S6,vb,T6,y6,R6,LM,Db,Mb,Ub,b6,A6,I6,w6,N6,C6,O6,P6,Em,L6,D6,DM,v6,M6,U6,x6,B6,F6,_m,k6,xb,H6,G6,q6,jc,l_,$6,V6,vM,K6,Y6,W6,Du,z6,j6,Q6,J6,X6,V,Z6,e5,t5,r5,n5,s5,gm,i5,F,MM,o5,a5,Bb,c5,l5,u5,d5,Fb,UM,xM,f5,m5,p5,u_,kb,h5,E5,_5,d_,Sm,f_,Hb,g5,ai,Fa,H=se(()=>{a_=require("node:path"),c_=b(yt()),g6="harperdb-config.yaml",S6="defaultConfig.yaml",vb="hdb",T6="config.yaml",y6="harperdb.js",R6="restartHdb.js",LM="HarperDB",Db="Custom Functions",Mb="Clustering Hub",Ub="Clustering Leaf",b6="Clustering Ingest Service",A6="Clustering Reply Service",I6={HDB:LM,CLUSTERING_HUB:Mb,CLUSTERING_LEAF:Ub,CLUSTERING_INGEST_SERVICE:b6,CLUSTERING_REPLY_SERVICE:A6,CUSTOM_FUNCTIONS:Db,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"},w6={harperdb:LM,"clustering hub":Mb,"clustering leaf":Ub,"custom functions":Db,custom_functions:Db,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},N6={CLUSTERING_HUB_PROC_DESCRIPTOR:Mb,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ub},C6="hdb.pid",O6="data",P6={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Em={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},L6={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,a_.join)(c_.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,a_.join)(c_.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,a_.join)(c_.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},D6={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},DM="support@harperdb.io",v6=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${DM}`,M6="None of the specified records were found.",U6="U+002E",x6=/\//g,B6="U+002F",F6=/U\+002F/g,_m="system",k6=".harperdb",xb="keys",H6="hdb_boot_properties.file",G6=6e4,q6=448,jc="database",l_="schema",$6="transactions",V6="PROCESS_NAME",vM={SETTINGS_PATH_KEY:"settings_path"},K6={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"},Y6=250,W6={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Du={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},z6="info_id",j6={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"},Q6="060493.ks",J6=".license",X6={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},V={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DESCRIBE_METRIC:"describe_metric",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_REGISTRATION_INFO:"registration_info",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",CLEANUP_ORPHAN_BLOBS:"cleanup_orphan_blobs",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status",INSTALL_USAGE_LICENSE:"install_usage_license",GET_USAGE_LICENSES:"get_usage_licenses"},Z6={CSV:".csv",JSON:".json"},e5={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},t5={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},r5={[V.INSERT]:V.INSERT,[V.UPDATE]:V.UPDATE,[V.UPSERT]:V.UPSERT,[V.DELETE]:V.DELETE},n5={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},s5={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},gm={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"},i5={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},F={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",ANALYTICS_REPLICATE:"analytics_replicate",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_COOKIE_DOMAINS:"authentication_cookie_domains",AUTHENTICATION_COOKIE_EXPIRES:"authentication_cookie_expires",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",AUTHENTICATION_HASHFUNCTION:"authentication_hashFunction",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_CORSACCESSCONTROLALLOWHEADERS:"http_corsAccessControlAllowHeaders",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_MAXPARAMLENGTH:"http_maxParamLength",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",HTTP_MTLS:"http_mtls",HTTP_MTLS_REQUIRED:"http_mtls_required",HTTP_MTLS_USER:"http_mtls_user",HTTP_MTLS_CERTIFICATEVERIFICATION:"http_mtls_certificateVerification",HTTP_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"http_mtls_certificateVerification_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL:"http_mtls_certificateVerification_crl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"http_mtls_certificateVerification_crl_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"http_mtls_certificateVerification_crl_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"http_mtls_certificateVerification_crl_failureMode",HTTP_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"http_mtls_certificateVerification_crl_gracePeriod",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP:"http_mtls_certificateVerification_ocsp",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"http_mtls_certificateVerification_ocsp_timeout",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"http_mtls_certificateVerification_ocsp_cacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"http_mtls_certificateVerification_ocsp_errorCacheTtl",HTTP_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"http_mtls_certificateVerification_ocsp_failureMode",HTTP_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_REQUESTQUEUELIMIT:"http_requestQueueLimit",HTTP_HTTP2:"http_http2",LICENSE_MODE:"license_mode",LICENSE_REGION:"license_region",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_MTLS_CERTIFICATEVERIFICATION:"replication_mtls_certificateVerification",REPLICATION_MTLS_CERTIFICATEVERIFICATION_FAILUREMODE:"replication_mtls_certificateVerification_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL:"replication_mtls_certificateVerification_crl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_TIMEOUT:"replication_mtls_certificateVerification_crl_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_CACHETTL:"replication_mtls_certificateVerification_crl_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_FAILUREMODE:"replication_mtls_certificateVerification_crl_failureMode",REPLICATION_MTLS_CERTIFICATEVERIFICATION_CRL_GRACEPERIOD:"replication_mtls_certificateVerification_crl_gracePeriod",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP:"replication_mtls_certificateVerification_ocsp",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_TIMEOUT:"replication_mtls_certificateVerification_ocsp_timeout",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_CACHETTL:"replication_mtls_certificateVerification_ocsp_cacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_ERRORCACHETTL:"replication_mtls_certificateVerification_ocsp_errorCacheTtl",REPLICATION_MTLS_CERTIFICATEVERIFICATION_OCSP_FAILUREMODE:"replication_mtls_certificateVerification_ocsp_failureMode",REPLICATION_SHARD:"replication_shard",REPLICATION_BLOBTIMEOUT:"replication_blobTimeout",REPLICATION_FAILOVER:"replication_failOver",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_BLOBPATHS:"storage_blobPaths",STORAGE_AUDIT_PATH:"storage_audit_path",STORAGE_MAXFREESPACETOLOAD:"storage_maxFreeSpaceToLoad",STORAGE_MAXFREESPACETORETAIN:"storage_maxFreeSpaceToRetain",STORAGE_PAGESIZE:"storage_pageSize",STORAGE_COMPRESSION_DICTIONARY:"storage_compression_dictionary",STORAGE_COMPRESSION_THRESHOLD:"storage_compression_threshold",STORAGE_COMPACTONSTART:"storage_compactOnStart",STORAGE_COMPACTONSTARTKEEPBACKUP:"storage_compactOnStartKeepBackup",STORAGE_RECLAMATION_THRESHOLD:"storage_reclamation_threshold",STORAGE_RECLAMATION_INTERVAL:"storage_reclamation_interval",STORAGE_RECLAMATION_EVICTIONFACTOR:"storage_reclamation_evictionFactor",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_NETWORK_MTLS:"mqtt_network_mtls",MQTT_NETWORK_MTLS_REQUIRED:"mqtt_network_mtls_required",MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY:"mqtt_network_mtls_certificateAuthority",MQTT_NETWORK_MTLS_USER:"mqtt_network_mtls_user",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority",TLS_CIPHERS:"tls_ciphers",TLS:"tls",CLONED:"cloned"},MM={settings_path:vM.SETTINGS_PATH_KEY,hdb_root_key:F.ROOTPATH,hdb_root:F.ROOTPATH,rootpath:F.ROOTPATH,server_port_key:F.OPERATIONSAPI_NETWORK_PORT,server_port:F.OPERATIONSAPI_NETWORK_PORT,cert_key:F.TLS_CERTIFICATE,certificate:F.TLS_CERTIFICATE,private_key_key:F.TLS_PRIVATEKEY,private_key:F.TLS_PRIVATEKEY,http_secure_enabled_key:F.OPERATIONSAPI_NETWORK_HTTPS,https_on:F.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:F.OPERATIONSAPI_NETWORK_CORS,cors_on:F.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:F.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:F.LOGGING_LEVEL,log_level:F.LOGGING_LEVEL,log_path_key:F.LOGGING_ROOT,log_path:F.LOGGING_ROOT,clustering_node_name_key:F.CLUSTERING_NODENAME,node_name:F.CLUSTERING_NODENAME,clustering_enabled_key:F.CLUSTERING_ENABLED,clustering:F.CLUSTERING_ENABLED,max_http_threads:F.THREADS_COUNT,max_hdb_processes:F.THREADS_COUNT,server_timeout_key:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:F.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:F.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:F.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:F.LOGGING_AUDITLOG,disable_transaction_log:F.LOGGING_AUDITLOG,operation_token_timeout_key:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:F.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:F.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:F.HTTP_PORT,custom_functions_port:F.HTTP_PORT,custom_functions_directory_key:F.COMPONENTSROOT,custom_functions_directory:F.COMPONENTSROOT,max_custom_function_processes:F.THREADS_COUNT,logging_console:F.LOGGING_CONSOLE,log_to_file:F.LOGGING_FILE,log_to_stdstreams:F.LOGGING_STDSTREAMS,local_studio_on:F.LOCALSTUDIO_ENABLED,clustering_port:F.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:F.CLUSTERING_USER,customfunctions_network_port:F.HTTP_PORT,customfunctions_tls_certificate:F.TLS_CERTIFICATE,customfunctions_network_cors:F.HTTP_CORS,customfunctions_network_corsaccesslist:F.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:F.HTTP_HEADERSTIMEOUT,customfunctions_network_https:F.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:F.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:F.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:F.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:F.HTTP_TIMEOUT,customfunctions_tls:F.TLS,http_threads:F.THREADS_COUNT,threads:F.THREADS_COUNT,threads_count:F.THREADS_COUNT,customfunctions_processes:F.THREADS_COUNT,customfunctions_root:F.COMPONENTSROOT,operationsapi_root:F.ROOTPATH};for(let e in F){let t=F[e];MM[t.toLowerCase()]=t}o5={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},a5={csv_file_load:"csv_file_load",csv_data_load:V.CSV_DATA_LOAD,csv_url_load:V.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3",restart_service:"restart_service"},Bb={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"},c5={VERSION_DEFAULT:"2.2.0"},l5={DEVELOPMENT:8192,DEFAULT:512},u5={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},d5=Symbol("metadata"),Fb="__clustering__",UM="__createdtime__",xM="__updatedtime__",f5={CREATED_TIME:UM,UPDATED_TIME:xM},m5=[UM,xM],p5=15984864e5,u_={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},kb={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},h5={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},E5=["*","%"],_5="func_val",d_={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Sm={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},f_={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart",START_JOB:"start_job",NATS_CONSUMER_UPDATE:"nats_consumer_update",COMPONENT_STATUS_REQUEST:"component_status_request",COMPONENT_STATUS_RESPONSE:"component_status_response"},Hb={HTTP:"http"},g5="3.x.x",ai={SUCCESS:"success",FAILURE:"failure"},Fa={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Qc=M(($Ne,kM)=>{"use strict";var BM=require("minimist");kM.exports=S5;function S5(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=FM(process.env),n=FM(BM(process.argv))):(r=process.env,n=BM(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(S5,"assignCMDENVVariables");function FM(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(FM,"objKeysToLowerCase")});var ci=M(ts=>{"use strict";global.Resource=ts.Resource=void 0;global.tables=ts.tables={};global.databases=ts.databases={};global.getUser=ts.getUser=void 0;global.authenticateUser=ts.authenticateUser=void 0;global.server=ts.server={};global.contentTypes=ts.contentTypes=null;global.threads=ts.threads=[];global.logger={};global.RequestTarget=ts.RequestTarget=void 0;global.operation=ts.operation=void 0;ts._assignPackageExport=(e,t)=>{global[e]=ts[e]=t}});var Gb=M((YNe,HM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n,basename:s}=require("node:path"),{existsSync:i,statSync:o,readFileSync:c,writeFileSync:l,unlinkSync:u}=require("node:fs"),{isMainThread:d}=require("node:worker_threads"),{spawnSync:f,spawn:m}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:p}=yt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],E="ts-build";if(d){let S=!1,y=!1;if(y=i(n(p,E))){let N=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:p}).forEach(I=>{let $=0,ee=0;try{N.add(I),$=o(n(p,I)).mtimeMs-5e3,ee=o(n(p,E,I.replace(/.ts$/,".js"))).mtimeMs}catch{}$>ee&&(S=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(p,E)}).forEach(I=>{if(!N.has(I.replace(/.js$/,".ts")))try{u(n(p,E,I))}catch{}})}else S=!0;if(S){console.log("Compiling TypeScript...");let N=f("npx",["tsc"],{cwd:p});if(N.stdout?.length&&console.log(N.stdout.toString()),N.stderr?.length&&console.log(N.stderr.toString()),y){let I=n(t(),"harperdb-tsc.pid"),$=!1;if(i(I))try{process.kill(+c(I,"utf8"),0),$=!0}catch{}if(!$){console.log("Starting background TypeScript compilation...");let ee=m("npx",["tsc","--watch"],{detached:!0,cwd:p,stdio:"ignore"});ee.on("error",G=>{console.error("Error trying to compile TypeScript",G)}),ee.pid&&l(I,String(ee.pid),"utf-8"),ee.unref()}}}}let g=HM.constructor,R=g._findPath;g._findPath=function(S,y,N){if(S.startsWith(".")&&!N&&y.length===1&&y[0].startsWith(p)&&!y[0].includes("node_modules")){let I=r(p,y[0]),$;I.startsWith(E)?$=n(p,r(E,I)):$=n(p,E,I),(S.endsWith(".js")||S.endsWith(".ts"))&&(S=S.slice(0,-3));let ee=n($,S),G=ee+".js";if(i(G))return G;if(s(ee).includes(".")&&i(ee))return ee}return R(S,y,N)}}});var Tm={};ye(Tm,{server:()=>Be});var GM,Be,Hr=se(()=>{GM=b(ci()),Be={};(0,GM._assignPackageExport)("server",Be)});var Yt=M((WNe,$M)=>{"use strict";var T5="__dbis__",y5="__txns__",R5="__environment_name__",b5="__dbi_defintion__",A5={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"},I5=["__createdtime__","__updatedtime__"],w5="\uFFFF",qM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},N5=Object.values(qM);$M.exports={AUDIT_STORE_NAME:y5,INTERNAL_DBIS_NAME:T5,DBI_DEFINITION_NAME:b5,SEARCH_TYPES:A5,TIMESTAMP_NAMES:I5,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:R5,TRANSACTIONS_DBI_NAMES_ENUM:qM,TRANSACTIONS_DBIS:N5,OVERFLOW_MARKER:w5}});var Jr=M((zNe,XM)=>{"use strict";var VM=(H(),v(z)),KM=Yt(),YM={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},WM=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),zM={500:WM("There was an error processing your request."),400:"Invalid request"},C5=zM[YM.INTERNAL_SERVER_ERROR],O5={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")},P5={CONFIG_VALIDATION:a(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},L5={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"},D5={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"value is required",SEARCH_VALUE_TOO_LARGE:"value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${KM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${KM.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"},v5={ATTR_NAME_LENGTH_ERR:a(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${VM.INSERT_MAX_CHARACTER_SIZE} bytes.`,"ATTR_NAME_LENGTH_ERR"),ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${VM.INSERT_MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},jM={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"},M5={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."},U5={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")},x5={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"},B5={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},F5={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")},QM={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")},JM={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:a(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},k5={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file.",BAD_SSH_KEY_NAME:"SSH key name can only contain alphanumeric, dash and underscore characters"},H5={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},G5={...jM,...L5,...O5,...M5,...U5,...x5,...B5,...F5,...v5,...QM,...JM,...k5,...H5,...P5};XM.exports={CHECK_LOGS_WRAPPER:WM,HDB_ERROR_MSGS:G5,DEFAULT_ERROR_MSGS:zM,DEFAULT_ERROR_RESP:C5,HTTP_STATUS_CODES:YM,LMDB_ERRORS_ENUM:D5,AUTHENTICATION_ERROR_MSGS:jM,VALIDATION_ERROR_MSGS:QM,ITC_ERRORS:JM}});var oe=M(Ae=>{"use strict";var ka=require("path"),nU=require("fs-extra"),vn=J(),ZM=require("fs-extra"),m_=require("os"),q5=require("net"),$5=require("recursive-iterator"),Ir=(H(),v(z)),{PACKAGE_ROOT:V5}=yt(),eU=require("papaparse"),p_=require("moment"),{inspect:K5}=require("util"),tU=require("is-number"),Y5=require("minimist"),W5=require("https"),z5=require("http"),j5=/^((\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)))$/,Q5=require("util").promisify(setTimeout),J5="",X5=4,rU={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ae.isEmpty=rs;Ae.isEmptyOrZeroLength=qi;Ae.arrayHasEmptyValues=t8;Ae.arrayHasEmptyOrZeroLengthValues=r8;Ae.buildFolderPath=n8;Ae.isBoolean=sU;Ae.errorizeMessage=Z5;Ae.stripFileExtension=i8;Ae.autoCast=o8;Ae.autoCastJSON=iU;Ae.autoCastJSONDeep=$b;Ae.removeDir=a8;Ae.compareVersions=c8;Ae.isCompatibleDataVersion=l8;Ae.escapeRawValue=u8;Ae.unescapeValue=d8;Ae.stringifyProps=f8;Ae.timeoutPromise=p8;Ae.isClusterOperation=E8;Ae.getClusterUser=g8;Ae.checkGlobalSchemaTable=_8;Ae.getHomeDir=aU;Ae.getPropsFilePath=m8;Ae.promisifyPapaParse=S8;Ae.removeBOM=cU;Ae.createEventPromise=T8;Ae.checkSchemaTableExist=y8;Ae.checkSchemaExists=lU;Ae.checkTableExists=uU;Ae.getStartOfTomorrowInSeconds=R8;Ae.getLimitKey=b8;Ae.isObject=s8;Ae.isNotEmptyAndHasValue=e8;Ae.autoCasterIsNumberCheck=oU;Ae.backtickASTSchemaItems=A8;Ae.isPortTaken=h8;Ae.createForkArgs=I8;Ae.autoCastBoolean=w8;Ae.asyncSetTimeout=Q5;Ae.getTableHashAttribute=N8;Ae.doesSchemaExist=C8;Ae.doesTableExist=O8;Ae.stringifyObj=P8;Ae.ms_to_time=L8;Ae.changeExtension=D8;Ae.getEnvCliRootPath=Vb;Ae.noBootFile=v8;Ae.httpRequest=M8;Ae.transformReq=U8;Ae.convertToMS=x8;Ae.PACKAGE_ROOT=V5;function Z5(e){return e instanceof Error?e:new Error(e)}a(Z5,"errorizeMessage");function rs(e){return e==null}a(rs,"isEmpty");function e8(e){return!rs(e)&&(e||e===0||e===""||sU(e))}a(e8,"isNotEmptyAndHasValue");function qi(e){return rs(e)||e.length===0||e.size===0}a(qi,"isEmptyOrZeroLength");function t8(e){if(rs(e))return!0;for(let t=0;t<e.length;t++)if(rs(e[t]))return!0;return!1}a(t8,"arrayHasEmptyValues");function r8(e){if(qi(e))return!0;for(let t=0;t<e.length;t++)if(qi(e[t]))return!0;return!1}a(r8,"arrayHasEmptyOrZeroLengthValues");function n8(...e){try{return e.join(ka.sep)}catch{console.error(e)}}a(n8,"buildFolderPath");function sU(e){return rs(e)?!1:e===!0||e===!1}a(sU,"isBoolean");function s8(e){return rs(e)?!1:typeof e=="object"}a(s8,"isObject");function i8(e){return qi(e)?J5:e.slice(0,-X5)}a(i8,"stripFileExtension");function o8(e){return rs(e)||e===""||typeof e!="string"?e:rU[e]!==void 0?rU[e]:oU(e)===!0?Number(e):j5.test(e)?new Date(e):e}a(o8,"autoCast");function iU(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(iU,"autoCastJSON");function $b(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=$b(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=$b(r);n!==r&&(e[t]=n)}return e}else return iU(e)}a($b,"autoCastJSONDeep");function oU(e){if(e.startsWith("0.")&&tU(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&tU(e))}a(oU,"autoCasterIsNumberCheck");async function a8(e){if(qi(e))throw new Error(`Directory path: ${e} does not exist`);try{await ZM.emptyDir(e),await ZM.remove(e)}catch(t){throw vn.error(`Error removing files in ${e} -- ${t}`),t}}a(a8,"removeDir");function c8(e,t){if(qi(e)){vn.info("Invalid current version sent as parameter.");return}if(qi(t)){vn.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(c8,"compareVersions");function l8(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(l8,"isCompatibleDataVersion");function u8(e){if(rs(e))return e;let t=String(e);return t==="."?Ir.UNICODE_PERIOD:t===".."?Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD:t.replace(Ir.FORWARD_SLASH_REGEX,Ir.UNICODE_FORWARD_SLASH)}a(u8,"escapeRawValue");function d8(e){if(rs(e))return e;let t=String(e);return t===Ir.UNICODE_PERIOD?".":t===Ir.UNICODE_PERIOD+Ir.UNICODE_PERIOD?"..":String(e).replace(Ir.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(d8,"unescapeValue");function f8(e,t){if(rs(e))return vn.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+m_.EOL}!qi(n)&&n[0]===";"?r+=" "+n+s+m_.EOL:qi(n)||(r+=n+"="+s+m_.EOL)}catch{vn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(f8,"stringifyProps");function aU(){let e;try{e=m_.homedir()}catch{e=process.env.HOME}return e}a(aU,"getHomeDir");function m8(){let e=ka.join(aU(),Ir.HDB_HOME_DIR_NAME,Ir.BOOT_PROPS_FILE_NAME);return nU.existsSync(e)||(e=ka.join(__dirname,"../","hdb_boot_properties.file")),e}a(m8,"getPropsFilePath");function p8(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(p8,"timeoutPromise");async function h8(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=q5.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(h8,"isPortTaken");function E8(e){try{return Ir.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){vn.error(`Error checking operation against cluster ops ${t}`)}return!1}a(E8,"isClusterOperation");function _8(e,t){let r=(we(),v(ft)).getDatabases();if(!r[e])return h_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return h_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(_8,"checkGlobalSchemaTable");function g8(e,t){if(rs(t)){vn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(rs(e)||qi(e)){vn.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){vn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){vn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(g8,"getClusterUser");function S8(){eU.parsePromise=function(e,t,r){return new Promise(function(n,s){eU.parse(e,{header:!0,transformHeader:cU,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(S8,"promisifyPapaParse");function cU(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(cU,"removeBOM");function T8(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;vn.info(`Got cluster status event response: ${K5(s)}`);try{i.cancel()}catch{vn.error("Error trying to cancel timeout.")}n(s)})})}a(T8,"createEventPromise");function y8(e,t){let r=lU(e);if(r)return r;let n=uU(e,t);if(n)return n}a(y8,"checkSchemaTableExist");function lU(e){let{getDatabases:t}=(we(),v(ft));if(!t()[e])return h_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(lU,"checkSchemaExists");function uU(e,t){let{getDatabases:r}=(we(),v(ft));if(!r()[e][t])return h_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(uU,"checkTableExists");function R8(){let e=p_().utc().add(1,"d").startOf("d").unix(),t=p_().utc().unix();return e-t}a(R8,"getStartOfTomorrowInSeconds");function b8(){return p_().utc().format("DD-MM-YYYY")}a(b8,"getLimitKey");function A8(e){try{let t=new $5(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){vn.error("Got an error back ticking items."),vn.error(t)}}a(A8,"backtickASTSchemaItems");function I8(e){return[e]}a(I8,"createForkArgs");function w8(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(w8,"autoCastBoolean");function N8(e,t){let{getDatabases:r}=(we(),v(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(N8,"getTableHashAttribute");function C8(e){let{getDatabases:t}=(we(),v(ft));return t()[e]!==void 0}a(C8,"doesSchemaExist");function O8(e,t){let{getDatabases:r}=(we(),v(ft));return r()[e]?.[t]!==void 0}a(O8,"doesTableExist");function P8(e){try{return JSON.stringify(e)}catch{return e}}a(P8,"stringifyObj");function L8(e){let t=p_.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(L8,"ms_to_time");function D8(e,t){let r=ka.basename(e,ka.extname(e));return ka.join(ka.dirname(e),r+t)}a(D8,"changeExtension");function Vb(){if(process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Y5(process.argv);if(e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ir.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Vb,"getEnvCliRootPath");var qb;function v8(){if(qb)return qb;let e=Vb();if(Vb()&&nU.pathExistsSync(ka.join(e,Ir.HDB_CONFIG_FILE)))return qb=!0,!0}a(v8,"noBootFile");function M8(e,t){let r;return e.protocol==="http:"?r=z5:r=W5,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(M8,"httpRequest");function U8(e){if(!e.schema&&!e.database){e.schema=Ir.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(U8,"transformReq");function x8(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(x8,"convertToMS");var h_=Jr()});var Rt=M((XNe,_U)=>{"use strict";var Im=(H(),v(z)),B8=oe(),Mn=me(),wm=require("path"),F8=require("minimist"),dU=require("fs-extra"),fU=require("lodash");Mn.initSync();var{CONFIG_PARAMS:Ha,DATABASES_PARAM_CONFIG:ym,SYSTEM_SCHEMA_NAME:E_}=Im,Rm,bm,Am;function mU(){if(Rm!==void 0)return Rm;if(Mn.getHdbBasePath()!==void 0)return Rm=Mn.get(Ha.STORAGE_PATH)||wm.join(Mn.getHdbBasePath(),Im.DATABASES_DIR_NAME),Rm}a(mU,"getBaseSchemaPath");function pU(){if(bm!==void 0)return bm;if(Mn.getHdbBasePath()!==void 0)return bm=EU(E_),bm}a(pU,"getSystemSchemaPath");function hU(){if(Am!==void 0)return Am;if(Mn.getHdbBasePath()!==void 0)return Am=Mn.get(Im.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||wm.join(Mn.getHdbBasePath(),Im.TRANSACTIONS_DIR_NAME),Am}a(hU,"getTransactionAuditStoreBasePath");function k8(e,t){let r=Mn.get(Ha.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||wm.join(hU(),e.toString())}a(k8,"getTransactionAuditStorePath");function EU(e,t){e=e.toString(),t=t&&t.toString();let r=Mn.get(Im.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||wm.join(mU(),e)}a(EU,"getSchemaPath");function H8(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,F8(process.argv));let n=r[Ha.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!B8.isObject(n))throw o;i=n}for(let o of i){let c=o[E_];if(!c)continue;let l=Mn.get(Ha.DATABASES);l=l??{};let u=c?.tables?.[t]?.[ym.PATH];if(u)return fU.set(l,[E_,ym.TABLES,t,ym.PATH],u),Mn.setProperty(Ha.DATABASES,l),u;let d=c?.[ym.PATH];if(d)return fU.set(l,[E_,ym.PATH],d),Mn.setProperty(Ha.DATABASES,l),d}}let s=r[Ha.STORAGE_PATH.toUpperCase()];if(s){if(!dU.pathExistsSync(s))throw new Error(s+" does not exist");let i=wm.join(s,e);return dU.mkdirsSync(i),Mn.setProperty(Ha.STORAGE_PATH,s),i}return pU()}a(H8,"initSystemSchemaPaths");function G8(){Rm=void 0,bm=void 0,Am=void 0}a(G8,"resetPaths");_U.exports={getBaseSchemaPath:mU,getSystemSchemaPath:pU,getTransactionAuditStorePath:k8,getTransactionAuditStoreBasePath:hU,getSchemaPath:EU,initSystemSchemaPaths:H8,resetPaths:G8}});var Un=M((rCe,RU)=>{"use strict";var q8=Jr().LMDB_ERRORS_ENUM,eCe=require("lmdb"),$8=Yt(),tCe=require("buffer").Buffer,{OVERFLOW_MARKER:gU,MAX_SEARCH_KEY_LENGTH:__}=$8,SU=["number","string","symbol","boolean","bigint"];function V8(e){if(e=e?.primaryStore||e,!e)throw new Error(q8.ENV_REQUIRED)}a(V8,"validateEnv");function K8(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(K8,"stringifyData");function Y8(e){return e instanceof Date?e.valueOf():e}a(Y8,"convertKeyValueToWrite");function W8(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(SU.includes(typeof e))return e.length>__?[e.slice(0,__)+gU]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(SU.includes(typeof i))i.length>__?r.push(i.slice(0,__)+gU):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(W8,"getIndexedValues");var g_=0,TU=0;function yU(){TU=Date.now()-performance.now()}a(yU,"adjustStartTime");yU();var z8=6e4;setInterval(yU,z8).unref();function j8(){let e=performance.now()+TU;return e>g_?(g_=e,e):(g_+=488e-6,g_)}a(j8,"getNextMonotonicTime");RU.exports={validateEnv:V8,stringifyData:K8,convertKeyValueToWrite:Y8,getNextMonotonicTime:j8,getIndexedValues:W8}});var Nm=M((sCe,bU)=>{"use strict";var Q8=(H(),v(z)).OPERATIONS_ENUM,Kb=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=Q8.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};bU.exports=Kb});var _e=M((oCe,wU)=>{"use strict";var vu=Jr(),J8=(H(),v(z)),S_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),J().warn(`An HDB Error was created: ${this.stack}`),Error.captureStackTrace(this,AU),this.statusCode=n||vu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vu.DEFAULT_ERROR_MSGS[n]?vu.DEFAULT_ERROR_MSGS[n]:vu.DEFAULT_ERROR_MSGS[vu.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,s&&(this.logLevel=s),typeof this.message!="string"&&(this.stack=t.stack),i&&J()[s](i)}},Yb=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}},Wb=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function AU(e,t,r,n=J8.LOG_LEVELS.ERROR,s=null,i=!1){if(IU(e))return e;let o=new S_(e,t,r,n,s);return i&&delete o.stack,o}a(AU,"handleHDBError");function Mu(e){this.message=e}a(Mu,"Violation");Mu.prototype=Object.create(Error.prototype);Mu.prototype.constructor=Mu;Mu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var zb=class extends Mu{static{a(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function IU(e){return e.__proto__.constructor.name===S_.name}a(IU,"isHDBError");wU.exports={isHDBError:IU,handleHDBError:AU,ClientError:Yb,ServerError:Wb,AccessViolation:zb,Violation:Mu,hdbErrors:vu}});var Cm=M((lCe,PU)=>{"use strict";var cCe=Nm(),T_=(H(),v(z)),jb=oe(),NU=J(),X8=require("uuid"),{handleHDBError:y_,hdbErrors:Z8}=_e(),{HDB_ERROR_MSGS:R_,HTTP_STATUS_CODES:b_}=Z8;PU.exports=CU;function CU(e,t,r){for(let s=0;s<t.length;s++)OU(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];eZ(i,r,e.operation)}}a(CU,"processRows");CU.validateAttribute=OU;function OU(e){if(Buffer.byteLength(String(e))>T_.INSERT_MAX_CHARACTER_SIZE)throw y_(new Error,R_.ATTR_NAME_LENGTH_ERR(e),b_.BAD_REQUEST,void 0,void 0,!0);if(jb.isEmptyOrZeroLength(e)||jb.isEmpty(e.trim()))throw y_(new Error,R_.ATTR_NAME_NULLISH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(OU,"validateAttribute");function eZ(e,t,r){if(!e.hasOwnProperty(t)||jb.isEmptyOrZeroLength(e[t])){if(r===T_.OPERATIONS_ENUM.INSERT||r===T_.OPERATIONS_ENUM.UPSERT){e[t]=X8.v4();return}throw NU.error("Update transaction aborted due to record with no hash value:",e),y_(new Error,R_.RECORD_MISSING_HASH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>T_.INSERT_MAX_CHARACTER_SIZE)throw NU.error(e),y_(new Error,R_.HASH_VAL_LENGTH_ERR,b_.BAD_REQUEST,void 0,void 0,!0)}a(eZ,"validateHash")});function BU(e){Jb=e}function sZ(){nZ=setInterval(function(){for(let e of Qb)if(e.stale){let t=e.getContext()?.url;MU.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},rZ).unref()}var Xb,vU,MU,UU,xU,LU,Qb,tZ,Do,Om,DU,Jb,vo,A_,rZ,nZ,Pm=se(()=>{Xb=b(Un()),vU=b(_e()),MU=b(J()),UU=b(me());H();xU=b(oe()),LU=100,Qb=new Set,tZ=(0,xU.convertToMS)(UU.get(F.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,Do={CLOSED:0,OPEN:1,LINGERING:2};a(BU,"replicationConfirmation");vo=class e{static{a(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=Do.OPEN;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===Do.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),Qb.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Qb.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(Om&&!this.overloadChecked&&performance.now()-DU>tZ)throw new vU.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===Do.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===Do.LINGERING){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp||(0,Xb.getNextMonotonicTime)()),t.timestamp||(t.timestamp=r);let n=t.retries||0;if(this.validated<this.writes.length)try{let f=this.validated;this.validated=this.writes.length;for(let p=f;p<this.validated;p++)this.writes[p]?.validate?.(this.timestamp);let m;for(let p=f;p<this.validated;p++){let h=this.writes[p];h&&(h.before||h.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let p=0;p<2;p++){let h;for(let E=f;E<this.validated;E++){let g=this.writes[E];if(!g)continue;let R=g[p===0?"before":"beforeIntermediate"];if(R){let S=R();h?h.push?h.push(S):h=[h,S]:h=S}}h&&await(h.push?Promise.all(h):h)}}catch(p){throw this.abort(),p}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?Do.LINGERING:Do.OPEN;let s,i=[],o=0;this.writes=this.writes.filter(f=>f);let c=a(f=>{f.commit(r,f.entry,n)},"doWrite"),l=a(()=>{let f=this.writes[o++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<LU>>n?l():s=this.writes[0].store.transaction(()=>{for(let f of this.writes)f.entry=f.store.getEntry(f.key),c(f);return!0})),s)return Om||(Om=s,DU=performance.now(),Om.then(()=>{Om=null})),s.then(f=>{if(f){if(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.replicatedConfirmation){let m=this.writes[0].store.rootStore.databaseName,p=this.writes[this.writes.length-1];Jb&&p&&i.push(Jb(m,p.store.getEntry(p.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+LU/2),t?t.retries=n+1:t={retries:1},this.commit(t)});let d={txnTime:r};if(this.next){let f=this.next?.commit(t);if(f?.then)return f?.then(m=>({txnTime:r,next:m}));d.next=f}return d}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=Do.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},A_=class extends vo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Xb.getNextMonotonicTime)())}getReadTxn(){}},rZ=3e4;a(sZ,"startMonitoringTxns");sZ()});var FU,ns,Zb,Uu=se(()=>{FU=require("events"),ns=class extends FU.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Zb;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)}},Zb=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function bt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===Do.OPEN&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new vo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function o(c){throw n.abort({}),c}}var kU,Ga=se(()=>{kU=b(ci());Pm();a(bt,"transaction");(0,kU._assignPackageExport)("transaction",bt);bt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};bt.abort=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var tA={};ye(tA,{add:()=>I_,applyReverse:()=>HU,getRecordAtTime:()=>eA,rebuildUpdateBefore:()=>w_});function I_(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 w_(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,I_(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function HU(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=iZ[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=GU}}function eA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=At(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":HU(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let o={},c=0;for(let l in s)s[l]===GU&&(o[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=At(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)o[f]&&(s[f]=d[f],o[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in o)s[l]=null;return s}var iZ,GU,N_=se(()=>{$i();a(I_,"add");I_.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)};iZ={add:I_};a(w_,"rebuildUpdateBefore");a(HU,"applyReverse");GU={};a(eA,"getRecordAtTime")});var wr=M(O_=>{var C_=J();for(let e of["trace","debug","info","warn","error","fatal","notify"])C_.logsAtLevel(e)&&(O_[e]=C_[e]);O_.loggerWithTag=e=>C_.loggerWithTag(e,!0);O_.setLogLevel=C_.setLogLevel});var zU={};ye(zU,{parse:()=>sA,streamAsJSON:()=>Dm,stringify:()=>Jc});function Dm(e){return new rA({value:e})}function qU(e){return console.error(e),JSON.stringify(Lm(e))}function $U(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Jc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===YU)return WU(e);if(t.resolution)return t.resolution.then(()=>Jc(e));throw t}}function WU(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+=WU(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Jc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function sA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),cZ.test(e)?oZ.parse(e):JSON.parse(e)):null}var VU,nA,KU,oZ,aZ,YU,Lm,rA,cZ,iA=se(()=>{VU=require("stream"),nA=b(J()),KU=b(require("json-bigint-fixes")),oZ=(0,KU.default)({useNativeBigInt:!0}),aZ=1e4,YU={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw YU};({errorToString:Lm}=nA);a(Dm,"streamAsJSON");rA=class extends VU.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;){try{o=i.next(),o.then&&(yield o.then(c=>(o=c,""),c=>(nA.warn("Error serializing in stream",c),o={done:!1,value:{error:Lm(c)}},i={next:a(()=>({done:!0}),"next")},"")))}catch(c){o={done:!1,value:{error:Lm(c)}},i={next:a(()=>({done:!0}),"next")}}if(o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),qU)}catch(s){yield qU(s)}else yield Jc(t)}else yield Jc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);$U(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Lm(t)),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>aZ?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 $U(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(Lm(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(qU,"handleError");a($U,"when");a(Jc,"stringify");a(WU,"jsStringify");cZ=/[[,:]\s*-?\d{16,}/;a(sA,"parse")});var sx={};ye(sx,{asyncSerialization:()=>uA,contentTypes:()=>lA,findBestSerializer:()=>L_,getDeserializer:()=>Bo,hasAsyncSerialization:()=>dA,registerContentHandlers:()=>Um,serialize:()=>xm,serializeMessage:()=>xo,toCsvStream:()=>P_});function lZ(e){try{return e?.[0]===123?cA(e):e}catch{return e}}function Um(e){e.register(uZ,{serializers:[{regex:/^application\/json$/,serializer:Dm},{regex:/^application\/cbor$/,serializer:a(function(t){return new Xc.EncoderStream(Mm).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:a(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Zc.Readable.from((0,Vi.encodeIter)(t,Mm)):(0,Vi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:a(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),P_(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Vi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Xc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function L_(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let h of d){let E=h.indexOf("=");m[h.substring(0,E)]=h.substring(E+1)}f=+m.q;let p=hn.get(u);if(p){let h=(p.q||1)*f;h>s&&(n=p,i=p.type||u,s=h,o=m)}}if(!n){if(r)throw new JU.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(hn.keys()).join(", "),406);n=hn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:o}}function xm(e,t,r){let n=QU&&t.headers.asObject?.["accept-encoding"]?.includes("br"),s;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),s=e.data;else if(e instanceof Uint8Array||e instanceof Ms)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=L_(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}),aA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let o=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Uo.createBrotliCompress)({params:{[Uo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Uo.constants.BROTLI_MODE_TEXT:Uo.constants.BROTLI_MODE_GENERIC,[Uo.constants.BROTLI_PARAM_QUALITY]:2}}))),o}s=i.serializer.serialize(e,r)}return n&&s?.length>QU?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Uo.brotliCompress)(s,(c,l)=>{c?o(c):i(l)}))):s}function xo(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;Mo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=L_(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=vm(e);return Mo?.length>0?(Mo.length===1?Mo[0]:Promise.all(Mo)).then(()=>xo(e,t,!0)):n}finally{Mo=void 0}}function uA(e){if(Mo)Mo.push(e);else throw new Error("Unable to serialize asynchronously")}function dA(){return!!Mo}function dZ(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 mZ(e){return fZ.includes(e)}function pZ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,o]=s.split("=");r[i.trim()]=o.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function Bo(e="",t=!1){let r=pZ(e),n=r.type&&hn.get(r.type)?.deserialize||hZ(r);return t?s=>dZ(s).then(n):n}function hZ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!mZ(e.parameters.charset)&&aA.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 cA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function EZ(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let n=r.next();return n.then?n.then(s=>({value:t(s.value),done:s.done})):{value:t(n.value),done:n.done}},return(n){return r.return(n)},throw(n){return r.throw(n)}}}}}function P_(e,t){let r=Zc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(o=>({label:o,value:o})));let s={objectMode:!0},i=new ex.Transform(n,s);return r.pipe(i)}var Vi,Xc,Uo,JU,Zc,XU,oA,ZU,aA,ex,tx,rx,vm,cA,Mm,hn,lA,jU,nx,uZ,QU,Mo,fZ,Fo=se(()=>{iA();Vi=require("msgpackr"),Xc=require("cbor-x"),Uo=require("zlib"),JU=b(_e()),Zc=b(require("stream"));Hr();XU=b(ci()),oA=b(me());H();ZU=b(require("yaml")),aA=b(wr());ss();ex=require("json2csv"),tx=b(require("fastify-plugin")),rx=oA.default.get(F.SERIALIZATION_BIGINT)!==!1,vm=rx?Jc:JSON.stringify,cA=rx?sA:JSON.parse,Mm={useRecords:!1,useToJSON:!0},hn=new Map,lA=hn;Be.contentTypes=lA;(0,XU._assignPackageExport)("contentTypes",lA);hn.set("application/json",{serializeStream:Dm,serialize:vm,deserialize(e){return cA(e)},q:.8});jU=new Xc.Encoder(Mm);hn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Xc.EncoderStream(Mm).end(e)},serialize:jU.encode,deserialize:jU.decode,q:1});hn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Zc.Readable.from((0,Vi.encodeIter)(e,Mm)):(0,Vi.pack)(e)},serialize:Vi.pack,deserialize:Vi.unpack,q:.9});hn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),P_(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]),P_(e,e?.getColumns?.())},q:.1});hn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Zc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});hn.set("text/yaml",{serialize(e){return ZU.stringify(e,{aliasDuplicateObjects:!1})},q:.7});hn.set("text/event-stream",{serializeStream:a(function(e){return Zc.Readable.from(EZ(e,this.serialize))},"serializeStream"),serialize:a(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
2
2
  `),e.data){let r=e.data;typeof r=="object"&&(r=vm(r)),t+="data: "+r+`
3
3
  `}return e.id&&(t+="id: "+e.id+`
4
4
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -7,16 +7,16 @@
7
7
 
8
8
  `:`data: ${e}
9
9
 
10
- `},"serialize"),compressible:!1,q:.8});hn.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});nx={type:"application/json",serializeStream:Dm,serialize:vm,deserialize:lZ,q:.5};hn.set("*/*",nx);hn.set("",nx);a(lZ,"tryJSONParse");a(Um,"registerContentHandlers");uZ=(0,tx.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=L_(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(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});a(L_,"findBestSerializer");QU=oA.default.get(F.HTTP_COMPRESSIONTHRESHOLD);a(xm,"serialize");a(xo,"serializeMessage");a(uA,"asyncSerialization");a(dA,"hasAsyncSerialization");a(dZ,"streamToBuffer");fZ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(mZ,"isBufferEncoding");a(pZ,"parseContentType");a(Bo,"getDeserializer");a(hZ,"deserializerUnknownType");a(EZ,"transformIterable");a(P_,"toCsvStream")});var H_={};ye(H_,{Blob:()=>Ms,blobsWereEncoded:()=>tl,cleanupOrphans:()=>PZ,databasePaths:()=>mA,decodeBlobsWithWrites:()=>k_,decodeFromDatabase:()=>Ho,decodeWithBlobCallback:()=>km,deleteBlob:()=>x_,deleteBlobsInObject:()=>$a,deleteRootBlobPathsForDB:()=>EA,encodeBlobsAsBuffers:()=>NZ,encodeBlobsWithFilePath:()=>F_,findBlobsInObject:()=>el,getFileId:()=>B_,getFilePathForBlob:()=>px,getRootBlobPathsForDB:()=>ku,isSaving:()=>yZ,saveBlob:()=>Fm,setDeletionDelay:()=>TZ,startPreCommitBlobsForRecord:()=>_A});function fx(){}function x_(e){let t=px(e);t&&setTimeout(()=>{(0,ze.unlink)(t,r=>{r&&Bt.default.debug?.("Error trying to remove blob file",r)})},mx)}function TZ(e){mx=e}function Fm(e,t=!1){let r=Gr.get(e);if(!r)r={storageIndex:0,fileId:null,store:xn},Gr.set(e,r);else{if(r.fileId)return r;r.store=xn}return r.deleteOnFailure=t,bZ(r),r.source?fA(e,r.source,r):r.contentBuffer?RZ(e,r):fA(e,qa.Readable.from(e.stream()),r),r}function fA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,ze.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;o?(m||f.write(gZ),p=(0,M_.createDeflate)(),(0,qa.pipeline)(t,p,f,E)):(m||f.write(_Z),(0,qa.pipeline)(t,f,E));function h(g){let R=BigInt(g),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?hA:dx)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(g){let R=f.fd;if(g){if(i.unlock(d,0),R&&((0,ze.close)(R),f.fd=null),r.deleteOnFailure)(0,ze.unlink)(n,S=>{S&&Bt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,ze.statSync)(n).size===0){let S=Buffer.from(g.toString());(0,ze.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Bt.default.debug?.("Error write error message to blob file",y)})}}catch(S){Bt.default.debug?.("Error checking blob file after abort",S)}u(g)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,ze.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,ze.fdatasync)(R,S=>{S&&u(S),l(),(0,ze.close)(R),f.fd=null}):(l(),(0,ze.close)(R),f.fd=null)}}a(E,"finished")}),e}function B_(e){return Gr.get(e)?.fileId}function yZ(e){return Gr.get(e)?.saving}function px(e){let t=Gr.get(e);return t?.fileId&&Fu(t)}function ku(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=mA.get(e);if(!t){if(!e.databaseName)return Bt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,U_.get)(F.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Yi.join)(n,e.databaseName)):t=[(0,Yi.join)((0,U_.getHdbBasePath)(),"blobs",e.databaseName)],mA.set(e,t)}return t}async function EA(e){let t=ku(e);t&&await Promise.all(t.map(r=>hx(r)))}async function hx(e){if((0,ze.existsSync)(e)){for(let t of await(0,Bn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await hx((0,Yi.join)(e,t.name));else try{await(0,Bn.unlink)((0,Yi.join)(e,t.name))}catch(r){Bt.default.warn?.("Error deleting file",r)}try{await(0,Bn.rmdir)(e)}catch(t){Bt.default.warn?.("Error deleting directory",t)}}}function Fu({storageIndex:e,fileId:t,store:r}){let n=ku(r);return(0,Yi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function RZ(e,t){let r=t.contentBuffer,n=r.length;if(!(n<ux))return e.size=n,fA(e,qa.Readable.from([r]),t)}function bZ(e){let t=ku(e.store),r=AZ(),n=t?.length>1?IZ(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Fu(e),o=(0,Yi.dirname)(i);(0,ze.existsSync)(o)||(0,pA.ensureDirSync)(o),e.filePath=i}function AZ(){let e=cx.get(xn);if(!e){let t=0,r=ku(xn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,ze.existsSync)(n))for(let c of(0,ze.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Yi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(xn.getUserSharedBuffer("blob-file-id",e.buffer)),cx.set(xn,e)}return Number(Atomics.add(e,0,1n))}function IZ(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(v_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,wZ(e)),e.frequencyTable[t%v_]}async function wZ(e){if(!Bn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,Bn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,pA.ensureDirSync)(s),o=await(0,Bn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(v_),n=t.map(s=>1/s);for(let s=0;s<v_;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function F_(e,t,r){xu=t,xn=r,tl=!1;try{return e()}finally{xu=void 0,xn=void 0}}function NZ(e){Xr=[];let t;try{t=e()}catch(n){throw Xr=void 0,n}let r=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,r?r.then(()=>e()):t}function k_(e,t,r){try{Xr=[],ko=r,xn=t,e()}catch(s){throw ko=void 0,Xr=void 0,s}ko=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function km(e,t,r){xn=r;try{return ko=t,e()}finally{ko=void 0}}function Ho(e,t){return xn=t,e()}function $a(e){el(e,t=>{x_(t)})}function el(e,t){if(e instanceof Ms)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&el(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&el(e[r],t)}}function _A(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Bu&&s.saveBeforeCommit){xn=t;let i=Fm(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function OZ(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function PZ(e){let t,r,n=0;for(let u in e){let d=e[u];if(t=d.primaryStore.rootStore,r=d.auditStore,r)break}let s=new Set,i=ku(t);if(i)for(let u of i)await o(u);return await c(),n;async function o(u){try{if(!(0,ze.existsSync)(u))return;for(let d of await(0,Bn.readdir)(u,{withFileTypes:!0})){let f=(0,Yi.join)(u,d.name);if(d.isDirectory())await o(f);else if(s.size%1e6===0&&Bt.default.info?.("Finding all blobs for orphan check, paths accumulated",s.size),s.add(f),s.size%2===0){let m=(0,lx.getHeapStatistics)();m.used_heap_size>m.heap_size_limit*.8&&await c()}}}catch(d){Bt.default.error?.("Error searching path for blobs",u,d)}}a(o,"searchPath");async function c(){for(let u in e){Bt.default.warn?.("Checking for references to potential orphaned blobs in table",u);let d=e[u];for(let f of d.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{f.metadataFlags&Zr&&f.value&&l(f.value),await new Promise(setImmediate)}catch(m){Bt.default.error?.("Error searching table",u," for references to potential orphaned blobs failed",m)}}Bt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:u}of r.getRange({start:1,snapshot:!1,lazy:!0}))try{let d=At(u),f=r.tableStores[d.tableId],m=f?.getEntry(d.recordId);(!m||m.version!==d.version||!m.value)&&l(d.getValue(f))}catch(d){Bt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",d)}Bt.default.warn?.("Deleting",s.size,"orphaned blobs"),n+=s.size;for(let u of s)try{await(0,Bn.unlink)(u)}catch(d){Bt.default.warn?.("Error deleting file",d)}Bt.default.warn?.("Finished deleting",s.size,"orphaned blobs"),s.clear()}a(c,"removePathsThatAreNotReferenced");function l(u){el(u,d=>{if(d instanceof Bu){let f=Gr.get(d);if(f.fileId!=null){let m=Fu(f);s.has(m)&&s.delete(m)}}})}a(l,"checkObjectForReferences")}var Ki,Bn,ze,M_,qa,pA,U_,Yi,Bt,lx,ux,Nr,dx,hA,ix,_Z,gZ,ox,Gr,ko,Ms,xu,Xr,xn,tl,Bm,D_,SZ,ax,Bu,mx,mA,cx,v_,CZ,ss=ne(()=>{Ki=require("msgpackr"),Bn=require("node:fs/promises"),ze=require("node:fs"),M_=require("node:zlib"),qa=require("node:stream"),pA=require("fs-extra"),U_=b(me());H();Yi=require("path"),Bt=b(wr());Fo();$i();lx=require("node:v8"),ux=8192,Nr=8,dx=0,hA=1,ix=255,_Z=new Uint8Array([0,dx,255,255,255,255,255,255]),gZ=new Uint8Array([0,hA,255,255,255,255,255,255]),ox=0xffffffffffff,Gr=new WeakMap,Ms=global.Blob||OZ(),tl=!1,Bm=new Uint8Array(8),D_=new DataView(Bm.buffer),SZ=6e4;a(fx,"InstanceOfBlobWithNoConstructor");fx.prototype=Ms.prototype;ax=!1,Bu=class e extends fx{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Gr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(dA()&&uA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Gr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=Fu(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Bn.readFile)(i),l.length>=Nr){l.copy(Bm,0,0,Nr);let f=D_.getBigUint64(0);if(Number(f>>48n)===ix)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<ox&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(o=!0,h(c()))))return o=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return a(d,"checkCompletion"),l[1]===hA?new Promise((f,m)=>{(0,M_.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Gr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=Fu(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=a((R,S)=>{(0,ze.open)(i,"r",(y,N)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Bt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=N,R(N)})},"openFile");return new Promise(g)},pull:a(E=>{let g=0,R=100;return new Promise(a(function S(y,N){function I(ee){(0,ze.close)(o),clearTimeout(d),u&&u.close(),N(ee),p.#e?.forEach(G=>G(ee))}a(I,"onError");let $=Buffer.allocUnsafe(262144);(0,ze.read)(o,$,0,$.length,c,(ee,G,k)=>{if(l+=G,ee)return I(ee);if(c===0){if(G<Nr){R-- >0&&f!==!1?(h(),Bt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,N),20).unref()):(Bt.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Bm,0,0,Nr);let j=D_.getBigUint64(0);if(Number(j>>48n)===ix)return I(new Error("Error in blob: "+k.subarray(Nr,G)));if(g=Number(j&0xffffffffffffn),g<ox&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);k=k.subarray(Nr,G),l-=Nr}else if(G===0){let j=Buffer.allocUnsafe(8);return(0,ze.read)(o,j,0,Nr,0,Y=>{if(Y)return I(Y);if(Bm.set(j),g=Number(D_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},SZ).unref():(u=(0,ze.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,N))}),S(y,N)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,N));return}(0,ze.close)(o),E.close(),y()})}else k=k.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,S(y,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=G;try{E.enqueue(k)}catch(j){return Bt.default.debug?.("Error enqueuing chunk",j),y()}l===g&&((0,ze.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,ze.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=Gr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Gr.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Gr.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return ax||(ax=!0,Bt.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Gr.get(this)?.saving??Promise.resolve()}},mx=500;a(x_,"deleteBlob");a(TZ,"setDeletionDelay");global.createBlob=function(e,t){let r=new Bu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Gr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof qa.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=qa.Readable.from(e);else throw new Error("Invalid source type");return r};a(Fm,"saveBlob");a(fA,"writeBlobWithStream");a(B_,"getFileId");a(yZ,"isSaving");a(px,"getFilePathForBlob");mA=new Map;a(ku,"getRootBlobPathsForDB");a(EA,"deleteRootBlobPathsForDB");a(hx,"rimrafSteadily");a(Fu,"getFilePath");a(RZ,"writeBlobWithBuffer");a(bZ,"generateFilePath");cx=new Map;a(AZ,"getNextFileId");v_=128;a(IZ,"getNextStorageIndex");a(wZ,"createFrequencyTableForStoragePaths");a(F_,"encodeBlobsWithFilePath");a(NZ,"encodeBlobsAsBuffers");a(k_,"decodeBlobsWithWrites");a(km,"decodeWithBlobCallback");a(Ho,"decodeFromDatabase");a($a,"deleteBlobsInObject");a(el,"findBlobsInObject");a(_A,"startPreCommitBlobsForRecord");CZ=new Ki.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ki.addExtension)({Class:Ms,type:11,unpack:a(function(e){let t=CZ.unpack(e),r=new Bu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Gr.set(r,{storageIndex:t[1],fileId:t[2],store:xn}),ko)return ko(r)??r;if(!xn)throw new Error("No store specified, cannot load blob from storage")}else Gr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=Gr.get(e);if(xu!==void 0&&(tl=!0,t?.recordId!==void 0&&t.recordId!==xu))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<ux)return r.size=t.contentBuffer.length,(0,Ki.pack)([r,t.contentBuffer])}if(xu!==void 0){if(t=Fm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=xu,(0,Ki.pack)([r,t.storageIndex,t.fileId])}if(t){if(ko)return ko(e),(0,Ki.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,ze.readFileSync)(Fu(t));if(n.length>=Nr&&(n.copy(Bm,0,0,Nr),Number(D_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Ki.pack)([r]),n]);if(Xr)Xr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Xr)return Xr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ki.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(OZ,"polyfillBlob");a(PZ,"cleanupOrphans")});var Tx={};ye(Tx,{onStorageReclamation:()=>Hm,runReclamationHandlers:()=>yA,setAvailableSpaceRatioGetter:()=>DZ});function Hm(e,t,r){(r||(0,q_.getWorkerIndex)()===(0,q_.getWorkerCount)()-1)&&(G_.has(e)||G_.set(e,[]),G_.get(e).push({priority:0,handler:t}),TA||(TA=setTimeout(yA,_x).unref()))}async function yA(){for(let[e,t]of G_)try{let r=await Sx(e),n=LZ/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(SA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){SA.default.error?.("Error running storage reclamation handlers",r)}TA=setTimeout(yA,_x).unref()}function DZ(e){Sx=e??gx}var gA,q_,SA,$_,Ex,G_,LZ,_x,TA,gx,Sx,V_=ne(()=>{gA=require("node:fs/promises"),q_=b(nt()),SA=b(wr());H();$_=b(me()),Ex=b(oe());$_.default.initSync();G_=new Map,LZ=$_.default.get(F.STORAGE_RECLAMATION_THRESHOLD)??.4,_x=(0,Ex.convertToMS)($_.default.get(F.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Hm,"onStorageReclamation");gx=a(async e=>{if(gA.statfs){let t=await(0,gA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),Sx=gx;a(yA,"runReclamationHandlers");a(DZ,"setAvailableSpaceRatioGetter")});var vx={};ye(vx,{ACTION_32_BIT:()=>j_,ACTION_64_BIT:()=>xZ,AUDIT_STORE_OPTIONS:()=>$m,Decoder:()=>nl,HAS_BLOBS:()=>Zr,HAS_CURRENT_RESIDENCY_ID:()=>sl,HAS_EXPIRATION_EXTENDED_TYPE:()=>Ym,HAS_ORIGINATING_OPERATION:()=>Km,HAS_PREVIOUS_RESIDENCY_ID:()=>il,REMOTE_SEQUENCE_UPDATE:()=>Q_,createAuditEntry:()=>ol,getLastRemoved:()=>MZ,openAuditStore:()=>W_,readAuditEntry:()=>At,removeAuditEntry:()=>z_,setAuditRetention:()=>UZ,transactionKeyEncoder:()=>Ox});function W_(e){let t=e.auditStore=e.openDB(RA.AUDIT_STORE_NAME,{create:!1,...$m});t||(t=e.auditStore=e.openDB(RA.AUDIT_STORE_NAME,$m),Rx(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=AA;Hm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-bA/(1+i*i)})){try{m=z_(t,h,E)}catch(g){Hu.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=vZ){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,bA/10):(Rx(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,qm.getWorkerIndex)()===(0,qm.getWorkerCount)()-1&&c(),(0,qm.getWorkerIndex)()===0&&!yx)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(yx=!0,Hu.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 z_(e,t,r){let n=BZ(r),s;if(n&Zr){s=At(r);let i=e.tableStores[s.tableId];if(i){let o=s.type==="message"?null:i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&Ho(()=>$a(s.getValue(i)),i.rootStore)}}if((n&15)===IA){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function Rx(e,t){wA[0]=t,e.put(Symbol.for("last-removed"),Px)}function MZ(e){let t=e.get(Symbol.for("last-removed"));if(t)return Px.set(t),wA[0]}function UZ(e,t=AA){bA=e,AA=t}function ol(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=Lx[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Va.setFloat64(0,n):Us.set(NA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),g(r),Va.setFloat64(h,e),h+=8,l&sl&&R(u),l&il&&R(d),l&Ym&&(Va.setFloat64(h,f),h+=8),l&Km&&R(Dx[m]),i?g(i):Us[h++]=0,l?Va.setUint32(n?8:0,p|l|3221225472):Us[n?8:0]=p;let E=Us.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let y=h;h+=1,h=(0,rl.writeKey)(S,Us,h);let N=h-y-1;N>127?N>16383?(Hu.error("Key or username was too large for audit entry",S),h=y+1,Us[y]=0):(Us.copyWithin(y+2,y+1,h),Va.setUint16(y,N|32768),h++):Us[y]=N}function R(S){S<128?Us[h++]=S:S<16384?(Va.setUint16(h,S|32768),h+=2):S<1056964608?(Va.setUint32(h,S|3221225472),h+=4):(Us[h]=255,Va.setUint32(h+1,S),h+=5)}}function BZ(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 nl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new nl(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,f=n.readFloat64(),m,p,h,E;if(i&sl&&(m=n.readInt()),i&il&&(p=n.readInt()),i&Ym&&(h=n.readFloat64()),i&Km){let y=n.readInt();E=Dx[y]}l=n.readInt();let g=n.position,R=n.position+=l,S;return{type:Lx[i&7],tableId:c,nodeId:o,get recordId(){return(0,rl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,rl.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,N,I){if(i&K_||i&Gm&&!N)return S||(S=Ho(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&Gm&&I)return eA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(K_|Gm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Hu.error("Reading audit entry error",n,e),{}}}var rl,Y_,RA,qm,Cx,Hu,Us,Va,Ox,$m,bA,vZ,wA,Px,AA,yx,K_,Gm,bx,IA,Ax,Ix,wx,Nx,j_,xZ,Q_,sl,il,Km,Ym,Zr,Lx,Dx,nl,$i=ne(()=>{rl=require("ordered-binary"),Y_=b(me()),RA=b(Yt());H();qm=b(nt()),Cx=b(oe());al();Hu=b(J());N_();ss();V_();(0,Y_.initSync)();Us=Buffer.alloc(2816),Va=new DataView(Us.buffer,Us.byteOffset,2816),Ox={writeKey(e,t,r){return e===Vm?(t.set(Vm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,rl.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,rl.readKey)(e,t,r)}},$m={encoding:"binary",keyEncoder:Ox},bA=(0,Cx.convertToMS)((0,Y_.get)(F.LOGGING_AUDITRETENTION))||86400*3,vZ=1e3,wA=new Float64Array(1),Px=new Uint8Array(wA.buffer),AA=1e4,yx=!1;a(W_,"openAuditStore");a(z_,"removeAuditEntry");a(Rx,"updateLastRemoved");a(MZ,"getLastRemoved");a(UZ,"setAuditRetention");K_=16,Gm=32,bx=1,IA=2,Ax=3,Ix=4,wx=5,Nx=6,j_=14,xZ=15,Q_=11,sl=512,il=1024,Km=2048,Ym=4096,Zr=8192,Lx={put:bx|K_,[bx]:"put",delete:IA,[IA]:"delete",message:Ax|K_,[Ax]:"message",invalidate:Ix|Gm,[Ix]:"invalidate",patch:wx|Gm,[wx]:"patch",relocate:Nx,[Nx]:"relocate"},Dx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(ol,"createAuditEntry");a(BZ,"readAction");a(At,"readAuditEntry");nl=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}}}});function J_(){return CA||(CA=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),CA}function kZ(e){return e=e.replace(FZ,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function HZ(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function PA(e){let t=Mx.default.createHash("shake128",{outputLength:4}),r;return(0,Ux.isIPv6)(e)?r=kZ(e):r=e.toLowerCase(),HZ(Uint8Array.from(t.update(r).digest()))}var Mx,Ux,OA,CA,FZ,LA=ne(()=>{we();Mx=b(require("crypto")),Ux=require("node:net"),OA=new Map;a(J_,"getAnalyticsHostnameTable");FZ=/(\d{1,3}\.){3}\d{1,3}$/;a(kZ,"normalizeIPv6");a(HZ,"nodeHashToNumber");a(PA,"stableNodeId")});var Go,DA=ne(()=>{Go={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var qx={};ye(qx,{profile:()=>Gx,userCodeFolders:()=>eg});async function Gx(){let e=(0,Z_.pathToFileURL)(Fx.PACKAGE_ROOT).toString(),t=new Map,r=100,n=Hx/1e6,s=0,i=0;try{let{profile:u}=await Gu.post("Profiler.stop");for(let d of u.nodes)t.set(d.id,d);for(let d of u.nodes)o(d);Ve(i*n,"cpu-usage","harper"),Ve(s*n,"cpu-usage","user")}catch(u){kx.error?.("analytics profiler error:",u)}finally{await Gu.post("Profiler.start")}function o(u){if(u.unassignedCount!==void 0)return u.unassignedCount;let d=u.hitCount;if(u.children)for(let f of u.children)d+=o(t.get(f));return l(u)?(s+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):c(u)?(i+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):(u.unassignedCount=d,d)}a(o,"getUserHitCount");function c(u){return u.callFrame?.url.startsWith(e)}a(c,"isHarperCode");function l(u){if(eg.some(d=>u.callFrame?.url.startsWith(d)))return!0}a(l,"isUserCode")}var Bx,X_,Fx,Z_,kx,xx,eg,Hx,Gu,$x=ne(()=>{Bx=require("node:inspector/promises");is();X_=b(me());H();Fx=b(yt()),Z_=require("node:url"),kx=b(J()),xx=(0,X_.getHdbBasePath)(),eg=xx?[(0,Z_.pathToFileURL)(xx).toString()]:[];process.env.RUN_HDB_APP&&eg.push((0,Z_.pathToFileURL)(process.env.RUN_HDB_APP).toString());Hx=1e3,Gu=new Bx.Session;Gu.connect();(async()=>{if(eg.length===0)return;await Gu.post("Profiler.enable"),await Gu.post("Profiler.setSamplingInterval",{interval:Hx}),await Gu.post("Profiler.start");let e=(0,X_.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{Gx()},e).unref()})();a(Gx,"profile")});var ng={};ye(ng,{addAnalyticsListener:()=>Qm,analyticsDelay:()=>xA,calculateCPUUtilization:()=>a0,diffResourceUsage:()=>c0,onAnalyticsAggregate:()=>kA,recordAction:()=>Ve,recordActionBinary:()=>tn,recordHostname:()=>BA,setAnalyticsEnabled:()=>$Z});function $Z(e){r0=e,clearTimeout(zm),zm=null}function VZ(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function KZ(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},rg.set(e,o)}function Ve(e,t,r,n,s){if(!r0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=rg.get(i);o?VZ(e,o):KZ(i,e,t,r,n,s),zm||YZ()}function tn(e,t,r,n,s){Ve(!!e,t,r,n,s)}function Qm(e){s0.push(e)}function YZ(){vA||=performance.now(),zm=setTimeout(async()=>{zm=null;let e=performance.now()-vA;vA=0;let t=[],r={time:Date.now(),period:e,threadId:cl.threadId,metrics:t};for(let[s,i]of rg){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of o0){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await l0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:cl.threadId,byThread:!0,...n});for(let s of s0)s(t);rg=new Map,cl.parentPort?cl.parentPort.postMessage({type:n0,report:r}):f0({report:r})},xA).unref()}async function BA(){let e=Be.hostname;en.trace?.("recordHostname server.hostname:",e);let t=PA(e);en.trace?.("recordHostname nodeId:",t);let r=J_();if(!await r.get(t)){let s={id:t,hostname:e};en.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function qu(e,t){let r=Be.hostname,n=OA.get(r);n?en.trace?.("storeMetric cached nodeId:",n):(n=PA(r),en.trace?.("storeMetric new nodeId:",n),OA.set(r,n));let s={id:[(0,UA.getNextMonotonicTime)(),n],...t};en.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function a0(e,t){let r=e.userCPUTime+e.systemCPUTime;return en.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function c0(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function WZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Go.TABLE_SIZE,database:t,table:s,size:c};en.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),qu(e,l),n+=c}return n}function Vx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=t0.statSync(s.primaryStore.env.path).size,c=WZ(e,r,n),l=o-c,u={metric:Go.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};qu(e,u),en.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){en.warn?.("Error getting DB size metrics",s)}}function Kx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:Go.STORAGE_VOLUME,database:r,...i};qu(e,o),en.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){en.warn?.("Error getting DB volume metrics",s)}}async function zZ(e,t=6e4){let r=FA(),n=u0(),s=new Promise(y=>{let N=performance.now();setImmediate(()=>{let I=performance.now();I-N>5e3&&en.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-N>5e3&&en.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-N)+"ms"),y(I-N)})}),i;for(let y of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(y.value?.time){i=y.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:y,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:$}=N;for(let ee of I||[]){let{path:G,method:k,type:j,metric:Y,count:ce,total:de,distribution:te,threads:ge,...be}=ee;ce||(ce=1);let Ye=Y+(G?"-"+G:"");k!==void 0&&(Ye+="-"+k),j!==void 0&&(Ye+="-"+j);let qe=c.get(Ye);if(qe){if(qe.threads){let er=qe.threads[$];if(er)qe=er;else{qe.threads[$]={...be};continue}}qe.count||(qe.count=1);let Ar=qe.count;for(let er in be){let Qr=be[er];typeof Qr=="number"&&(qe[er]=(qe[er]*Ar+Qr*ce)/(Ar+ce))}qe.count+=ce,de>=0&&(qe.total+=de,qe.ratio=qe.total/qe.count)}else qe={period:t,...ee},delete qe.distribution,c.set(Ye,qe),qe.byThread&&(qe.threads=[],qe.threads[$]={...be},u.push(qe));if(te){te=te.map(er=>typeof er=="number"?{value:er,count:1}:er);let Ar=l.get(Ye);Ar?Ar.push(...te):l.set(Ye,te)}}await l0()}for(let y of u){let{path:N,method:I,type:$,metric:ee,count:G,total:k,distribution:j,threads:Y,...ce}=y;Y=Y.filter(de=>de);for(let de in ce){if(typeof y[de]!="number")continue;let te=0;for(let ge of Y){let be=ge[de];typeof be=="number"&&(te+=be)}y[de]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,N]of l){let I=c.get(y);N.sort((er,Qr)=>er.value>Qr.value?1:-1);let $=I.count-1,ee=[],G=0,k=0,j;for(let er of o0){let Qr=$*er;for(;G<Qr;)j=N[k++],G+=j.count,k===1&&G--;let xr=N[k>1?k-2:0];j||(j=N[0]),ee.push(j.value-(j.value-xr.value)*(G-Qr)/j.count)}let[Y,ce,de,te,ge,be,Ye,qe,Ar]=ee;Object.assign(I,{p1:Y,p10:ce,p25:de,median:te,p75:ge,p90:be,p95:Ye,p99:qe,p999:Ar})}let f;for(let[,y]of c)y.time=d,qu(n,y),f=!0;if(f)for(let y of i0)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Go.MAIN_THREAD_UTILIZATION,idle:p-Yx,active:h-Wx,taskQueueLatency:await s,time:m,...process.memoryUsage()};qu(n,y)}Yx=p,Wx=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,en.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=c0(tg,E);en.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=tg.time?m-tg.time:t,g.cpuUtilization=a0(g,g.period);let R={metric:Go.RESOURCE_USAGE,...g};qu(n,R),tg=E;let S=ct();Vx(n,S),Vx(n,{system:S.system}),Kx(n,S),Kx(n,{system:S.system})}async function zx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function FA(){return jx||(jx=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function u0(){return Qx||(Qx=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function JZ(){d0=!0;let e=(0,jm.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await zZ(xA,e),await zx(FA(),jZ),await zx(u0(),QZ)},Math.min(e/2,2147483647)).unref()}function f0(e,t){let r=e.report;r.threadId=t?.threadId||cl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Jx+=n.mean*n.count);r.totalBytesProcessed=Jx,t&&(r.metrics.push({metric:Go.UTILIZATION,...t.performance.eventLoopUtilization(Xx.get(t))}),Xx.set(t,t.performance.eventLoopUtilization())),r.id=(0,UA.getNextMonotonicTime)(),FA().primaryStore.put(r.id,r),d0||JZ(),XZ&&(m0=e9(r))}async function e9(e){if(await m0,!Ka){let r=(0,Wm.dirname)(GZ());try{Ka=await(0,MA.open)((0,Wm.join)(r,"analytics.log"),"r+")}catch{Ka=await(0,MA.open)((0,Wm.join)(r,"analytics.log"),"w+")}}let t=(await Ka.stat()).size;if(t>ZZ){let r=Buffer.alloc(t);await Ka.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Ka.write(r,{position:0}),await Ka.truncate(r.length),t=r.length}await Ka.write(JSON.stringify(e)+`
11
- `,t)}function kA(e){e&&i0.push(e)}var cl,Zx,e0,Wm,MA,UA,jm,t0,GZ,qZ,en,rg,r0,zm,vA,xA,n0,s0,i0,o0,Yx,Wx,tg,l0,jZ,QZ,jx,Qx,d0,Jx,Xx,XZ,m0,Ka,ZZ,is=ne(()=>{cl=require("worker_threads"),Zx=b(nt());we();e0=b(J()),Wm=require("path"),MA=require("fs/promises"),UA=b(Un()),jm=b(me());H();Hr();t0=b(require("node:fs"));LA();DA();({getLogFilePath:GZ,forComponent:qZ}=e0.default);setTimeout(()=>{Promise.resolve().then(()=>$x())},1e3);en=qZ("analytics").conditional;(0,jm.initSync)();rg=new Map,r0=(0,jm.get)(F.ANALYTICS_AGGREGATEPERIOD)>-1;a($Z,"setAnalyticsEnabled");a(VZ,"recordExistingAction");a(KZ,"recordNewAction");a(Ve,"recordAction");Be.recordAnalytics=Ve;a(tn,"recordActionBinary");vA=0,xA=1e3,n0="analytics-report",s0=[],i0=[];a(Qm,"addAnalyticsListener");o0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(YZ,"sendAnalytics");a(BA,"recordHostname");a(qu,"storeMetric");a(a0,"calculateCPUUtilization");a(c0,"diffResourceUsage");a(WZ,"storeTableSizeMetrics");a(Vx,"storeDBSizeMetrics");a(Kx,"storeVolumeMetrics");a(zZ,"aggregation");Yx=0,Wx=0,tg={userCPUTime:0,systemCPUTime:0},l0=a(()=>new Promise(setImmediate),"rest");a(zx,"cleanup");jZ=36e5,QZ=31536e6;a(FA,"getRawAnalyticsTable");a(u0,"getAnalyticsTable");(0,Zx.setChildListenerByType)(n0,f0);a(JZ,"startScheduledTasks");Jx=0,Xx=new Map,XZ=!1;a(f0,"recordAnalytics");ZZ=1e6;a(e9,"logAnalytics");a(kA,"onAnalyticsAggregate")});var g0={};ye(g0,{ENTRY:()=>r9,HAS_EXPIRATION:()=>og,HAS_RESIDENCY_ID:()=>KA,HAS_STRUCTURE_UPDATE:()=>ag,LAST_TIMESTAMP_PLACEHOLDER:()=>Vm,LOCAL_TIMESTAMP:()=>t9,METADATA:()=>Ku,NEW_TIMESTAMP_PLACEHOLDER:()=>h0,NO_TIMESTAMP:()=>HA,PENDING_LOCAL_TIME:()=>YA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>NA,RecordEncoder:()=>VA,TIMESTAMP_ASSIGN_LAST:()=>s9,TIMESTAMP_ASSIGN_NEW:()=>E0,TIMESTAMP_ASSIGN_PREVIOUS:()=>_0,TIMESTAMP_PLACEHOLDER:()=>sg,TIMESTAMP_RECORD_PREVIOUS:()=>GA,entryMap:()=>Ya,handleLocalTimeForGets:()=>cg,lastMetadata:()=>lt,recordUpdater:()=>WA,removeEntry:()=>ul});function a9(){return Xm[0]=Xm[0]^64,n9.getFloat64(0)}function cg(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++,lt=null;let l=r.call(this,o,c);return l&&(lt&&(l.metadataFlags=lt[Ku],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Ya.set(l.value,l),l.key=o),l};let n=e.get;e.get=function(o,c){lt=null;let l=n.call(this,o,c);return lt&&l&&(Ya.set(l,lt),lt=null),l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>(lt&&(l.metadataFlags=lt[Ku],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,ll.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<ll.length;u++){let d=ll[u].deref();(!d||d.isDone||d.isCommitted)&&ll.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function WA(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",f,m){f||l==null?Vu=i?.localTime?GA|_0:HA:Vu=l?i?.localTime?GA|16384:E0|16384:HA;let p=u?.expiresAt;if(p>=0&&(c|=og),Jm=c,qA=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Vu>0},E,g=0;try{let R=i?.residencyId,S=u?.residencyId;S&&($A=S,Jm|=KA,g|=sl),R!==S&&(g|=il,R||(R=0)),c&og&&(g|=Ym),u?.originatingOperation&&(g|=Km),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Zr&&(r.getBinaryFast(i.localTime)||$a(i.value));let y;if(s!==void 0&&(y=F_(()=>e.put(n,s,h),n,e.rootStore),tl&&(g|=Zr)),l){let N=u?.user?.username;if(m&&(F_(()=>e.encoder.encode(m),n,e.rootStore),tl&&(g|=Zr)),e.encoder.hasStructureUpdate&&(g|=ag,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,$=r.get(I);if($){let ee=At($).previousLocalTime;return y=r.put(I,ol(o,t,n,ee,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,$u,g,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?h0:Vm,ol(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,$u,g,S,R,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&i9.has(d)&&Ve($u?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function ul(e,t,r){if(t)return t.value&&t.metadataFlags&Zr&&!e.auditStore?.getBinaryFast(t.localTime)&&$a(t.value),e.remove(t.key,r)}var p0,ig,sg,Vm,NA,h0,t9,Ku,r9,Xm,n9,HA,E0,s9,_0,GA,og,KA,YA,ag,i9,Ya,o9,$u,Vu,Jm,qA,$A,lt,VA,ll,al=ne(()=>{p0=require("msgpackr");$i();ig=b(J());ss();ss();is();sg=new Uint8Array([1,1,1,1,4,64,0,0]),Vm=new Uint8Array([1,1,1,1,1,0,0,0]),NA=new Uint8Array([1,1,1,1,3,64,0,0]),h0=new Uint8Array([1,1,1,1,0,64,0,0]),t9=Symbol("local-timestamp"),Ku=Symbol("metadata"),r9=Symbol("entry"),Xm=new Uint8Array(8),n9=new DataView(Xm.buffer,0,8),HA=0,E0=0,s9=1,_0=3,GA=4,og=16,KA=32,YA=1,ag=256,i9=new Set(["put","patch","delete","message","publish"]),Ya=new WeakMap,Vu=0,Jm=-1,qA=-1,$A=0,lt=null,VA=class extends p0.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return Ya.get(this)?.version}getExpiresAt(){return Ya.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(Vu||Jm>=0){let c=0,l=Vu;l&&(c+=8,Vu=0);let u=Jm,d=qA,f=$A;u>=0&&(c+=4,Jm=-1,d>=0&&(c+=8,qA=-1),f&&(c+=4,$A=0));let m=o9=n.call(this,i,o|2048|c);$u=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(sg[4]=l,sg[5]=l>>8,m.set(sg,p),p+=8),tl&&(u|=Zr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|j_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return $u=n.call(this,i,o),$u};let s=this.saveStructures;this.saveStructures=function(i,o){let c=s.call(this,i,o);return this.hasStructureUpdate=!0,c}}decode(t,r){lt=null;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(Xm,0,c),c+=8;else for(let m=0;m<8;m++)Xm[m]=t[c++];l=a9(),i=t[c]}let u,d;i<32&&(i===j_?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&og&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&KA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Ho(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[Ku]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Ho(()=>super.decode(t,r),this.rootStore)}catch(c){return ig.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(a9,"getTimestamp");a(cg,"handleLocalTimeForGets");ll=[];setInterval(()=>{for(let e=0;e<ll.length;e++){let t=ll[e].deref();!t||t.isDone||t.isCommitted?ll.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(ig.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):ig.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(WA,"recordUpdater");a(ul,"removeEntry")});function QA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?o(f,m):f}function u(f){return f.conditions?QA(f.conditions,f.operator,r,n,s,i,o,c):ju(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}a(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(N,I)=>y.some($=>$(N,I)):(N,I)=>y.every($=>$(N,I))}let g=(h.attribute||h[0])===r.primaryKey,R=ep(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=E9(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function ju(e,t,r,n,s,i,o){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new rn.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],N=zi(n.attributes,y);if(N.relationship){if(c.length<2)throw new rn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=N.definition?.tableClass||N.elements?.definition?.tableClass,$=new Map,ee=ju({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,$);if(N.relationship.to){i[c[0]]=$;let G=!!zi(I.attributes,N.relationship.to)?.elements;ee=f9(ee,N,I.primaryStore,G,$)}if(N.relationship.from){let G=a(k=>(k?.key!==void 0&&(k=k.key),ju({attribute:N.relationship.from,value:k},t,r,n,s,$)),"searchEntry");N.elements?(i[c[0]]=$,ee=m9(ee,N,I.primaryStore,$,G)):ee=ee.flatMap(G)}return ee}else if(c.length===1)c=c[0];else throw new rn.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(JA[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Wi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new rn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>xs.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,xs.MAX_SEARCH_KEY_LENGTH)+xs.OVERFLOW_MARKER,E=!1,R=ep(e,n,null,i,d)),typeof p=="string"&&p.length>xs.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,xs.MAX_SEARCH_KEY_LENGTH)+xs.OVERFLOW_MARKER,h=!0,R=R??ep(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new rn.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new rn.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new rn.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new rn.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??ep(e,n,null,i,d),!R)throw new rn.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:N,value:I}){return this?.isSync?I&&R(I)?N:Wa.SKIP:new Promise(($,ee)=>setImmediate(()=>{try{$(I&&R(I)?N:Wa.SKIP)}catch(G){ee(G)}}))}:N=>N.value==null&&!(N.metadataFlags&(Fn|dl))?Wa.SKIP:(o?._freezeRecords&&Object.freeze(N.value),N));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:N,...I}=y,$=n.primaryStore.getEntry(N);return o?._freezeRecords&&Object.freeze($?.value),{...I,...$}}return y}):f.getRange(S).map(R?function({key:y,value:N}){let I;return typeof y=="string"&&y.length>xs.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(N):I={[c]:y},this.isSync?R(I)?N:Wa.SKIP:new Promise(($,ee)=>setImmediate(()=>{try{$(R(I)?N:Wa.SKIP)}catch(G){ee(G)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:N}){return this.isSync?N&&R(N)?y:Wa.SKIP:new Promise((I,$)=>setImmediate(()=>{try{I(N&&R(N)?y:Wa.SKIP)}catch(ee){$(ee)}}))})}function zi(e,t){if(Array.isArray(t))if(t.length>1){let r=zi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?zi(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 f9(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 f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function m9(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?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function ep(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],f=zi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=ep({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,R=a((y,N)=>{let I,$;return E?E.returnDirect?(I=E(y,r,N),$=lt):($=E(y,r,N,!0),Array.isArray($)?(I=$.map(ee=>ee.value),$=null):I=$?.value):I=y[d],{subObject:I,subEntry:$}},"getSubObject"),S=a((y,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let G=g(y);return g.idFilter&&(S.idFilter=g.idFilter),G}let{subObject:I,subEntry:$}=R(y,N);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(G){let k=R(G).subObject;return Array.isArray(k)?k.filter(h).map(j=>j[m.primaryKey]):k}}),I.some(h)):h(I,$):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),JA[o]||o){case xs.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Wi.compareKeys)(d,l[0])>=0&&(0,Wi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Wi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Wi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Wi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Wi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Wi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new rn.ClientError(`Unknown query comparator "${o}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&ug(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function R(S){let y=S[d],N;if(typeof y!="object"||!y||p?N=f(y):Array.isArray(y)?N=y.some(f):y instanceof Date&&(N=f(y.getTime())),m&&(g++,!N&&!R.idFilter&&++E/g*i>h)){let I=ju(e,r.transaction.getReadTxn(),!1,t),$;R.to?$=I.flatMap(G=>t.primaryStore.get(G)[R.to]):$=I.map(Qu);let ee=new Set($);R.idFilter=G=>ee.has(Qu(G)),R.idFilter.idSet=ee}return N}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function ug(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/qo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=JA[n]||n,n===xs.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=zi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=ug(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*qo(e.indices[i.relationship.from])/(qo(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=qo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=u9*qo(e.primaryStore)+1;else if(n==="between")r.estimated_count=l9*qo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=qo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=c9*qo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function dg(e,t){if(e)if($o=e,Yu.lastIndex=0,p9.test(e))try{if(t&&(t.conditions=[]),li=t??new zu,Zm(li,""),qr!==$o.length&&Wt("Unable to parse query, unexpected end of query"),li.parseErrorMessage&&(li.parseError=new zA(t.parseErrorMessage),!t))throw li.parseError;return li}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${qr} in '${$o}'`,li.parseErrorMessage&&(r.message+=", "+li.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Wt(e){let t=`${e} at position ${qr}`;li.parseErrorMessage=li.parseErrorMessage?li.parseErrorMessage+", "+t:t}function Zm(e,t){let r=Yu,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec($o);){qr=r.lastIndex;let[,d,f]=n;o?(d&&Wt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Wt(`invalid FIQL operator ${d}`),l=S0):(l=decodeURIComponent,i="equals",d||Wt("attribute must be specified before equality comparator"),s=Wu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=d9[f],l=jA[i]?S0:decodeURIComponent,d||Wt(`attribute must be specified before comparator ${f}`),s=Wu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Wt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Wt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Wt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&T0(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else lg(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Wt("conditions/comparisons are not allowed in a property list"):e.push(Wu(d)),s=void 0;break;case"(":Yu.lastIndex=qr;let p=Zm(d?[]:new zu,")");switch(d){case"":lg(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Wt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Wt("group by is not implemented yet");case"sort":e.sort=y0(p);break;default:Wt(`unknown query function call ${d}`)}$o[qr]===","?r.lastIndex=++qr:o=!0,s=null;break;case"{":e.conditions&&Wt("property sets are not allowed in a queries"),d||Wt("property sets must have a defined parent property name"),Yu.lastIndex=qr,m=Zm([],"}"),m.name=d,e.push(m),$o[qr]===","?r.lastIndex=++qr:o=!0;break;case"[":if(Yu.lastIndex=qr,d?(m=Zm(new zu,"]"),m.name=d):m=Zm(e.conditions?new zu:[],"]"),e.conditions)if(lg(e,u),$o[qr]==="="){l=decodeURIComponent,i="equals",s=Wu(d),r.lastIndex=++qr;break}else e.conditions.push(m),s=null;else e.push(m);$o[qr]===","?r.lastIndex=++qr:o=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&T0(h,d),lg(e,u),e.conditions.push(h)}else d&&Wt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Wu(d));return e}else Wt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Wt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?h9:Yu,r.lastIndex=qr),qr===$o.length)return e}t&&Wt(`expected '${t}', but encountered end of string`)}function lg(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Wt("Can not mix operators within a condition grouping"):e.operator=t)}function Wu(e){return e.indexOf(".")>-1?e.split(".").map(Wu):decodeURIComponent(e)}function S0(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 rn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function T0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new rn.ClientError("wildcard can only be used at the end of a string")}function y0(e){let t=R0(e[0]);return e.length>1&&(t.next=y0(e.slice(1))),t}function R0(e){if(Array.isArray(e)){let t=R0(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}}Wt(`Unknown sort type ${e}`)}function Qu(e){return Array.isArray(e)?e.join("\0"):e}function qo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function E9(e,t,r){return t*r/qo(e)}var rn,xs,Wi,Wa,c9,l9,u9,d9,jA,JA,zA,p9,Yu,h9,qr,li,$o,zu,fg=ne(()=>{rn=b(_e()),xs=b(Yt()),Wi=require("ordered-binary"),Wa=require("lmdb");mg();al();c9=.3,l9=.1,u9=.05,d9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},jA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(QA,"executeConditions");a(ju,"searchByIndex");a(zi,"findAttribute");a(f9,"joinTo");a(m9,"joinFrom");JA={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(ep,"filterByType");a(ug,"estimateCondition");zA=class extends rn.Violation{static{a(this,"SyntaxViolation")}},p9=/[()[\]|!<>.]|(=\w*=)/,Yu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,h9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(dg,"parseQuery");a(Wt,"recordError");a(Zm,"parseBlock");a(lg,"assignOperator");a(Wu,"decodeProperty");a(S0,"typedDecoding");a(T0,"wildcardDecoding");a(y0,"toSortObject");a(R0,"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}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};a(Qu,"flattenKey");a(qo,"estimatedEntryCount");a(E9,"intersectionEstimate")});var b0,ui,pg=ne(()=>{b0=b(ci()),ui=class extends URLSearchParams{static{a(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,b0._assignPackageExport)("Resource",Resource)});var C0={};ye(C0,{MultiPartId:()=>hg,Resource:()=>lr,contextStorage:()=>Xu,snakeCase:()=>g9,transformForSelect:()=>Zu});function g9(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function A0(e,t){if(fl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(fl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new hg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){fl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return fl=!0,null;e[e.length-1]==="/"&&(fl=!0)}return t.coerceId(decodeURIComponent(e))}function kn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r){if(o)d=i,o=o.getContext?.()||o;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i.getContext?.()||i):i?.transaction instanceof vo?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Ju.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?o?(d=i,o=o.getContext?.()||o):o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,o,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new ui,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ui,l.id=c,c==null&&(u=!0);l||(l=new ui,l.id=c),u&&(l.isCollection=!0);let f;o||(o=Xu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=a(E=>Xu.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return bt(o,()=>{let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&o.authorize){o.authorize=!1;let g=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,d,o):E.allowUpdate(o.user,d,o):t.type==="create"?E.allowCreate(o.user,d,o):E.allowDelete(o.user,l,o);if(g?.then)return g.then(R=>{if(!R)throw new Ju.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!g)throw new Ju.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,o,g)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function os(e,t){let r=new Ju.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 XA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();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 Zu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):XA(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(XA(l,r,n));for(let f of e)u.push(d(f));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(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(XA(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&o&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(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]=Zu(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var I0,w0,Ju,N0,Xu,_9,lr,fl,hg,Vo=ne(()=>{I0=require("crypto");Pm();Uu();w0=b(ci()),Ju=b(_e());Ga();fg();N0=require("async_hooks");pg();Xu=new N0.AsyncLocalStorage,_9={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},lr=class{static{a(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=kn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;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=Zu(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=kn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let o of s){let c=t.constructor,l=o[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(o,n))):i.push(u.put(o,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):os(t,"put")},{hasContent:!0,type:"update"});static patch=kn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):os(t,"patch")},{hasContent:!0,type:"update"});static delete=kn(function(t,r,n,s){return t.delete?t.delete(r):os(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,I0.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Xu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),bt(n,async()=>{let i=new this(s,n),o=await i.create?i.create(s,r):os(i,"create");return n.newLocation=s??o?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?o:i})}static invalidate=kn(function(t,r,n,s){return t.invalidate?t.invalidate(r):os(t,"delete")},{hasContent:!1,type:"update"});static post=kn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=kn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=kn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):os(t,"connect")},{hasContent:!0,type:"read"});static subscribe=kn(function(t,r,n,s){return t.subscribe?t.subscribe(r):os(t,"subscribe")},{type:"read"});static publish=kn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):os(t,"publish")},{hasContent:!0,type:"create"});static search=kn(function(t,r,n){let s=t.search?t.search(r):os(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=Zu(i,t.constructor);return s.map(o)}return s},{type:"read"});static query=kn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):os(t,"search")},{hasContent:!0,type:"read"});static copy=kn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):os(t,"copy")},{hasContent:!0,type:"create"});static move=kn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):os(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;os(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return dg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&_9[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:A0(t,this),isCollection:fl}}let i=A0(t,this);return fl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),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.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#r=!0),s}subscribe(t){return new ns}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new ns}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,w0._assignPackageExport)("Resource",lr);a(g9,"snakeCase");a(A0,"pathToId");hg=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(kn,"transactional");a(os,"missingMethod");a(XA,"selectFromObject");a(Zu,"transformForSelect")});var ml,ZA=ne(()=>{ml=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var eI={};ye(eI,{Resources:()=>ed,keyArrayToString:()=>td,resetResources:()=>S9,resources:()=>Bs});function S9(){return Bs=new ed,Be.resources=Bs,Bs}function td(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var O0,P0,ed,Bs,za=ne(()=>{Ga();ZA();O0=b(J()),P0=b(_e());Hr();ed=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new P0.ServerError(`Conflicting paths for ${t}`);O0.default.error(c),i.Resource=new ml(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(S9,"resetResources");a(td,"keyArrayToString")});function nI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=D0,T9(e.primaryStore,e.auditStore)):(c=L0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{v0(L0[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=td(t);let d=new rI(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function v0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),M0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=td(c),u=0;do{let d=o.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,tI.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,tI.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function T9(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=D0[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{v0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function M0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function U0(e){return e.nextTransaction||(nI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),M0(e)),e.nextTransaction}var tI,L0,D0,rI,sI=ne(()=>{tI=b(J());Uu();za();$i();L0=Object.create(null),D0=Object.create(null);a(nI,"addSubscription");rI=class extends ns{static{a(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(v0,"notifyFromTransactionData");a(T9,"listenToCommits");a(M0,"nextTransaction");a(U0,"whenNextTransaction")});var B0=M((POe,x0)=>{"use strict";var iI=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};x0.exports=iI});var k0=M((DOe,F0)=>{"use strict";var oI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};F0.exports=oI});var tp=M(G0=>{"use strict";var H0=me(),y9=(H(),v(z)),{RecordEncoder:R9}=(al(),v(g0));H0.initSync();var b9=H0.get(y9.CONFIG_PARAMS.STORAGE_CACHING)!==!1,aI=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=b9&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:R9})}};G0.OpenDBIObject=aI});var rp=M((xOe,q0)=>{"use strict";var as=me(),Fs=(H(),v(z));as.initSync();var Eg=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=as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",as.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=as.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),as.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=as.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=as.get(Fs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};q0.exports=Eg;Eg.MAX_DBS=1e4});var Et=M((FOe,X0)=>{"use strict";var lI=require("lmdb"),di=require("fs-extra"),cs=require("path"),_g=Un(),K0=J(),Hn=Jr().LMDB_ERRORS_ENUM,gg=k0(),{OpenDBIObject:uI}=tp(),Y0=rp(),ja=Yt(),$0=(H(),v(z)),{table:A9,resetDatabases:I9}=(we(),v(ft)),V0=me(),fi=ja.INTERNAL_DBIS_NAME,W0=ja.DBI_DEFINITION_NAME,w9="data.mdb",N9="lock.mdb",np=".mdb",C9="-lock",cI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ks(t,r),this.key_type=this.dbi[ja.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ja.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new lI.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Sg(e,t){if(e===void 0)throw new Error(Hn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Hn.ENV_NAME_REQUIRED)}a(Sg,"pathEnvNameValidation");async function dI(e,t,r=!0){try{await di.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Hn.INVALID_BASE_PATH):n}try{let n=cs.join(e,t+np);return await di.access(n,di.constants.R_OK|di.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await di.access(cs.join(e,t,w9),di.constants.R_OK|di.constants.F_OK),cs.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Hn.INVALID_ENVIRONMENT)}else throw new Error(Hn.INVALID_ENVIRONMENT);throw n}}a(dI,"validateEnvironmentPath");function Tg(e,t){if(_g.validateEnv(e),t===void 0)throw new Error(Hn.DBI_NAME_REQUIRED)}a(Tg,"validateEnvDBIName");async function O9(e,t,r=!1,n=!1){Sg(e,t);let s=cs.basename(e);t=t.toString();let i=V0.get($0.CONFIG_PARAMS.DATABASES);i||V0.setProperty($0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await dI(e,t,n),z0(e,t,r)}catch(o){if(o.message===Hn.INVALID_ENVIRONMENT){let c=cs.join(e,t);await di.mkdirp(n?c:e);let l=new Y0(n?c:c+np,!1),u=lI.open(l);u.dbis=Object.create(null);let d=new uI(!1);u.openDB(fi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=fI(e,t,r);return u[ja.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a(O9,"createEnvironment");async function P9(e,t,r,n=!0){Sg(e,t),t=t.toString();let s=cs.join(e,t);return A9({table:t,database:cs.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(P9,"copyEnvironment");async function z0(e,t,r=!1){Sg(e,t),t=t.toString();let n=fI(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 dI(e,t),i=cs.join(e,t+np),o=s!=i,c=new Y0(s,o),l=lI.open(c);l.dbis=Object.create(null);let u=Q0(l);for(let d=0;d<u.length;d++)ks(l,u[d]);return l[ja.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(z0,"openEnvironment");async function L9(e,t,r=!1){Sg(e,t),t=t.toString();let n=cs.join(e,t+np),s=await dI(e,t);if(global.lmdb_map!==void 0){let i=fI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await j0(o),delete global.lmdb_map[i]}}await di.remove(s),await di.remove(s===n?s+C9:cs.join(cs.dirname(s),N9))}a(L9,"deleteEnvironment");async function j0(e){_g.validateEnv(e);let t=e[ja.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(j0,"closeEnvironment");function fI(e,t,r=!1){let s=`${cs.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(fI,"getCachedEnvironmentName");function D9(e){_g.validateEnv(e);let t=Object.create(null),r=ks(e,fi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==fi)try{t[n]=Object.assign(new gg,s)}catch{K0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(D9,"listDBIDefinitions");function Q0(e){_g.validateEnv(e);let t=[],r=ks(e,fi);for(let{key:n}of r.getRange({start:!1}))n!==fi&&t.push(n);return t}a(Q0,"listDBIs");function v9(e,t){let n=ks(e,fi).getEntry(t),s=new gg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{K0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(v9,"getDBIDefinition");function J0(e,t,r,n=!r){if(Tg(e,t),t=t.toString(),t===fi)throw new Error(Hn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ks(e,t)}catch(s){if(s.message===Hn.DBI_DOES_NOT_EXIST){let i=new uI(r,n===!0),o=e.openDB(t,i),c=new gg(r===!0,n);return o[W0]=c,ks(e,fi).putSync(t,c),e.dbis[t]=o,o}throw s}}a(J0,"createDBI");function ks(e,t){if(Tg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==fi?r=v9(e,t):r=new gg,r===void 0)throw new Error(Hn.DBI_DOES_NOT_EXIST);let n;try{let s=new uI(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(Hn.DBI_DOES_NOT_EXIST):s}return n[W0]=r,e.dbis[t]=n,n}a(ks,"openDBI");function M9(e,t){Tg(e,t),t=t.toString();let r=ks(e,t),n=r.getStats();return r[ja.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(M9,"statDBI");async function U9(e,t){try{let r=cs.join(e,t+np);return(await di.stat(r)).size}catch{throw new Error(Hn.INVALID_ENVIRONMENT)}}a(U9,"environmentDataSize");function x9(e,t){if(Tg(e,t),t=t.toString(),t===fi)throw new Error(Hn.CANNOT_DROP_INTERNAL_DBIS_NAME);ks(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ks(e,fi).removeSync(t)}a(x9,"dropDBI");function B9(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ks(e,i)}catch(o){if(o.message===Hn.DBI_DOES_NOT_EXIST)J0(e,i,i!==t,i===t),n=!0;else throw o}}n&&I9()}a(B9,"initializeDBIs");X0.exports={openDBI:ks,openEnvironment:z0,createEnvironment:O9,listDBIs:Q0,listDBIDefinitions:D9,createDBI:J0,dropDBI:x9,statDBI:M9,deleteEnvironment:L9,initializeDBIs:B9,TransactionCursor:cI,environmentDataSize:U9,copyEnvironment:P9,closeEnvironment:j0}});var tB=M((HOe,eB)=>{"use strict";var mI=Et(),F9=J(),Z0=Jr().LMDB_ERRORS_ENUM;eB.exports=k9;async function k9(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 mI.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Z0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await mI.closeEnvironment(global.lmdb_map[n]),await mI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Z0.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){F9.error(t)}}a(k9,"cleanLMDBMap")});var Qi=M((qOe,nB)=>{"use strict";var rB=oe(),H9=(H(),v(z)),rd=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ji=require("joi"),Qa={schema_format:{pattern:rd,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},G9=ji.alternatives(ji.string().min(1).max(Qa.schema_length.maximum).pattern(rd).messages({"string.pattern.base":"{:#label} "+Qa.schema_format.message}),ji.number(),ji.array()).required(),q9=ji.alternatives(ji.string().min(1).max(Qa.schema_length.maximum).pattern(rd).messages({"string.pattern.base":"{:#label} "+Qa.schema_format.message}),ji.number()),$9=ji.alternatives(ji.string().min(1).max(Qa.schema_length.maximum).pattern(rd).messages({"string.pattern.base":"{:#label} "+Qa.schema_format.message}),ji.number()).required();function V9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Qa.schema_length.maximum?`'${property_name}' maximum of 250 characters`:rd.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(V9,"checkValidTable");function K9(e,t){return rB.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(K9,"validateSchemaExists");function Y9(e,t){let r=t.state.ancestors[0].schema;return rB.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Y9,"validateTableExists");function W9(e,t){return e.toLowerCase()===H9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(W9,"validateSchemaName");nB.exports={commonValidators:Qa,schemaRegex:rd,hdbSchemaTable:G9,validateSchemaExists:K9,validateTableExists:Y9,validateSchemaName:W9,checkValidTable:V9,hdbDatabase:q9,hdbTable:$9}});var mt=M((VOe,sB)=>{"use strict";var Gn=require("validate.js");Gn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Gn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Gn.validators.type.checks={Object:a(function(e){return Gn.isObject(e)&&!Gn.isArray(e)},"Object"),Array:Gn.isArray,Integer:Gn.isInteger,Number:Gn.isNumber,String:Gn.isString,Date:Gn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};Gn.validators.hasValidFileExt=function(e,t){return Gn.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};sB.exports={validateObject:z9,validateObjectAsync:j9,validateBySchema:Q9};function z9(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Gn(e,t,{format:"flat"});return r?new Error(r):null}a(z9,"validateObject");async function j9(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Gn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(j9,"validateObjectAsync");function Q9(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Q9,"validateBySchema")});var hI=M((YOe,oB)=>{var{hdbTable:J9,hdbDatabase:iB}=Qi(),X9=mt(),pI=require("joi"),Z9={undefined:"undefined",null:"null"},e7=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||Z9[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),t7=pI.object({database:iB,schema:iB,table:J9,records:pI.array().items(pI.object().custom(e7)).required()});oB.exports=function(e){return X9.validateBySchema(e,t7)}});var cB=M((zOe,aB)=>{"use strict";var EI=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")}};aB.exports=EI});var uB=M((QOe,lB)=>{"use strict";var _I=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};lB.exports=_I});var fB=M((XOe,dB)=>{"use strict";var gI=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}};dB.exports=gI});var pB=M((ePe,mB)=>{"use strict";var SI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};mB.exports=SI});var hl=M((iPe,_B)=>{"use strict";var r7=Et(),n7=uB(),s7=fB(),i7=pB(),Ji=Un(),sp=Jr().LMDB_ERRORS_ENUM,o7=Yt(),Ko=(H(),v(z)),a7=oe(),c7=require("uuid"),rPe=require("lmdb"),{handleHDBError:l7,hdbErrors:u7}=_e(),{OVERFLOW_MARKER:nPe,MAX_SEARCH_KEY_LENGTH:sPe}=o7,hB=me();hB.initSync();var yg=hB.get(Ko.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),TI=Ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME,pl=Ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function d7(e,t,r,n,s=Ji.getNextMonotonicTime()){AI(e,t,r,n),yI(e,t,r);let i=new n7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];EB(u,!0,s);let d=f7(e,t,r,u),f=u[t];o.push(d),c.push(f)}return RI(o,c,n,i,s)}a(d7,"insertRecords");function f7(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][Ko.FUNC_VAL],n[o]=c)}let l=Ji.getIndexedValues(c),u=e.dbis[o];if(l){yg&&u.prefetch(l.map(d=>({key:d,value:s})),Rg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}yg&&e.dbis[t].prefetch([s],Rg),e.dbis[t].put(s,n,n[pl])})}a(f7,"insertRecord");function m7(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(m7,"removeSkippedRecords");function EB(e,t,r){let n=r>0;(n||!Number.isInteger(e[pl]))&&(e[pl]=r||(r=Ji.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[TI]))&&(e[TI]=r||Ji.getNextMonotonicTime()):delete e[TI]}a(EB,"setTimestamps");function yI(e,t,r){r.indexOf(Ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),r7.initializeDBIs(e,t,r)}a(yI,"initializeTransaction");async function p7(e,t,r,n,s=Ji.getNextMonotonicTime()){AI(e,t,r,n),yI(e,t,r);let i=new s7,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=bI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return RI(c,l,n,i,s,o)}a(p7,"updateRecords");async function h7(e,t,r,n,s=Ji.getNextMonotonicTime()){try{AI(e,t,r,n)}catch(l){throw l7(l,l.message,u7.HTTP_STATUS_CODES.BAD_REQUEST)}yI(e,t,r);let i=new i7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;a7.isEmpty(u[t])?(d=c7.v4(),u[t]=d):d=u[t];let f=bI(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return RI(o,c,n,i,s)}a(h7,"upsertRecords");async function RI(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||Ji.getNextMonotonicTime(),m7(r,i),n}a(RI,"finalizeWrite");function bI(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(EB(r,!d,o),Number.isInteger(r[pl])&&u[pl]>r[pl])return!1;d&&s.original_records.push(u);let f,m=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][Ko.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=Ji.getIndexedValues(R);if(S){yg&&g.prefetch(S.map(y=>({key:y,value:n})),Rg);for(let y=0,N=S.length;y<N;y++)g.remove(S[y],n)}if(S=Ji.getIndexedValues(E),S){yg&&g.prefetch(S.map(y=>({key:y,value:n})),Rg);for(let y=0,N=S.length;y<N;y++)g.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[pl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:bI(e,t,r,n,s,i,o))}a(bI,"updateUpsertRecord");function E7(e,t,r){if(Ji.validateEnv(e),t===void 0)throw new Error(sp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(sp.WRITE_ATTRIBUTES_REQUIRED):new Error(sp.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(E7,"validateBasic");function AI(e,t,r,n){if(E7(e,t,r),!Array.isArray(n))throw n===void 0?new Error(sp.RECORDS_REQUIRED):new Error(sp.RECORDS_MUST_BE_ARRAY)}a(AI,"validateWrite");function Rg(){}a(Rg,"noop");_B.exports={insertRecords:d7,updateRecords:p7,upsertRecords:h7}});var Xi=M((aPe,_7)=>{_7.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]},hdb_certificate_cache:{hash_attribute:"certificate_id",name:"hdb_certificate_cache",schema:"system",attributes:[{attribute:"certificate_id"}]},hdb_crl_cache:{hash_attribute:"distribution_point",name:"hdb_crl_cache",schema:"system",attributes:[{attribute:"distribution_point"}]},hdb_revoked_certificates:{hash_attribute:"composite_id",name:"hdb_revoked_certificates",schema:"system",attributes:[{attribute:"composite_id"}]}}});var SB=M((cPe,gB)=>{"use strict";var g7=require("uuid"),II=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||g7.v4(),this.schema_table=`${this.schema}.${this.table}`}};gB.exports=II});var bg=M((uPe,TB)=>{"use strict";var S7=SB(),wI=class extends S7{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}};TB.exports=wI});var RB=M((fPe,yB)=>{"use strict";yB.exports=y7;var T7="inserted";function y7(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===T7?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(y7,"returnObject")});var Ag=M((hPe,AB)=>{"use strict";var R7=(H(),v(z)),NI=Et(),b7=hl(),{getSystemSchemaPath:A7,getSchemaPath:I7}=Rt(),pPe=Xi(),{validateBySchema:w7}=mt(),ip=require("joi"),N7=bg(),C7=RB(),{handleHDBError:O7,hdbErrors:P7,ClientError:L7}=_e(),bB=oe(),{HTTP_STATUS_CODES:D7}=P7,v7="inserted";AB.exports=M7;async function M7(e){let t=w7(e,ip.object({database:ip.string(),schema:ip.string(),table:ip.string().required(),attribute:ip.string().required()}));if(t)throw new L7(t.message);let r=!e.skip_table_check&&bB.checkGlobalSchemaTable(e.schema,e.table);if(r)throw O7(new Error,r,D7.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=bB.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 N7(e.schema,e.table,e.attribute,e.id);try{let i=await NI.openEnvironment(I7(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);NI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await NI.openEnvironment(A7(),R7.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await b7.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return C7(v7,c,{records:[s]},l)}catch(i){throw i}}a(M7,"lmdbCreateAttribute")});var op=M((gPe,wB)=>{"use strict";var Yo=oe(),IB=J(),_Pe=hI(),{getDatabases:U7}=(we(),v(ft)),{ClientError:El}=_e();wB.exports=x7;function x7(e){if(Yo.isEmpty(e))throw new El("invalid update parameters defined.");if(Yo.isEmptyOrZeroLength(e.schema))throw new El("invalid schema specified.");if(Yo.isEmptyOrZeroLength(e.table))throw new El("invalid table specified.");if(!Array.isArray(e.records))throw new El("records must be an array");let t=U7()[e.schema]?.[e.table];if(Yo.isEmpty(t))throw new El(`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&&Yo.isEmptyOrZeroLength(o[r]))throw IB.error("a valid hash attribute must be provided with update record:",o),new El("a valid hash attribute must be provided with update record, check log for more info");if(!Yo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw IB.error(`a valid hash value must be provided with ${e.operation} record:`,o),new El(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Yo.isEmpty(o[r])&&o[r]!==""&&n.has(Yo.autoCast(o[r]))&&(o.skip=!0),n.add(Yo.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(x7,"insertUpdateValidate")});var Ig=M((TPe,CB)=>{"use strict";var NB=oe(),B7=(H(),v(z)),F7=J(),k7=Ag(),H7=bg(),G7=Wo(),{SchemaEventMsg:q7}=ls(),$7="already exists in";CB.exports=V7;async function V7(e,t,r){if(NB.isEmptyOrZeroLength(r))return r;let n=[];NB.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 K7(e,t.schema,t.name,i)})),s}a(V7,"lmdbCheckForNewAttributes");async function K7(e,t,r,n){let s=new H7(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await Y7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes($7))F7.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(K7,"createNewAttribute");async function Y7(e){let t;return t=await k7(e),G7.signalSchemaChange(new q7(process.pid,B7.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(Y7,"createAttribute")});var nd=M((RPe,OB)=>{"use strict";var CI=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}};OB.exports=CI});var LB=M((APe,PB)=>{"use strict";var W7=nd(),z7=(H(),v(z)).OPERATIONS_ENUM,OI=class extends W7{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(z7.INSERT,r,n,s,i),this.records=t}};PB.exports=OI});var vB=M((wPe,DB)=>{"use strict";var j7=nd(),Q7=(H(),v(z)).OPERATIONS_ENUM,PI=class extends j7{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(Q7.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};DB.exports=PI});var UB=M((CPe,MB)=>{"use strict";var J7=nd(),X7=(H(),v(z)).OPERATIONS_ENUM,LI=class extends J7{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(X7.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};MB.exports=LI});var BB=M((PPe,xB)=>{"use strict";var Z7=nd(),eee=(H(),v(z)).OPERATIONS_ENUM,DI=class extends Z7{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(eee.DELETE,n,s,t,i),this.original_records=r}};xB.exports=DI});var ap=M((vPe,GB)=>{"use strict";var DPe=require("path"),FB=Et(),tee=LB(),ree=vB(),nee=UB(),see=BB(),sd=Yt(),kB=oe(),{CONFIG_PARAMS:iee}=(H(),v(z)),HB=me();HB.initSync();var wg=(H(),v(z)).OPERATIONS_ENUM,{getTransactionAuditStorePath:oee}=Rt();GB.exports=aee;async function aee(e,t){if(HB.get(iee.LOGGING_AUDITLOG)===!1)return;let r=oee(e.schema,e.table),n=await FB.openEnvironment(r,e.table,!0),s=cee(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){FB.initializeDBIs(n,sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sd.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),kB.isEmpty(s.user_name)||n.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(aee,"writeTransaction");function cee(e,t){let r=kB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===wg.INSERT)return new tee(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wg.UPDATE)return new ree(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wg.UPSERT)return new nee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wg.DELETE)return new see(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(cee,"createTransactionObject")});var vI=M((xPe,qB)=>{"use strict";var lee=op(),UPe=Nm(),cp=(H(),v(z)),uee=Cm(),dee=hl().insertRecords,fee=Et(),mee=J(),pee=Ig(),{getSchemaPath:hee}=Rt(),Eee=ap();qB.exports=_ee;async function _ee(e){try{let{schemaTable:t,attributes:r}=lee(e);uee(e,r,t.hash_attribute),e.schema!==cp.SYSTEM_SCHEMA_NAME&&(r.includes(cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await pee(e.hdb_auth_header,t,r),s=hee(e.schema,e.table),i=await fee.openEnvironment(s,e.table),o=await dee(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Eee(e,o)}catch(c){mee.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(_ee,"lmdbCreateRecords")});var KB=M((FPe,VB)=>{"use strict";var $B=(H(),v(z)),gee=vI(),See=Nm(),Tee=require("fs-extra"),{getSchemaPath:yee}=Rt();VB.exports=Ree;async function Ree(e){let t=[{name:e.schema,createddate:Date.now()}],r=new See($B.SYSTEM_SCHEMA_NAME,$B.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await gee(r),await Tee.mkdirp(yee(e.schema))}a(Ree,"lmdbCreateSchema")});var WB=M((HPe,YB)=>{"use strict";var MI=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}};YB.exports=MI});var JB=M((KPe,QB)=>{"use strict";var zB=Et(),UI=Un(),xI=Jr().LMDB_ERRORS_ENUM,bee=Yt(),jB=J(),qPe=oe(),Aee=require("lmdb"),Iee=WB(),wee=(H(),v(z)),{OVERFLOW_MARKER:$Pe,MAX_SEARCH_KEY_LENGTH:VPe}=bee,Nee=wee.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Cee(e,t,r,n){if(UI.validateEnv(e),t===void 0)throw new Error(xI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xI.IDS_REQUIRED):new Error(xI.IDS_MUST_BE_ITERABLE);try{let s=zB.listDBIs(e);zB.initializeDBIs(e,t,s);let i=new Iee,o,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{o=r[m];let h=e.dbis[t].get(o);if(!h||n&&h[Nee]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,Aee.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let N=UI.getIndexedValues(y);if(N)for(let I=0,$=N.length;I<$;I++)S.remove(N[I],o)}catch{jB.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){jB.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=UI.getNextMonotonicTime(),i}catch(s){throw s}}a(Cee,"deleteRecords");QB.exports={deleteRecords:Cee}});var lp=M((WPe,ZB)=>{"use strict";var id=oe(),Oee=JB(),Pee=Et(),{getSchemaPath:Lee}=Rt(),Dee=ap(),vee=J();ZB.exports=Mee;async function Mee(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(id.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(id.isEmptyOrZeroLength(e.hash_values)&&!id.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];id.isEmpty(l)||e.hash_values.push(l)}}if(id.isEmptyOrZeroLength(e.hash_values))return XB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(id.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=Lee(e.schema,e.table),i=await Pee.openEnvironment(s,e.table),o=await Oee.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Dee(e,o)}catch(c){vee.error(`unable to write transaction due to ${c.message}`)}return XB(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Mee,"lmdbDeleteRecords");function XB(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(XB,"createDeleteResponse")});var FI=M((QPe,eF)=>{"use strict";var Uee=(H(),v(z)),jPe=Un();function BI(e,t){let r=Object.create(null);if(t.length===1&&Uee.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(BI,"parseRow");function xee(e,t,r,n){let s=BI(r,e);n.push(s)}a(xee,"searchAll");function Bee(e,t,r,n){let s=BI(r,e);n[t]=s}a(Bee,"searchAllToMap");function Fee(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Fee,"iterateDBI");function _l(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(_l,"pushResults");function kee(e,t,r,n,s,i){t.toString().endsWith(e)&&_l(t,r,n,s,i)}a(kee,"endsWith");function Hee(e,t,r,n,s,i){t.toString().includes(e)&&_l(t,r,n,s,i)}a(Hee,"contains");function Gee(e,t,r,n,s,i){t>e&&_l(t,r,n,s,i)}a(Gee,"greaterThanCompare");function qee(e,t,r,n,s,i){t>=e&&_l(t,r,n,s,i)}a(qee,"greaterThanEqualCompare");function $ee(e,t,r,n,s,i){t<e&&_l(t,r,n,s,i)}a($ee,"lessThanCompare");function Vee(e,t,r,n,s,i){t<=e&&_l(t,r,n,s,i)}a(Vee,"lessThanEqualCompare");eF.exports={parseRow:BI,searchAll:xee,searchAllToMap:Bee,iterateDBI:Fee,endsWith:kee,contains:Hee,greaterThanCompare:Gee,greaterThanEqualCompare:qee,lessThanCompare:$ee,lessThanEqualCompare:Vee,pushResults:_l}});var od=M((tLe,aF)=>{"use strict";var Ja=Et(),XPe=J(),us=Un(),Ng=Yt(),rr=Jr().LMDB_ERRORS_ENUM,ZPe=oe(),Kee=(H(),v(z)),Cg=FI(),{parseRow:Yee}=Cg,eLe=require("lmdb"),{OVERFLOW_MARKER:tF,MAX_SEARCH_KEY_LENGTH:Wee}=Ng;function rF(e,t,r,n=!1,s=void 0,i=void 0){return gl(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(rF,"iterateFullIndex");function up(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return gl(e,t,r,(d,f,m,p)=>{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 p===r?(S.values=!1,f.getRange(S).map(y=>({value:y}))):f.getRange(S)})}a(up,"iterateRangeBetween");function gl(e,t,r,n){let s=e.database||e,i=Ja.openDBI(s,r);i[Ng.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ja.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(gl,"setupTransaction");function nF(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(tF)){if(!s)if(r)s=Ja.openDBI(e,r);else{let l=Ja.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Ja.openDBI(e,l[u]),!s[Ng.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(nF,"getOverflowCheck");function zee(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return gl(e,t,t,(o,c,l)=>(Og(r),r=dp(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Yee(u.value,r))))}a(zee,"searchAll");function jee(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);Og(r),r=dp(e.database||e,r);let o=new Map;for(let{key:c,value:l}of rF(e,t,t,n,s,i))o.set(c,Cg.parseRow(l,r));return o}a(jee,"searchAllToMap");function Qee(e,t,r=!1,n=void 0,s=void 0){if(us.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=rF(e,void 0,t,r,n,s),c=o.transaction,l=nF(c.database,c,void 0,t);for(let{key:u,value:d}of o){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}a(Qee,"iterateDBI");function Jee(e,t){if(us.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return Ja.statDBI(e,t).entryCount}a(Jee,"countAll");function Xee(e,t,r,n,s=!1,i=void 0,o=void 0){return Xa(e,r,n),gl(e,t,r,(c,l,u,d)=>(n=us.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(f=>({key:n,value:f}))))}a(Xee,"equals");function Zee(e,t,r){return Xa(e,t,r),Ja.openDBI(e,t).getValuesCount(r)}a(Zee,"count");function ete(e,t,r,n,s=!1,i=void 0,o=void 0){return Xa(e,r,n),gl(e,null,r,(c,l)=>{n=us.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:o}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}a(ete,"startsWith");function tte(e,t,r,n,s=!1,i=void 0,o=void 0){return sF(e,t,r,n,s,i,o,!0)}a(tte,"endsWith");function sF(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Xa(e,r,n),gl(e,null,r,(l,u,d,f)=>{let m=nF(d,l,f,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(tF)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[Ng.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(sF,"contains");function rte(e,t,r,n,s=!1,i=void 0,o=void 0){Xa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),up(e,t,r,n,l,s,i,o,!0,!1)}a(rte,"greaterThan");function nte(e,t,r,n,s=!1,i=void 0,o=void 0){Xa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),up(e,t,r,n,l,s,i,o,!1,!1)}a(nte,"greaterThanEqual");function ste(e,t,r,n,s=!1,i=void 0,o=void 0){Xa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),up(e,t,r,l,n,s,i,o,!1,!0)}a(ste,"lessThan");function ite(e,t,r,n,s=!1,i=void 0,o=void 0){Xa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),up(e,t,r,l,n,s,i,o,!1,!1)}a(ite,"lessThanEqual");function ote(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(us.validateEnv(e),r===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(rr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(rr.END_VALUE_REQUIRED);if(n=us.convertKeyValueToWrite(n),s=us.convertKeyValueToWrite(s),n>s)throw new Error(rr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return up(e,t,r,n,s,i,o,c)}a(ote,"between");function ate(e,t,r,n){us.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Og(r),r=dp(s,r),n===void 0)throw new Error(rr.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Cg.parseRow(c,r)),o}a(ate,"searchByHash");function cte(e,t,r){us.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(cte,"checkHashExists");function lte(e,t,r,n,s=[]){return oF(e,t,r,n,s),iF(e,t,r,n,s).map(i=>i[1])}a(lte,"batchSearchByHash");function ute(e,t,r,n,s=[]){oF(e,t,r,n,s);let i=new Map;for(let[o,c]of iF(e,t,r,n,s))i.set(o,c);return i}a(ute,"batchSearchByHashToMap");function iF(e,t,r,n,s=[]){return gl(e,t,t,(i,o,c)=>{r=dp(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,Cg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(iF,"batchHashSearch");function oF(e,t,r,n,s){if(us.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Og(r),n==null)throw new Error(rr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(rr.IDS_MUST_BE_ITERABLE)}a(oF,"initializeBatchSearchByHash");function Og(e){if(!Array.isArray(e))throw e===void 0?new Error(rr.FETCH_ATTRIBUTES_REQUIRED):new Error(rr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Og,"validateFetchAttributes");function Xa(e,t,r){if(us.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.SEARCH_VALUE_REQUIRED);if(r?.length>Wee)throw new Error(rr.SEARCH_VALUE_TOO_LARGE)}a(Xa,"validateComparisonFunctions");function dp(e,t){return t.length===1&&Kee.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ja.listDBIs(e)),t}a(dp,"setGetWholeRowAttributes");aF.exports={searchAll:zee,searchAllToMap:jee,count:Zee,countAll:Jee,equals:Xee,startsWith:ete,endsWith:tte,contains:sF,searchByHash:ate,setGetWholeRowAttributes:dp,batchSearchByHash:lte,batchSearchByHashToMap:ute,checkHashExists:cte,iterateDBI:Qee,greaterThan:rte,greaterThanEqual:nte,lessThan:ste,lessThanEqual:ite,between:ote}});var ad=M((nLe,fF)=>{var cF=require("lodash"),lF=mt(),je=require("joi"),dte=oe(),{hdbSchemaTable:fp,checkValidTable:uF,hdbTable:dF,hdbDatabase:Pg}=Qi(),{handleHDBError:fte,hdbErrors:mte}=_e(),{getDatabases:pte}=(we(),v(ft)),{HTTP_STATUS_CODES:hte}=mte,Ete=je.object({database:Pg,schema:Pg,table:dF,attribute:fp,value:je.any().required(),get_attributes:je.array().min(1).items(je.alternatives(fp,je.object())).optional(),desc:je.bool(),limit:je.number().integer().min(1),offset:je.number().integer().min(0)}),_te=je.object({database:Pg,schema:Pg,table:dF,operator:je.string().valid("and","or").default("and").lowercase(),offset:je.number().integer().min(0),limit:je.number().integer().min(1),get_attributes:je.array().min(1).items(je.alternatives(fp,je.object())).optional(),sort:je.object({attribute:je.alternatives(fp,je.array().min(1)),descending:je.bool().optional()}).optional(),conditions:je.array().min(1).items(je.alternatives(je.object({operator:je.string().valid("and","or").default("and").lowercase(),conditions:je.array()}),je.object({attribute:je.alternatives(fp,je.array().min(1)),comparator:je.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:je.when("comparator",{switch:[{is:"equals",then:je.any()},{is:"between",then:je.array().items(je.alternatives([je.string(),je.number()])).length(2)}],otherwise:je.alternatives(je.string(),je.number())}).required()}))).required()});fF.exports=function(e,t){let r=null;switch(t){case"value":r=lF.validateBySchema(e,Ete);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(uF("database",e.schema)),i(uF("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=lF.validateBySchema(e,_te);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=dte.checkGlobalSchemaTable(e.schema,e.table);if(s)return fte(new Error,s,hte.NOT_FOUND);let o=pte()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=a(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=cF.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!cF.some(o,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var kI=M((iLe,mF)=>{"use strict";var gte=Et(),Ste=ad(),{getSchemaPath:Tte}=Rt();mF.exports=yte;function yte(e){let t=Ste(e,"hashes");if(t)throw t;let r=Tte(e.schema,e.table);return gte.openEnvironment(r,e.table)}a(yte,"initialize")});var HI=M((aLe,pF)=>{"use strict";var Rte=od(),bte=kI();pF.exports=Ate;async function Ate(e){let t=await bte(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Rte.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Ate,"lmdbGetDataByHash")});var cd=M((lLe,hF)=>{"use strict";var GI=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};hF.exports=GI});var _F=M((fLe,EF)=>{"use strict";var dLe=cd(),Ite=od(),wte=kI();EF.exports=Nte;async function Nte(e){let t=await wte(e),r=global.hdb_schema[e.schema][e.table];return Ite.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Nte,"lmdbSearchByHash")});var mi=M((pLe,gF)=>{"use strict";var qI=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.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};gF.exports=qI});var Lg=M((ELe,AF)=>{"use strict";var En=od(),Cte=Et(),Ote=oe(),Qe=Yt(),Sl=(H(),v(z)),Pte=Xi(),SF=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:Lte}=Rt(),zo=Sl.SEARCH_WILDCARDS;async function Dte(e,t,r){let n;e.schema===Sl.SYSTEM_SCHEMA_NAME?n=Pte[e.table]:n=global.hdb_schema[e.schema][e.table];let s=bF(e,n.hash_attribute,r,t);return yF(e,s,n.hash_attribute,r)}a(Dte,"prepSearch");async function yF(e,t,r,n){let s=Lte(e.schema,e.table),i=await Cte.openEnvironment(s,e.table),o=RF(i,e,t,r),c=o.transaction||i;if([Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Qe.SEARCH_TYPES.SEARCH_ALL,Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(vte(e,r)===!1){let d=e.attribute;if(d===r)return n?TF(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?TF(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?En.batchSearchByHashToMap(c,r,e.get_attributes,u):En.batchSearchByHash(c,r,e.get_attributes,u)}a(yF,"executeSearch");function RF(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 Qe.SEARCH_TYPES.EQUALS:s=En.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=En.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=En.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=En.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return En.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return En.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return En.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return En.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=En.between(e,i,t.attribute,t.value,t.end_value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN:case Qe.SEARCH_TYPES._GREATER_THAN:s=En.greaterThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Qe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=En.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=En.lessThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN_EQUAL:case Qe.SEARCH_TYPES._LESS_THAN_EQUAL:s=En.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(RF,"searchByType");function TF(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(TF,"createMapFromIterable");function vte(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(vte,"checkToFetchMore");function bF(e,t,r,n){if(Ote.isEmpty(n)){let s=e.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.attribute===t&&(c=!0),zo.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(zo[0])<0&&s.indexOf(zo[1])<0)return c===!0?r===!0?Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Qe.SEARCH_TYPES.EQUALS;if(zo.indexOf(i)>=0&&zo.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(zo.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(zo.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(zo[0])||s.includes(zo[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(SF.UNKNOWN_SEARCH_TYPE)}else switch(n){case Sl.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case Sl.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case Sl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Sl.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case Sl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(SF.UNKNOWN_SEARCH_TYPE)}}a(bF,"createSearchTypeFromSearchObject");AF.exports={executeSearch:yF,createSearchTypeFromSearchObject:bF,prepSearch:Dte,searchByType:RF}});var wF=M((SLe,IF)=>{"use strict";var gLe=mi(),Mte=ad(),Ute=oe(),xte=(H(),v(z)),Bte=Lg();IF.exports=Fte;function Fte(e,t){if(!Ute.isEmpty(t)&&xte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Mte(e,"value");if(n)throw n;return Bte.prepSearch(e,t,!0)}a(Fte,"lmdbGetDataByValue")});var mp=M((RLe,NF)=>{"use strict";var yLe=mi(),kte=ad(),Hte=oe(),Gte=(H(),v(z)),qte=Lg();NF.exports=$te;async function $te(e,t){if(!Hte.isEmpty(t)&&Gte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=kte(e,"value");if(n)throw n;return qte.prepSearch(e,t,!1)}a($te,"lmdbSearchByValue")});var OF=M((ILe,CF)=>{"use strict";var ALe=Yt(),$I=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}},VI=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},KI=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};CF.exports={SearchByConditionsObject:$I,SearchCondition:VI,SortAttribute:KI}});var MF=M((PLe,vF)=>{"use strict";var{SearchByConditionsObject:NLe,SearchCondition:CLe}=OF(),Vte=mi(),Kte=ad(),YI=od(),Dg=Yt(),{Resource:OLe}=(Vo(),v(C0)),DF=Lg(),Yte=FI(),Wte=require("lodash"),{getSchemaPath:zte}=Rt(),PF=Et(),{handleHDBError:jte,hdbErrors:Qte}=_e(),{HTTP_STATUS_CODES:Jte}=Qte,Xte=1e8;vF.exports=Zte;async function Zte(e){let t=Kte(e,"conditions");if(t)throw jte(t,t.message,Jte.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=zte(e.schema,e.table),n=await PF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)PF.openDBI(n,u.attribute);let i=Wte.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Dg.SEARCH_TYPES.EQUALS?u.estimated_count=YI.count(n,u.attribute,u.value):d===Dg.SEARCH_TYPES.CONTAINS||d===Dg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Xte}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await LF(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(DF.filterByType),f=d.length,m=YI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:o,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Yte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await LF(o,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=YI.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Zte,"lmdbSearchByConditions");async function LF(e,t,r,n){let s=new Vte(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Dg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,DF.searchByType(e,s,i,n).map(o=>o.value)}a(LF,"executeConditionSearch")});var pp=M((DLe,UF)=>{"use strict";var ere=(H(),v(z)).OPERATIONS_ENUM,WI=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=ere.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};UF.exports=WI});var zI=M((MLe,$F)=>{"use strict";var kF=mi(),HF=pp(),GF=mp(),qF=lp(),qn=(H(),v(z)),xF=oe(),BF=Et(),{getTransactionAuditStorePath:tre,getSchemaPath:rre}=Rt(),FF=J();$F.exports=nre;async function nre(e){try{if(xF.isEmpty(global.hdb_schema[e.schema])||xF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await sre(e),await ire(e);let t=rre(e.schema,e.table);try{await BF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")FF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=tre(e.schema,e.table);await BF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")FF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(nre,"lmdbDropTable");async function sre(e){let t=new kF(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await GF(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 HF(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await qF(s)}a(sre,"deleteAttributesFromSystem");async function ire(e){let t=new kF(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await GF(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 HF(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await qF(s)}catch(i){throw i}}a(ire,"dropTableFromSystem")});var KF=M((xLe,VF)=>{"use strict";var ore=require("fs-extra"),are=mi(),cre=cd(),lre=pp(),ure=zI(),dre=lp(),fre=HI(),mre=mp(),jo=(H(),v(z)),{getSchemaPath:pre}=Rt(),{handleHDBError:hre,hdbErrors:Ere}=_e(),{HDB_ERROR_MSGS:_re,HTTP_STATUS_CODES:gre}=Ere;VF.exports=Sre;async function Sre(e){let t;try{t=await Tre(e.schema);let r=new are(jo.SYSTEM_SCHEMA_NAME,jo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,jo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[jo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await mre(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await ure(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new lre(jo.SYSTEM_SCHEMA_NAME,jo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await dre(s);let i=pre(t);await ore.remove(i)}catch(r){throw r}}a(Sre,"lmdbDropSchema");async function Tre(e){let t=new cre(jo.SYSTEM_SCHEMA_NAME,jo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[jo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await fre(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw hre(new Error,_re.SCHEMA_NOT_FOUND(e),gre.NOT_FOUND,void 0,void 0,!0);return n}a(Tre,"validateDropSchema")});var hp=M((FLe,YF)=>{"use strict";var jI=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};YF.exports=jI});var JI=M((GLe,WF)=>{"use strict";var yre=require("fs-extra"),vg=Et(),{getTransactionAuditStorePath:Rre}=Rt(),QI=Yt(),HLe=hp();WF.exports=bre;async function bre(e){let t;try{let r=Rre(e.schema,e.table);await yre.mkdirp(r),t=await vg.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{vg.createDBI(t,QI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),vg.createDBI(t,QI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),vg.createDBI(t,QI.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(bre,"createTransactionsAuditEnvironment")});var QF=M((VLe,jF)=>{"use strict";var XI=(H(),v(z)),zF=Et(),Are=hl(),{getSystemSchemaPath:Ire,getSchemaPath:wre}=Rt(),$Le=Xi(),Nre=Ag(),ZI=bg(),Cre=J(),Ore=JI();jF.exports=Pre;async function Pre(e,t){let r=wre(t.schema,t.table),n=new ZI(t.schema,t.table,XI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new ZI(t.schema,t.table,XI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ZI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await zF.createEnvironment(r,t.table),e!==void 0){let o=await zF.openEnvironment(Ire(),XI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Are.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await ew(n),await ew(s),await ew(i)}await Ore(t)}catch(o){throw o}}a(Pre,"lmdbCreateTable");async function ew(e){try{await Nre(e)}catch(t){Cre.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(ew,"createAttribute")});var XF=M((YLe,JF)=>{"use strict";var Lre=op(),Dre=Cm(),vre=Ig(),Ep=(H(),v(z)),Mre=hl().updateRecords,Ure=Et(),{getSchemaPath:xre}=Rt(),Bre=ap(),Fre=J();JF.exports=kre;async function kre(e){try{let{schemaTable:t,attributes:r}=Lre(e);Dre(e,r,t.hash_attribute),e.schema!==Ep.SYSTEM_SCHEMA_NAME&&(r.includes(Ep.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ep.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ep.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ep.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await vre(e.hdb_auth_header,t,r),s=xre(e.schema,e.table),i=await Ure.openEnvironment(s,e.table),o=await Mre(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Bre(e,o)}catch(c){Fre.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(kre,"lmdbUpdateRecords")});var ek=M((zLe,ZF)=>{"use strict";var Hre=(H(),v(z)).OPERATIONS_ENUM,tw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Hre.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ZF.exports=tw});var rk=M((JLe,tk)=>{"use strict";var QLe=ek(),Gre=op(),qre=Cm(),$re=Ig(),_p=(H(),v(z)),Vre=hl().upsertRecords,Kre=Et(),{getSchemaPath:Yre}=Rt(),Wre=ap(),zre=J(),{handleHDBError:jre,hdbErrors:Qre}=_e();tk.exports=Jre;async function Jre(e){let t;try{t=Gre(e)}catch(l){throw jre(l,l.message,Qre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;qre(e,n,r.hash_attribute),e.schema!==_p.SYSTEM_SCHEMA_NAME&&(n.includes(_p.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(_p.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(_p.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(_p.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await $re(e.hdb_auth_header,r,n),i=Yre(e.schema,e.table),o=await Kre.openEnvironment(i,e.table),c=await Vre(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Wre(e,c)}catch(l){zre.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}a(Jre,"lmdbUpsertRecords")});var sk=M((ZLe,nk)=>{"use strict";var rw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};nk.exports=rw});var ok=M((tDe,ik)=>{"use strict";var nw=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}};ik.exports=nw});var lk=M((sDe,ck)=>{"use strict";var sw=Et(),{getTransactionAuditStorePath:Xre}=Rt(),nDe=sk(),gp=Yt(),Zre=oe(),ak=ok(),ene=require("util").promisify,tne=ene(setTimeout),rne=1e4,nne=100;ck.exports=sne;async function sne(e){let t=Xre(e.schema,e.table),r=await sw.openEnvironment(t,e.table,!0),n=sw.listDBIs(r);sw.initializeDBIs(r,gp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new ak;do s=await ine(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 tne(nne);while(s.transactions_deleted>0);return i}a(sne,"deleteAuditLogsBefore");async function ine(e,t){let r=new ak;try{let n=e.dbis[gp.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[gp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Zre.isEmpty(c)||(s=e.dbis[gp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[gp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>rne)break}return await s,r}catch(n){throw n}}a(ine,"deleteTransactions")});var dk=M((oDe,uk)=>{"use strict";var iw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};uk.exports=iw});var mk=M((lDe,fk)=>{"use strict";var one=mi(),ane=pp(),cDe=dk(),Zi=(H(),v(z)),cne=oe(),ow=Et(),lne=Xi(),une=mp(),dne=lp(),{getSchemaPath:fne}=Rt();fk.exports=mne;async function mne(e,t=!0){let r;e.schema===Zi.SYSTEM_SCHEMA_NAME?r=lne[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await hne(e),s=fne(e.schema,e.table),i=await ow.openEnvironment(s,e.table);return t===!0&&await pne(e,i,r.hash_attribute),ow.dropDBI(i,e.attribute),n}a(mne,"lmdbDropAttribute");async function pne(e,t,r){let n=ow.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(pne,"removeAttributeFromAllObjects");async function hne(e){let t=new one(Zi.SYSTEM_SCHEMA_NAME,Zi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await une(t)).filter(o=>o[Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(cne.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(o=>o[Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new ane(Zi.SYSTEM_SCHEMA_NAME,Zi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return dne(i)}a(hne,"dropAttributeFromSystem")});var Sk=M((fDe,gk)=>{"use strict";var aw=Et(),ld=Yt(),dDe=Un(),cw=(H(),v(z)),pk=oe(),{getTransactionAuditStorePath:Ene}=Rt(),_ne=od(),Mg=nd(),gne=J();gk.exports=Sne;async function Sne(e){let t=Ene(e.schema,e.table),r=await aw.openEnvironment(t,e.table,!0),n=aw.listDBIs(r);aw.initializeDBIs(r,ld.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return hk(r,e.search_values);case cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,yne(r,e.search_values,s);case cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Tne(r,e.search_values);default:return hk(r)}}a(Sne,"readAuditLog");function hk(e,t=[0,Date.now()]){pk.isEmpty(t[0])&&(t[0]=0),pk.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ld.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 Mg,s))}a(hk,"searchTransactionsByTimestamp");function Tne(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[ld.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,_k(e,i))}return Object.fromEntries(r)}a(Tne,"searchTransactionsByUsername");function yne(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=_ne.equals(e,ld.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ld.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=_k(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);Ek(l,"records",r,d,o),Ek(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(yne,"searchTransactionsByHashValues");function Ek(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 f=new Mg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Mg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(Ek,"loopRecords");function _k(e,t){let r=[];try{let n=e.dbis[ld.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 Mg,i);r.push(o)}}catch(i){gne.warn(i)}return r}catch(n){throw n}}a(_k,"batchSearchTransactions")});var yk=M((EDe,Tk)=>{"use strict";var{getSchemaPath:pDe}=Rt(),hDe=Et(),{database:Rne}=(we(),v(ft));Tk.exports={writeTransaction:bne};async function bne(e,t,r){return Rne({database:e,table:t}).transaction(r)}a(bne,"writeTransaction")});var Ik=M((gDe,Ak)=>{"use strict";var{getSchemaPath:Rk}=Rt(),bk=Et();Ak.exports={flush:Ane,resetReadTxn:Ine};async function Ane(e,t){return(await bk.openEnvironment(Rk(e,t),t.toString())).flushed}a(Ane,"flush");async function Ine(e,t){try{(await bk.openEnvironment(Rk(e,t),t.toString())).resetReadTxn()}catch{}}a(Ine,"resetReadTxn")});var Ok=M((TDe,Ck)=>{"use strict";var{Readable:wne}=require("stream"),{getDatabases:Nne}=(we(),v(ft)),{readSync:Cne,openSync:One,createReadStream:wk}=require("fs"),{open:Pne}=require("lmdb"),{OpenDBIObject:Nk}=tp(),Lne=rp(),{AUDIT_STORE_OPTIONS:Dne}=($i(),v(vx)),{INTERNAL_DBIS_NAME:vne,AUDIT_STORE_NAME:Mne}=Yt();Ck.exports=xne;var lw=32768,Une=100;async function xne(e){let t=e.database||e.schema||"data",r=Nne()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=Pne({noSync:!0,maxDbs:Lne.MAX_DBS}),m,p=f.openDB(vne,new Nk(!1)),h=d.useReadTransaction(),E=0,g=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let N=f.openDB(S,y),I=d.openDB(S,y);for(let{key:$,version:ee,value:G}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=N.put($,G,ee),E++%Une===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,y);let[,N]=S.split("/"),I=!N,$=new Nk(!I,I);await g(S,$)}e.include_audit&&await g(Mne,{...Dne}),await m;let R=wk(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=One(o.path);return o.transaction(()=>{let u=Buffer.alloc(lw);Cne(c,u,0,lw),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=wk(null,{fd:c,start:lw}),m=new wne.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(xne,"getBackup")});var Dk=M((RDe,Lk)=>{"use strict";var Bne=J(),{handleHDBError:Fne}=_e(),kne=cB(),Hne=Ag(),Gne=vI(),qne=KB(),$ne=lp(),Vne=HI(),Kne=_F(),Yne=wF(),Wne=mp(),zne=MF(),jne=KF(),Qne=QF(),Jne=XF(),Xne=rk(),Zne=lk(),ese=zI(),tse=mk(),rse=Sk(),nse=yk(),Pk=Ik(),sse=Ok(),uw=class extends kne{static{a(this,"LMDBBridge")}async searchByConditions(t){return zne(t)}async getDataByHash(t){return await Vne(t)}async searchByHash(t){return await Kne(t)}async getDataByValue(t,r){return await Yne(t,r)}async searchByValue(t){return await Wne(t)}async createSchema(t){return await qne(t)}async dropSchema(t){return await jne(t)}async createTable(t,r){return await Qne(t,r)}async dropTable(t){return await ese(t)}async createAttribute(t){return await Hne(t)}async createRecords(t){return await Gne(t)}async updateRecords(t){return await Jne(t)}async upsertRecords(t){try{return await Xne(t)}catch(r){throw Fne(r,null,null,Bne.ERR,r)}}async deleteRecords(t){return await $ne(t)}async dropAttribute(t){return await tse(t)}async deleteAuditLogsBefore(t){return await Zne(t)}async readAuditLog(t){return await rse(t)}writeTransaction(t,r,n){return nse.writeTransaction(t,r,n)}flush(t,r){return Pk.flush(t,r)}resetReadTxn(t,r){return Pk.resetReadTxn(t,r)}getBackup(t){return sse(t)}};Lk.exports=uw});function $n(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Tp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=a(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"ID":d=a(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Float":case"Number":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a number, attempt to assign ${p}`);$n(this)[u]=m},"set");break;case"Int":d=a(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Long":d=a(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"BigInt":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be a number, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a boolean, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Date":d=a(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ds.ClientError(`${u} must be a Date, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof Ms||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Blob, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){$n(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be an object, attempt to assign ${m}`);$n(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=dw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}o("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),o("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ds.ClientError("Can not add a property to a sealed table schema");$n(this)[l]=u}),o("deleteProperty",function(l){$n(this)[l]=void 0}),o("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||o("get",n.getProperty),n.delete||o("delete",n.deleteProperty),n.then||o("then",null);function o(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}a(o,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?Uk:Mk);break}c=l}while(c&&c!==Mk&&c!==Uk)}function xk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(vk[t])return vk[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=dw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function ise(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function dw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends yl{static{a(this,"TrackedObject")}},Tp(r,t)),new r(e)):new yl(e);case Array:let n=new xg(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=dw(o,t?.elements)),n[s]=o}return n;default:return e}}function Bg(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Bg(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Rl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Rl(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.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=tA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Rl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)ose.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Ug(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Tl]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(Ug(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(Ug(s))return!0}else return!0}else return!0}}return!1}var ds,vk,Mk,Uk,yl,ose,Tl,xg,Sp,fw=ne(()=>{ds=b(_e());N_();ss();a($n,"getChanges");a(Tp,"assignTrackedAccessors");vk=Object.prototype,Mk=new Proxy({},{get:xk}),Uk=new Proxy({},{get:xk,set:ise});a(xk,"getProxiedProperty");a(ise,"setProxiedProperty");a(dw,"trackObject");yl=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Tp(yl,{},!0);a(Bg,"collapseData");ose=Object.prototype.hasOwnProperty;a(Rl,"updateAndFreeze");a(Ug,"hasChanges");Tl=Symbol.for("has-array-changes"),xg=class extends Array{static{a(this,"TrackedArray")}#e;[Tl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Tl]=!0,super.splice(...t)}push(...t){return this[Tl]=!0,super.push(...t)}pop(){return this[Tl]=!0,super.pop()}unshift(...t){return this[Tl]=!0,super.unshift(...t)}shift(){return this[Tl]=!0,super.shift()}};xg.prototype.constructor=Array;Sp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var Vk={};ye(Vk,{ResourceBridge:()=>hw});function Ew({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 Bk(e,t){let r=eo(e),n=Ew(e,r);if(!r)throw new pi.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;bt(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&&Bg(d)}catch(f){d={message:(0,$k.errorToString)(f)}}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 eo(e){let t=e.database||e.schema||cse,r=ct()[t];if(!r)throw(0,pi.handleHDBError)(new Error,ase.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Fk(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*kk(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 Hk,Fg,pi,Gk,mw,pw,qk,$k,ase,cse,lse,use,hw,Kk=ne(()=>{Hk=b(Dk()),Fg=b(ad()),pi=b(_e());we();Gk=b(op());H();mw=b(Wo()),pw=b(ls()),qk=b(oe());Ga();fw();$k=b(J()),{HDB_ERROR_MSGS:ase}=pi.hdbErrors,cse="data",lse=1e4,use=10,hw=class extends Hk.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=eo(t);if(!r)throw new pi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let o=i;return{attribute:o.attribute??o.search_attribute,comparator:o.comparator??o.search_type,value:o.value!==void 0?o.value:o.search_value}}}a(n,"mapCondition");let s=(0,Fg.default)(t,"conditions");if(s)throw(0,pi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Ew(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let 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 pi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await eo(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=eo(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:f}=r.primaryStore.getEntry(o);return i(o,d,f)}})),"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){return eo(t).dropTable()}createSchema(t){return ud({database:t.schema,table:null}),mw.signalSchemaChange(new pw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await _w(t.schema),mw.signalSchemaChange(new pw.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,Gk.default)(t),s,i=ct()[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),bt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,o);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Bg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,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=ct()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(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 Fk(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ct()[t.schema][t.table];if(!r.createdTimeProperty)throw new pi.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:u_.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,qk.asyncSetTimeout)(use),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%lse===0&&await u();return l.length>0&&await u(),s?Fk(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Fg.default)(t,"hashes");if(r)throw r;return Bk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Bk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&kb[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,Fg.default)(t,"value");if(n)throw n;let s=eo(t);if(!s)throw new pi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===u_.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.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:Ew(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=eo(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){eo({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return eo(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=eo(t),n={};switch(t.search_type){case d_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let o=i.operation??i.type;return o==="put"&&(o="upsert"),{operation:o,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case d_.USERNAME:{let s=t.search_values;for await(let i of kk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return kk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Ew,"getSelect");a(Bk,"getRecords");a(eo,"getTable");a(Fk,"createDeleteResponse");a(kk,"groupRecordsInHistory")});var fs=M((vDe,Yk)=>{"use strict";var{ResourceBridge:dse}=(Kk(),v(Vk)),fse=me();fse.initSync();var kg;function mse(){return kg||(kg=new dse,kg)}a(mse,"getBridge");Yk.exports=mse()});var to=M((UDe,jk)=>{var pse=Xi(),{promisify:hse}=require("util"),{getDatabases:zk}=(we(),v(ft));jk.exports={setSchemaDataToGlobal:Wk,getTableSchema:Ese,getSystemSchema:_se,setSchemaDataToGlobalAsync:hse(Wk)};function Wk(e){global.hdb_schema=zk(),e&&e()}a(Wk,"setSchemaDataToGlobal");function Ese(e,t,r){let n=zk()[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(Ese,"getTableSchema");function _se(){return pse}a(_se,"getSystemSchema")});var Vn=M((BDe,Zk)=>{"use strict";var Gg=hI(),nn=oe(),gse=require("util"),qg=fs(),Sse=to(),Qk=J(),{handleHDBError:bl,hdbErrors:Tse}=_e(),{HTTP_STATUS_CODES:Al}=Tse,yse=gse.promisify(Sse.getTableSchema),Rse="updated",Jk="inserted",Xk="upserted";Zk.exports={insert:Ase,update:Ise,upsert:wse,validation:bse,flush:Nse};async function bse(e){if(nn.isEmpty(e))throw new Error("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(nn.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await yse(e.schema,e.table),r=Gg(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&&nn.isEmptyOrZeroLength(c[n]))throw Qk.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(!nn.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Qk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!nn.isEmpty(c[n])&&c[n]!==""&&s.has(nn.autoCast(c[n]))&&(c.skip=!0),s.add(nn.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(bse,"validation");async function Ase(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gg(e);if(t)throw bl(new Error,t.message,Al.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw bl(new Error,r,Al.BAD_REQUEST);let n=await qg.createRecords(e);return Hg(Jk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Ase,"insertData");async function Ise(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gg(e);if(t)throw bl(new Error,t.message,Al.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw bl(new Error,r,Al.BAD_REQUEST);let n=await qg.updateRecords(e);return nn.isEmpty(n.existing_rows)?Hg(Rse,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Hg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Ise,"updateData");async function wse(e){if(e.operation!=="upsert")throw bl(new Error,"invalid operation, must be upsert",Al.INTERNAL_SERVER_ERROR);let t=Gg(e);if(t)throw bl(new Error,t.message,Al.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw bl(new Error,r,Al.BAD_REQUEST);let n=await qg.upsertRecords(e);return Hg(Xk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(wse,"upsertData");function Hg(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===Jk?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Xk?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Hg,"returnObject");function Nse(e){return nn.transformReq(e),qg.flush(e.schema,e.table)}a(Nse,"flush")});var Sw=M((kDe,rH)=>{var Cse=mt(),gw=require("joi"),{hdbTable:Ose,hdbDatabase:eH}=Qi(),tH={schema:eH,database:eH,table:Ose},Pse={date:gw.date().iso().required()},Lse={timestamp:gw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};rH.exports=function(e,t){let r=t==="timestamp"?{...tH,...Lse}:{...tH,...Pse},n=gw.object(r);return Cse.validateBySchema(e,n)}});var iH=M((HDe,sH)=>{var Dse=mt(),Tw=require("joi"),{hdbTable:vse,hdbDatabase:nH}=Qi(),Mse=Tw.object({schema:nH,database:nH,table:vse,hash_values:Tw.array().required(),ids:Tw.array()});sH.exports=function(e){return Dse.validateBySchema(e,Mse)}});var Aw=M((GDe,oH)=>{"use strict";var yw=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}},Rw=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=o}},bw=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};oH.exports={InsertObject:yw,NoSQLSeachObject:Rw,DeleteResponseObject:bw}});var Nl=M(($De,dH)=>{"use strict";var cH=Sw(),Use=iH(),Il=oe(),aH=require("moment"),lH=J(),{promisify:xse,callbackify:Bse}=require("util"),wl=(H(),v(z)),Fse=to(),Iw=xse(Fse.getTableSchema),ww=fs(),{DeleteResponseObject:kse}=Aw(),{handleHDBError:Za,hdbErrors:Hse}=_e(),{HDB_ERROR_MSGS:$g,HTTP_STATUS_CODES:ec}=Hse,Gse="records successfully deleted",qse=Bse(uH);dH.exports={delete:qse,deleteRecord:uH,deleteFilesBefore:$se,deleteAuditLogsBefore:Vse};async function $se(e){let t=cH(e,"date");if(t)throw Za(t,t.message,ec.BAD_REQUEST,void 0,void 0,!0);if(Il.transformReq(e),!aH(e.date,aH.ISO_8601).isValid())throw Za(new Error,$g.INVALID_DATE,ec.BAD_REQUEST,wl.LOG_LEVELS.ERROR,$g.INVALID_DATE,!0);let n=Il.checkSchemaTableExist(e.schema,e.table);if(n)throw Za(new Error,n,ec.NOT_FOUND,wl.LOG_LEVELS.ERROR,n,!0);let s=await ww.deleteRecordsBefore(e);if(await Iw(e.schema,e.table),lH.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a($se,"deleteFilesBefore");async function Vse(e){let t=cH(e,"timestamp");if(t)throw Za(t,t.message,ec.BAD_REQUEST,void 0,void 0,!0);if(Il.transformReq(e),isNaN(e.timestamp))throw Za(new Error,$g.INVALID_VALUE("Timestamp"),ec.BAD_REQUEST,wl.LOG_LEVELS.ERROR,$g.INVALID_VALUE("Timestamp"),!0);let r=Il.checkSchemaTableExist(e.schema,e.table);if(r)throw Za(new Error,r,ec.NOT_FOUND,wl.LOG_LEVELS.ERROR,r,!0);let n=await ww.deleteAuditLogsBefore(e);return await Iw(e.schema,e.table),lH.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Vse,"deleteAuditLogsBefore");async function uH(e){e.ids&&(e.hash_values=e.ids);let t=Use(e);if(t)throw Za(t,t.message,ec.BAD_REQUEST,void 0,void 0,!0);Il.transformReq(e);let r=Il.checkSchemaTableExist(e.schema,e.table);if(r)throw Za(new Error,r,ec.NOT_FOUND,wl.LOG_LEVELS.ERROR,r,!0);try{await Iw(e.schema,e.table);let n=await ww.deleteRecords(e);return Il.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Gse}`),n}catch(n){if(n.message===wl.SEARCH_NOT_FOUND_MESSAGE){let s=new kse;return s.message=wl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(uH,"deleteRecord")});var Lw={};ye(Lw,{HASH_FUNCTION:()=>$r,hash:()=>Ow,validate:()=>Pw});function Nw(e=Rp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(yp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Ow(e,t=$r[mH?.toUpperCase()]??$r.SHA256){return Cw[t](e)}function Pw(e,t,r=$r[mH?.toUpperCase()]??$r.SHA256){return e?Kse[r](e,t):!1}var yp,dd,fH,mH,Rp,pH,$r,Cw,Kse,Dw=ne(()=>{yp=b(require("node:crypto")),dd=b(require("argon2")),fH=b(me());H();mH=(0,fH.get)(F.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Rp=16,pH=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(Nw,"generateSalt");Cw={[$r.MD5]:(e,t=void 0)=>{t=t??Nw(pH);let r=yp.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??Nw(Rp);let r=yp.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=Nw(Rp),r=await dd.hash(e,{type:dd.argon2id,salt:Buffer.from(t)});return t+r}},Kse={[$r.MD5]:(e,t)=>{let r=e.slice(0,pH);return e===Cw[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,Rp);return e===Cw[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await dd.verify(e.slice(Rp),t)};a(Ow,"hash");a(Pw,"validate")});var EH=M((WDe,hH)=>{var vw=mt(),_n={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 Yse(e){return _n.password.presence=!0,_n.username.presence=!0,_n.role.presence=!0,_n.active.presence=!0,vw.validateObject(e,_n)}a(Yse,"addUserValidation");function Wse(e){return _n.password.presence=!1,_n.username.presence=!0,_n.role.presence=!1,_n.active.presence=!1,vw.validateObject(e,_n)}a(Wse,"alterUserValidation");function zse(e){return _n.password.presence=!1,_n.username.presence=!0,_n.role.presence=!1,_n.active.presence=!1,vw.validateObject(e,_n)}a(zse,"dropUserValidation");hH.exports={addUserValidation:Yse,alterUserValidation:Wse,dropUserValidation:zse}});var OH=M((QDe,CH)=>{"use strict";var Mw=require("recursive-iterator"),jse=require("alasql"),Uw=require("clone"),_H=oe(),{handleHDBError:gH,hdbErrors:Qse}=_e(),{HDB_ERROR_MSGS:SH,HTTP_STATUS_CODES:TH}=Qse,{getDatabases:Jse}=(we(),v(ft)),Xse=["DISTINCT_ARRAY"],yH=Symbol("validateTables"),xw=Symbol("validateTable"),jDe=Symbol("getAllColumns"),RH=Symbol("validateAllColumns"),Vg=Symbol("findColumn"),bH=Symbol("validateOrderBy"),bp=Symbol("validateSegment"),Bw=Symbol("validateColumn"),AH=Symbol("setColumnsForTable"),IH=Symbol("checkColumnsForAsterisk"),wH=Symbol("validateGroupBy"),NH=Symbol("hasColumns"),Fw=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[yH](),this[IH](),this[RH]()}[yH](){if(this[NH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xw](t.table)})}}[NH](){let t=!1,r=new Mw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[xw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Jse();if(!r[t.databaseid])throw gH(new Error,SH.SCHEMA_NOT_FOUND(t.databaseid),TH.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw gH(new Error,SH.TABLE_NOT_FOUND(t.databaseid,t.tableid),TH.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Uw(s);i.table=Uw(t),this.attributes.push(i)})}[Vg](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)}[IH](){let t=new Mw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[AH](r.tableid)}[AH](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new jse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[RH](){this[bp](this.statement.columns,!1),this[bp](this.statement.joins,!1),this[bp](this.statement.where,!1),this[wH](this.statement.group,!1),this[bp](this.statement.order,!0)}[bp](t,r){if(!t)return;let n=new Mw(t),s=[];for(let{node:i,path:o}of n)!_H.isEmpty(i)&&!_H.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[bH](i):s.push(this[Bw](i)));return s}[wH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&Xse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Uw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Vg](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[Vg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((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 '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[bH](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[Bw](t)}[Bw](t){let r=this[Vg](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]}};CH.exports=Fw});var vH=M((XDe,DH)=>{"use strict";var PH=require("lodash"),Ap=require("mathjs"),Zse=require("jsonata"),LH=oe();DH.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?PH.uniqWith(e,PH.isEqual):e,"distinct_array"),searchJSON:eie,mad:Ip.bind(null,Ap.mad),mean:Ip.bind(null,Ap.mean),mode:Ip.bind(null,Ap.mode),prod:Ip.bind(null,Ap.prod),median:Ip.bind(null,Ap.median)};function Ip(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(Ip,"aggregateFunction");function eie(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(LH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),LH.isEmpty(this.__ala__.res[r])){let n=Zse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(eie,"searchJSON")});var UH=M((eve,MH)=>{"use strict";var ur=require("moment"),kw="YYYY-MM-DDTHH:mm:ss.SSSZZ";ur.suppressDeprecationWarnings=!0;MH.exports={current_date:a(()=>ur().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>ur().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return ur(e).utc().format("YYYY");case"month":return ur(e).utc().format("MM");case"day":return ur(e).utc().format("DD");case"hour":return ur(e).utc().format("HH");case"minute":return ur(e).utc().format("mm");case"second":return ur(e).utc().format("ss");case"millisecond":return ur(e).utc().format("SSS");default:break}},"extract"),date:a(e=>ur(e).utc().format(kw),"date"),date_format:a((e,t)=>ur(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>ur(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>ur(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=ur(e).utc(),s=ur(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>ur().utc().valueOf(),"now"),get_server_time:a(()=>ur().format(kw),"get_server_time"),offset_utc:a((e,t)=>ur(e).utc().utcOffset(t).format(kw),"offset_utc")}});var kH=M((rve,FH)=>{"use strict";var tie=require("@turf/area"),rie=require("@turf/length"),nie=require("@turf/circle"),sie=require("@turf/difference"),iie=require("@turf/distance"),oie=require("@turf/boolean-contains"),aie=require("@turf/boolean-equal"),cie=require("@turf/boolean-disjoint"),lie=require("@turf/helpers"),xH=(H(),v(z)),Ze=oe(),Qo=J();FH.exports={geoArea:uie,geoLength:die,geoCircle:fie,geoDifference:mie,geoDistance:BH,geoNear:pie,geoContains:hie,geoEqual:Eie,geoCrosses:_ie,geoConvert:gie};function uie(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return tie.default(e)}catch(t){return Qo.trace(t,e),NaN}}a(uie,"geoArea");function die(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return rie.default(e,{units:t||"kilometers"})}catch(r){return Qo.trace(r,e),NaN}}a(die,"geoLength");function fie(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return nie.default(e,t,{units:r||"kilometers"})}catch(n){return Qo.trace(n,e,t),NaN}}a(fie,"geoCircle");function mie(e,t){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return sie(e,t)}catch(r){return Qo.trace(r,e,t),NaN}}a(mie,"geoDifference");function BH(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return iie.default(e,t,{units:r||"kilometers"})}catch(n){return Qo.trace(n,e,t),NaN}}a(BH,"geoDistance");function pie(e,t,r,n){if(Ze.isEmpty(e)||Ze.isEmpty(t))return!1;if(Ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return BH(e,t,n)<=r}catch(s){return Qo.trace(s,e,t),!1}}a(pie,"geoNear");function hie(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return oie.default(e,t)}catch(r){return Qo.trace(r,e,t),!1}}a(hie,"geoContains");function Eie(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return aie.default(e,t)}catch(r){return Qo.trace(r,e,t),!1}}a(Eie,"geoEqual");function _ie(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return!cie.default(e,t)}catch(r){return Qo.trace(r,e,t),!1}}a(_ie,"geoCrosses");function gie(e,t,r){if(Ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ze.isEmpty(t))throw new Error("geo_type is required");if(Ze.isEmpty(xH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(xH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),lie[t](e,r)}a(gie,"geoConvert")});var Kg=M((sve,HH)=>{var Cl=vH(),ms=UH(),ro=kH();HH.exports=e=>{e.aggr.mad=e.aggr.MAD=Cl.mad,e.aggr.mean=e.aggr.MEAN=Cl.mean,e.aggr.mode=e.aggr.MODE=Cl.mode,e.aggr.prod=e.aggr.PROD=Cl.prod,e.aggr.median=e.aggr.MEDIAN=Cl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Cl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Cl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ms.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ms.current_time,e.fn.extract=e.fn.EXTRACT=ms.extract,e.fn.date=e.fn.DATE=ms.date,e.fn.date_format=e.fn.DATE_FORMAT=ms.date_format,e.fn.date_add=e.fn.DATE_ADD=ms.date_add,e.fn.date_sub=e.fn.DATE_SUB=ms.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ms.date_diff,e.fn.now=e.fn.NOW=ms.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ms.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ms.get_server_time,e.fn.getdate=e.fn.GETDATE=ms.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ms.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ro.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ro.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ro.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ro.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ro.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ro.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ro.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ro.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ro.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ro.geoNear}});var VH=M((ive,$H)=>{"use strict";var wp=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var Sie=Kg(),GH=require("clone"),Yg=require("recursive-iterator"),Ke=J(),st=oe(),fd=fs(),Tie=(H(),v(z)),{hdbErrors:yie}=_e(),{getDatabases:qH}=(we(),v(ft)),Rie="IS NULL",hi="There was a problem performing this search. Please check the logs and try again.";Sie(Kn);var Hw=class{static{a(this,"SQLSearch")}constructor(t,r){if(st.isEmpty(t))throw Ke.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),st.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!st.isEmptyOrZeroLength(n))return Ke.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ke.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ke.error(n),new Error(hi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ke.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ke.error(n),new Error(hi)}if(Object.keys(this.data).length===0)return Ke.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ke.error("Error thrown from processJoins in SQLSearch class method search."),Ke.error(n),new Error(hi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ke.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ke.error(n),new Error(hi)}try{return t=await this._finalSQL(),t}catch(n){throw Ke.error("Error thrown from finalSQL in SQLSearch class method search."),Ke.error(n),new Error(hi)}}_getColumns(){let t=new Yg(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(GH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=wp.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=qH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(st.isEmpty(this.statement.where)){Ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Yg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!st.isEmpty(r)&&r.right)if(st.isNotEmptyAndHasValue(r.right.value)){let n=st.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Kn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=st.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Kn.yy.LogicValue({value:i}):n instanceof Kn.yy.StringValue&&st.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Kn.yy.NumValue({value:i}))});if(t){Ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Yg(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(!st.isEmpty(Tie.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(st.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(st.isEmptyOrZeroLength(r.left.columnid)||st.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,value:r.right.value})}continue}if(st.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"=":!st.isEmpty(r.right.value)||!st.isEmpty(r.left.value)?n.add(st.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[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(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from)&&st.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((n,s)=>{if(n.columnid==="*"){t.push(s);return}if(n.aggregatorid&&(this.has_aggregator=!0),!n.aggregatorid&&!n.funcid)if(n.as_orig=n.as?n.as:n.columnid,this.statement.joins)if(r[n.as_orig]>=0){let i=r[n.as_orig]+1;n.as=`[${n.as_orig+i}]`,r[n.as_orig]=i}else n.as=`[${n.as_orig}]`,r[n.as_orig]=0;else n.as=`[${n.as_orig}]`;!n.aggregatorid&&n.funcid&&n.args&&(n.as_orig=n.as?n.as:n.toString().replace(/'/g,'"'),n.as=`[${n.as_orig}]`),n.aggregatorid&&n.expression.columnid!=="*"&&(n.as_orig=n.as?n.as:n.expression.tableid?`${n.aggregatorid}(${n.expression.tableid}.${n.expression.columnid})`:`${n.aggregatorid}(${n.expression.columnid})`,n.as=`[${n.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&wp.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(n=>{if(t.columnid_orig&&t.tableid_orig)return(n.table.as===t.tableid_orig||n.table.tableid===t.tableid_orig)&&n.attribute===t.columnid_orig;if(t.tableid)return(n.table.as===t.tableid||n.table.tableid===t.tableid)&&n.attribute===t.columnid;let s=t.columnid_orig?t.columnid_orig:t.columnid;return n.attribute===s});if(st.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);st.isEmptyOrZeroLength(n)||(r=this.all_table_attributes.filter(s=>s.attribute===n[0].columnid&&n[0].tableid&&n[0].tableid===(s.table.as?s.table.as:s.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(st.isEmptyOrZeroLength(this.all_table_attributes)&&!st.isEmptyOrZeroLength(this.columns.columns))return t;if(st.isEmptyOrZeroLength(this.all_table_attributes)&&st.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Kn.promise(r)}catch(r){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ke.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(GH(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(st.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(Rie)>-1&&this.tables.forEach(s=>{let i={columnid:qH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=wp.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].__hashName;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].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!st.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await fd.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(hi)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await fd.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(hi)}else if(!st.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!st.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await fd.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ke.error(d),new Error(hi)}else try{c.attribute=s.attribute,c.value="*";let d=await fd.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ke.error(d),new Error(hi)}}}_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 Kn.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 Kn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Kn.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 Kn.yy.FuncValue:new Kn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let o=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;o.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Kn.promise(h,t),t=null}catch(p){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ke.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];o.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=wp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,R=E.length;g<R;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Yg(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=wp.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 Ke.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ke.error(i),new Error(hi)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await fd.getDataByHash(c),u=s.columns.length;for(let d=0,f=o.length;d<f;d++){let m=o[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ke.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(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();Ke.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ke.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 Ke.error(yie.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ke.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((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].__mergedAttributes.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.attribute=n.attribute,i.value="*";let o=await fd.getDataByValue(i);for(let[c,l]of o)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ke.error("There was an error when processing this SQL operation. Check your logs"),Ke.error(o),new Error(hi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};$H.exports=Hw});var gn=M((ave,KH)=>{"use strict";KH.exports={searchByConditions:bie,searchByHash:Aie,searchByValue:Iie,search:wie};var Gw=fs(),{transformReq:qw}=oe();async function bie(e){return qw(e),Gw.searchByConditions(e)}a(bie,"searchByConditions");async function Aie(e){qw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Gw.searchByHash(e))r&&t.push(r);return t}a(Aie,"searchByHash");async function Iie(e){qw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Gw.searchByValue(e))t.push(r);return t}a(Iie,"searchByValue");function wie(e,t){try{let r=OH(),n=VH(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(o=>{t(null,o)}).catch(o=>{t(o,null)})}catch(r){return t(r)}}a(wie,"search")});var no=M((lve,jH)=>{"use strict";var Np=require("crypto"),Nie=me(),{CONFIG_PARAMS:Cie}=(H(),v(z)),WH="aes-256-cbc",Oie=32,Pie=16,$w=64,zH=32,Lie=$w+zH,YH=new Map;jH.exports={encrypt:Die,decrypt:vie,createNatsTableStreamName:Mie};function Die(e){let t=Np.randomBytes(Oie),r=Np.randomBytes(Pie),n=Np.createCipheriv(WH,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(Die,"encrypt");function vie(e){let t=e.substr(0,$w),r=e.substr($w,zH),n=e.substr(Lie,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Np.createDecipheriv(WH,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(vie,"decrypt");function Mie(e,t){let r=Nie.get(Cie.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=YH.get(r);return n||(n=Np.createHash("md5").update(r).digest("hex"),YH.set(r,n)),n}a(Mie,"createNatsTableStreamName")});var Ct=M((fve,JH)=>{"use strict";var{platform:dve}=require("os"),Uie="nats-server.zip",Vw="nats-server",xie=process.platform==="win32"?`${Vw}.exe`:Vw,Bie=/^[^\s.,*>]+$/,QH="__request__",Fie=a(e=>`${e}.${QH}`,"REQUEST_SUBJECT"),kie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Hie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Gie={HUB:"hub.pid",LEAF:"leaf.pid"},qie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},$ie={SUCCESS:"success",ERROR:"error"},Vie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Kie={TXN:"txn",MSGID:"msgid"},md={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Yie={[md.ERR]:1,[md.WRN]:2,[md.INF]:3,[md.DBG]:4,[md.TRC]:5},Wie={debug:"-D",trace:"-DVV"};JH.exports={NATS_SERVER_ZIP:Uie,NATS_SERVER_NAME:Vw,NATS_BINARY_NAME:xie,PID_FILES:Gie,NATS_CONFIG_FILES:Hie,SERVER_SUFFIX:qie,NATS_TERM_CONSTRAINTS_RX:Bie,REQUEST_SUFFIX:QH,UPDATE_REMOTE_RESPONSE_STATUSES:$ie,CLUSTER_STATUS_STATUSES:Vie,REQUEST_SUBJECT:Fie,SUBJECT_PREFIXES:Kie,MSG_HEADERS:kie,LOG_LEVELS:md,LOG_LEVEL_FLAGS:Wie,LOG_LEVEL_HIERARCHY:Yie}});var Kw=M(Sn=>{"use strict";var zie={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
10
+ `},"serialize"),compressible:!1,q:.8});hn.set("application/x-www-form-urlencoded",{deserialize(e){let t=Buffer.isBuffer(e)?e.toString("utf8"):e,r={};for(let[n,s]of new URLSearchParams(t))if(r.hasOwnProperty(n)){let i=r[n];Array.isArray(i)?i.push(s):r.key=[i,s]}else r[n]=s;return r},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});nx={type:"application/json",serializeStream:Dm,serialize:vm,deserialize:lZ,q:.5};hn.set("*/*",nx);hn.set("",nx);a(lZ,"tryJSONParse");a(Um,"registerContentHandlers");uZ=(0,tx.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=L_(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(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=o.serializeStream}else u=o.serialize;return u(l,{headers:{set:a((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});a(L_,"findBestSerializer");QU=oA.default.get(F.HTTP_COMPRESSIONTHRESHOLD);a(xm,"serialize");a(xo,"serializeMessage");a(uA,"asyncSerialization");a(dA,"hasAsyncSerialization");a(dZ,"streamToBuffer");fZ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];a(mZ,"isBufferEncoding");a(pZ,"parseContentType");a(Bo,"getDeserializer");a(hZ,"deserializerUnknownType");a(EZ,"transformIterable");a(P_,"toCsvStream")});var H_={};ye(H_,{Blob:()=>Ms,blobsWereEncoded:()=>tl,cleanupOrphans:()=>PZ,databasePaths:()=>mA,decodeBlobsWithWrites:()=>k_,decodeFromDatabase:()=>Ho,decodeWithBlobCallback:()=>km,deleteBlob:()=>x_,deleteBlobsInObject:()=>$a,deleteRootBlobPathsForDB:()=>EA,encodeBlobsAsBuffers:()=>NZ,encodeBlobsWithFilePath:()=>F_,findBlobsInObject:()=>el,getFileId:()=>B_,getFilePathForBlob:()=>px,getRootBlobPathsForDB:()=>ku,isSaving:()=>yZ,saveBlob:()=>Fm,setDeletionDelay:()=>TZ,startPreCommitBlobsForRecord:()=>_A});function fx(){}function x_(e){let t=px(e);t&&setTimeout(()=>{(0,ze.unlink)(t,r=>{r&&Bt.default.debug?.("Error trying to remove blob file",r)})},mx)}function TZ(e){mx=e}function Fm(e,t=!1){let r=Gr.get(e);if(!r)r={storageIndex:0,fileId:null,store:xn},Gr.set(e,r);else{if(r.fileId)return r;r.store=xn}return r.deleteOnFailure=t,bZ(r),r.source?fA(e,r.source,r):r.contentBuffer?RZ(e,r):fA(e,qa.Readable.from(e.stream()),r),r}function fA(e,t,r){let{filePath:n,fileId:s,store:i,compress:o,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,ze.createWriteStream)(n,{autoClose:!1,flags:"w"}),m=!1;e.size!==void 0&&(f.write(h(e.size)),m=!0);let p;o?(m||f.write(gZ),p=(0,M_.createDeflate)(),(0,qa.pipeline)(t,p,f,E)):(m||f.write(_Z),(0,qa.pipeline)(t,f,E));function h(g){let R=BigInt(g),S=new Uint8Array(Nr),y=new DataView(S.buffer);return R|=BigInt(o?hA:dx)<<48n,y.setBigInt64(0,R),S}a(h,"createHeader");function E(g){let R=f.fd;if(g){if(i.unlock(d,0),R&&((0,ze.close)(R),f.fd=null),r.deleteOnFailure)(0,ze.unlink)(n,S=>{S&&Bt.default.debug?.("Error while deleting aborted blob file",S)});else try{if((0,ze.statSync)(n).size===0){let S=Buffer.from(g.toString());(0,ze.writeFile)(n,Buffer.concat([h(BigInt(S.length)+0xff000000000000n),S]),y=>{y&&Bt.default.debug?.("Error write error message to blob file",y)})}}catch(S){Bt.default.debug?.("Error checking blob file after abort",S)}u(g)}else{if(!m){m=!0;let S=p?p.bytesWritten:f.bytesWritten-Nr;e.size=S,(0,ze.write)(R,h(S),0,Nr,0,E);return}i.unlock(d,0),c?(0,ze.fdatasync)(R,S=>{S&&u(S),l(),(0,ze.close)(R),f.fd=null}):(l(),(0,ze.close)(R),f.fd=null)}}a(E,"finished")}),e}function B_(e){return Gr.get(e)?.fileId}function yZ(e){return Gr.get(e)?.saving}function px(e){let t=Gr.get(e);return t?.fileId&&Fu(t)}function ku(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=mA.get(e);if(!t){if(!e.databaseName)return Bt.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,U_.get)(F.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,Yi.join)(n,e.databaseName)):t=[(0,Yi.join)((0,U_.getHdbBasePath)(),"blobs",e.databaseName)],mA.set(e,t)}return t}async function EA(e){let t=ku(e);t&&await Promise.all(t.map(r=>hx(r)))}async function hx(e){if((0,ze.existsSync)(e)){for(let t of await(0,Bn.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await hx((0,Yi.join)(e,t.name));else try{await(0,Bn.unlink)((0,Yi.join)(e,t.name))}catch(r){Bt.default.warn?.("Error deleting file",r)}try{await(0,Bn.rmdir)(e)}catch(t){Bt.default.warn?.("Error deleting directory",t)}}}function Fu({storageIndex:e,fileId:t,store:r}){let n=ku(r);return(0,Yi.join)(n[e],t.slice(-9,-6)||"0",t.slice(-6,-3)||"0",t.length<=9?t.slice(-3):t.slice(0,-9)+t.slice(-3))}function RZ(e,t){let r=t.contentBuffer,n=r.length;if(!(n<ux))return e.size=n,fA(e,qa.Readable.from([r]),t)}function bZ(e){let t=ku(e.store),r=AZ(),n=t?.length>1?IZ(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=Fu(e),o=(0,Yi.dirname)(i);(0,ze.existsSync)(o)||(0,pA.ensureDirSync)(o),e.filePath=i}function AZ(){let e=cx.get(xn);if(!e){let t=0,r=ku(xn);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let o=0;if((0,ze.existsSync)(n))for(let c of(0,ze.readdirSync)(n)){let l=parseInt(c,16);i===2&&c.length>3&&(l=parseInt(c.slice(-3),16),l+=parseInt(c.slice(0,-3),16)*68719476736),l>o&&(o=l)}s+=o,n=(0,Yi.join)(n,o.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(xn.getUserSharedBuffer("blob-file-id",e.buffer)),cx.set(xn,e)}return Number(Atomics.add(e,0,1n))}function IZ(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(v_);for(let i=0;i<s.length;i++)s[i]=i%e.length;e.frequencyTable=s}return(e.lastUpdated??0)+6e4<r&&(e.lastUpdated=r,wZ(e)),e.frequencyTable[t%v_]}async function wZ(e){if(!Bn.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let o;try{o=await(0,Bn.statfs)(s)}catch(l){if(l.code!=="ENOENT")throw l;(0,pA.ensureDirSync)(s),o=await(0,Bn.statfs)(s)}let c=o.bavail*o.bsize;return Math.pow(c,.8)})),r=new Array(v_),n=t.map(s=>1/s);for(let s=0;s<v_;s++){let i=1/0,o=0;for(let c=0;c<n.length;c++)n[c]<i&&(o=c,i=n[c]);n[o]+=1/t[o],r[s]=o}e.frequencyTable=r}function F_(e,t,r){xu=t,xn=r,tl=!1;try{return e()}finally{xu=void 0,xn=void 0}}function NZ(e){Xr=[];let t;try{t=e()}catch(n){throw Xr=void 0,n}let r=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,r?r.then(()=>e()):t}function k_(e,t,r){try{Xr=[],ko=r,xn=t,e()}catch(s){throw ko=void 0,Xr=void 0,s}ko=void 0;let n=Xr.length<2?Xr[0]:Promise.all(Xr);return Xr=void 0,n}function km(e,t,r){xn=r;try{return ko=t,e()}finally{ko=void 0}}function Ho(e,t){return xn=t,e()}function $a(e){el(e,t=>{x_(t)})}function el(e,t){if(e instanceof Ms)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&el(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&el(e[r],t)}}function _A(e,t){let r;for(let n in e){let s=e[n];if(s instanceof Bu&&s.saveBeforeCommit){xn=t;let i=Fm(s,!0).saving??Promise.resolve();r=r?Promise.all(r,i):i}}return r}function OZ(){return class{static{a(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}async function PZ(e){let t,r,n=0;for(let u in e){let d=e[u];if(t=d.primaryStore.rootStore,r=d.auditStore,r)break}let s=new Set,i=ku(t);if(i)for(let u of i)await o(u);return await c(),n;async function o(u){try{if(!(0,ze.existsSync)(u))return;for(let d of await(0,Bn.readdir)(u,{withFileTypes:!0})){let f=(0,Yi.join)(u,d.name);if(d.isDirectory())await o(f);else if(s.size%1e6===0&&Bt.default.info?.("Finding all blobs for orphan check, paths accumulated",s.size),s.add(f),s.size%2===0){let m=(0,lx.getHeapStatistics)();m.used_heap_size>m.heap_size_limit*.8&&await c()}}}catch(d){Bt.default.error?.("Error searching path for blobs",u,d)}}a(o,"searchPath");async function c(){for(let u in e){Bt.default.warn?.("Checking for references to potential orphaned blobs in table",u);let d=e[u];for(let f of d.primaryStore.getRange({versions:!0,snapshot:!1,lazy:!0}))try{f.metadataFlags&Zr&&f.value&&l(f.value),await new Promise(setImmediate)}catch(m){Bt.default.error?.("Error searching table",u," for references to potential orphaned blobs failed",m)}}Bt.default.warn?.("Checking for references to potential orphaned blobs in the audit log");for(let{value:u}of r.getRange({start:1,snapshot:!1,lazy:!0}))try{let d=At(u),f=r.tableStores[d.tableId],m=f?.getEntry(d.recordId);(!m||m.version!==d.version||!m.value)&&l(d.getValue(f))}catch(d){Bt.default.error?.("Error searching audit log for references to potential orphaned blobs failed",d)}Bt.default.warn?.("Deleting",s.size,"orphaned blobs"),n+=s.size;for(let u of s)try{await(0,Bn.unlink)(u)}catch(d){Bt.default.warn?.("Error deleting file",d)}Bt.default.warn?.("Finished deleting",s.size,"orphaned blobs"),s.clear()}a(c,"removePathsThatAreNotReferenced");function l(u){el(u,d=>{if(d instanceof Bu){let f=Gr.get(d);if(f.fileId!=null){let m=Fu(f);s.has(m)&&s.delete(m)}}})}a(l,"checkObjectForReferences")}var Ki,Bn,ze,M_,qa,pA,U_,Yi,Bt,lx,ux,Nr,dx,hA,ix,_Z,gZ,ox,Gr,ko,Ms,xu,Xr,xn,tl,Bm,D_,SZ,ax,Bu,mx,mA,cx,v_,CZ,ss=se(()=>{Ki=require("msgpackr"),Bn=require("node:fs/promises"),ze=require("node:fs"),M_=require("node:zlib"),qa=require("node:stream"),pA=require("fs-extra"),U_=b(me());H();Yi=require("path"),Bt=b(wr());Fo();$i();lx=require("node:v8"),ux=8192,Nr=8,dx=0,hA=1,ix=255,_Z=new Uint8Array([0,dx,255,255,255,255,255,255]),gZ=new Uint8Array([0,hA,255,255,255,255,255,255]),ox=0xffffffffffff,Gr=new WeakMap,Ms=global.Blob||OZ(),tl=!1,Bm=new Uint8Array(8),D_=new DataView(Bm.buffer),SZ=6e4;a(fx,"InstanceOfBlobWithNoConstructor");fx.prototype=Ms.prototype;ax=!1,Bu=class e extends fx{static{a(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size),t?.saveBeforeCommit!=null&&(this.saveBeforeCommit=t.saveBeforeCommit)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=Gr.get(this),{start:r,end:n,contentBuffer:s,asString:i}=t;return i||(s&&(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),s?(t.asString=s.toString(),t.asString):(dA()&&uA(this.bytes().then(o=>t.contentBuffer=o)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=Gr.get(this),{start:r,end:n,contentBuffer:s}=t;if(s)return(n!==void 0||r!==void 0)&&(s=s.subarray(r??0,n??t.contentBuffer.length)),Promise.resolve(s);let i=Fu(t),o,c=a(async()=>{let l,u=Nr;try{if(l=await(0,Bn.readFile)(i),l.length>=Nr){l.copy(Bm,0,0,Nr);let f=D_.getBigUint64(0);if(Number(f>>48n)===ix)throw new Error("Error in blob: "+l.subarray(Nr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<ox&&(this.size=u,this.#t))for(let m of this.#t)m(u)}}catch(f){if(f.code!=="ENOENT")throw f;l=Buffer.alloc(0)}function d(f){if(u>f.length){let m=t.store,p=t.fileId+":blob";if(o)throw new Error(`Incomplete blob for ${i}`);return new Promise((h,E)=>{if(m.attemptLock(p,0,()=>(o=!0,h(c()))))return o=!0,m.unlock(p,0),h(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return a(d,"checkCompletion"),l[1]===hA?new Promise((f,m)=>{(0,M_.deflate)(l.subarray(Nr),(p,h)=>{p?m(p):f(d(h))})}):d(l.subarray(Nr))},"readContents");return c()}async arrayBuffer(){let t=await this.bytes(),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}stream(){let t=Gr.get(this),{contentBuffer:r,start:n,end:s}=t;if(r)return(s!=null||n!=null)&&(r=r.subarray(n??0,s??t.contentBuffer.length)),new ReadableStream({pull(E){E.enqueue(r),E.close()}});let i=Fu(t),o,c=0,l=0,u,d,f,m=!1,p=this;return new ReadableStream({start(){let E=1e3,g=a((R,S)=>{(0,ze.open)(i,"r",(y,N)=>{if(y){if(y.code==="ENOENT"&&f!==!1&&(Bt.default.debug?.("File does not exist yet, waiting for it to be created",i,E),E-- >0))return setTimeout(()=>{h(),g(R,S)},20).unref();S(y),p.#e?.forEach(I=>I(y))}else o=N,R(N)})},"openFile");return new Promise(g)},pull:a(E=>{let g=0,R=100;return new Promise(a(function S(y,N){function I(ee){(0,ze.close)(o),clearTimeout(d),u&&u.close(),N(ee),p.#e?.forEach(G=>G(ee))}a(I,"onError");let $=Buffer.allocUnsafe(262144);(0,ze.read)(o,$,0,$.length,c,(ee,G,k)=>{if(l+=G,ee)return I(ee);if(c===0){if(G<Nr){R-- >0&&f!==!1?(h(),Bt.default.debug?.("File was empty, waiting for data to be written",i,R),setTimeout(()=>S(y,N),20).unref()):(Bt.default.debug?.("File was empty, throwing error",i,R),I(new Error(`Blob ${t.fileId} was empty`)));return}k.copy(Bm,0,0,Nr);let j=D_.getBigUint64(0);if(Number(j>>48n)===ix)return I(new Error("Error in blob: "+k.subarray(Nr,G)));if(g=Number(j&0xffffffffffffn),g<ox&&p.size!==g&&(p.size=g,p.#t))for(let Y of p.#t)Y(g);k=k.subarray(Nr,G),l-=Nr}else if(G===0){let j=Buffer.allocUnsafe(8);return(0,ze.read)(o,j,0,Nr,0,Y=>{if(Y)return I(Y);if(Bm.set(j),g=Number(D_.getBigUint64(0)&0xffffffffffffn),g>l){h()?u?d=setTimeout(()=>{I(new Error(`File read timed out reading from ${i}`))},SZ).unref():(u=(0,ze.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,S(y,N))}),S(y,N)):m?I(new Error("Blob is incomplete")):(m=!0,S(y,N));return}(0,ze.close)(o),E.close(),y()})}else k=k.subarray(0,G);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=G,S(y,N);s&&l>=s&&(l>s&&(k=k.subarray(0,s-c)),l=g=s),n&&n>c&&(k=k.subarray(n-c))}c+=G;try{E.enqueue(k)}catch(j){return Bt.default.debug?.("Error enqueuing chunk",j),y()}l===g&&((0,ze.close)(o),E.close()),y()})},"readMore"))},"pull"),cancel(){(0,ze.close)(o),clearTimeout(d),u&&u.close()}});function h(){if(f===void 0){let E=t.store,g=t.fileId+":blob";f=!E.attemptLock(g,0,()=>{f=!1}),f||E.unlock(g,0)}return f}}slice(t,r,n){let s=Gr.get(this),i=new e(n&&{type:n});if(s?.fileId){let o={...s,start:t,end:r};Gr.set(i,o),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let o={...s,contentBuffer:s.contentBuffer.subarray(t,r)};Gr.set(i,o),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(){return ax||(ax=!0,Bt.default.warn?.("save() method on Blob is deprecated, use the 'saveBeforeCommit' flag on the Blob constructor instead")),this.saveBeforeCommit=!0,Promise.resolve()}get written(){return Gr.get(this)?.saving??Promise.resolve()}},mx=500;a(x_,"deleteBlob");a(TZ,"setDeletionDelay");global.createBlob=function(e,t){let r=new Bu(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(Gr.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof qa.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=qa.Readable.from(e);else throw new Error("Invalid source type");return r};a(Fm,"saveBlob");a(fA,"writeBlobWithStream");a(B_,"getFileId");a(yZ,"isSaving");a(px,"getFilePathForBlob");mA=new Map;a(ku,"getRootBlobPathsForDB");a(EA,"deleteRootBlobPathsForDB");a(hx,"rimrafSteadily");a(Fu,"getFilePath");a(RZ,"writeBlobWithBuffer");a(bZ,"generateFilePath");cx=new Map;a(AZ,"getNextFileId");v_=128;a(IZ,"getNextStorageIndex");a(wZ,"createFrequencyTableForStoragePaths");a(F_,"encodeBlobsWithFilePath");a(NZ,"encodeBlobsAsBuffers");a(k_,"decodeBlobsWithWrites");a(km,"decodeWithBlobCallback");a(Ho,"decodeFromDatabase");a($a,"deleteBlobsInObject");a(el,"findBlobsInObject");a(_A,"startPreCommitBlobsForRecord");CZ=new Ki.Packr({copyBuffers:!0,mapsAsObjects:!0});(0,Ki.addExtension)({Class:Ms,type:11,unpack:a(function(e){let t=CZ.unpack(e),r=new Bu;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(Gr.set(r,{storageIndex:t[1],fileId:t[2],store:xn}),ko)return ko(r)??r;if(!xn)throw new Error("No store specified, cannot load blob from storage")}else Gr.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:a(function(e){let t=Gr.get(e);if(xu!==void 0&&(tl=!0,t?.recordId!==void 0&&t.recordId!==xu))throw new Error("Cannot use the same blob in two different records");let r={...e};if(e.type&&(r.type=e.type),e.size!==void 0&&(r.size=e.size),t){if(t.storageBuffer)return t.storageBuffer;if(t.contentBuffer?.length<ux)return r.size=t.contentBuffer.length,(0,Ki.pack)([r,t.contentBuffer])}if(xu!==void 0){if(t=Fm(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=xu,(0,Ki.pack)([r,t.storageIndex,t.fileId])}if(t){if(ko)return ko(e),(0,Ki.pack)([r,t.storageIndex,t.fileId]);try{let n=(0,ze.readFileSync)(Fu(t));if(n.length>=Nr&&(n.copy(Bm,0,0,Nr),Number(D_.getBigUint64(0)&0xffffffffffffn)===n.length-Nr))return Buffer.concat([(0,Ki.pack)([r]),n]);if(Xr)Xr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Xr)return Xr.push(e.bytes()),Buffer.alloc(0);throw n}}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,Ki.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});a(OZ,"polyfillBlob");a(PZ,"cleanupOrphans")});var Tx={};ye(Tx,{onStorageReclamation:()=>Hm,runReclamationHandlers:()=>yA,setAvailableSpaceRatioGetter:()=>DZ});function Hm(e,t,r){(r||(0,q_.getWorkerIndex)()===(0,q_.getWorkerCount)()-1)&&(G_.has(e)||G_.set(e,[]),G_.get(e).push({priority:0,handler:t}),TA||(TA=setTimeout(yA,_x).unref()))}async function yA(){for(let[e,t]of G_)try{let r=await Sx(e),n=LZ/r;for(let s of t){let{priority:i,handler:o}=s;if(s.priority=n,n>1||i>1){let c=o(n>1?n:0);c&&(SA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){SA.default.error?.("Error running storage reclamation handlers",r)}TA=setTimeout(yA,_x).unref()}function DZ(e){Sx=e??gx}var gA,q_,SA,$_,Ex,G_,LZ,_x,TA,gx,Sx,V_=se(()=>{gA=require("node:fs/promises"),q_=b(st()),SA=b(wr());H();$_=b(me()),Ex=b(oe());$_.default.initSync();G_=new Map,LZ=$_.default.get(F.STORAGE_RECLAMATION_THRESHOLD)??.4,_x=(0,Ex.convertToMS)($_.default.get(F.STORAGE_RECLAMATION_INTERVAL))||36e5;a(Hm,"onStorageReclamation");gx=a(async e=>{if(gA.statfs){let t=await(0,gA.statfs)(e);return t.bavail/t.blocks}else return new Promise((t,r)=>{import("hdd-space").then(n=>{n.default(s=>{for(let i of s.parts)if(e.startsWith(i.place))return t(i.free/i.size);return t(1)})})})},"defaultGetAvailableSpaceRatio"),Sx=gx;a(yA,"runReclamationHandlers");a(DZ,"setAvailableSpaceRatioGetter")});var vx={};ye(vx,{ACTION_32_BIT:()=>j_,ACTION_64_BIT:()=>xZ,AUDIT_STORE_OPTIONS:()=>$m,Decoder:()=>nl,HAS_BLOBS:()=>Zr,HAS_CURRENT_RESIDENCY_ID:()=>sl,HAS_EXPIRATION_EXTENDED_TYPE:()=>Ym,HAS_ORIGINATING_OPERATION:()=>Km,HAS_PREVIOUS_RESIDENCY_ID:()=>il,REMOTE_SEQUENCE_UPDATE:()=>Q_,createAuditEntry:()=>ol,getLastRemoved:()=>MZ,openAuditStore:()=>W_,readAuditEntry:()=>At,removeAuditEntry:()=>z_,setAuditRetention:()=>UZ,transactionKeyEncoder:()=>Ox});function W_(e){let t=e.auditStore=e.openDB(RA.AUDIT_STORE_NAME,{create:!1,...$m});t||(t=e.auditStore=e.openDB(RA.AUDIT_STORE_NAME,$m),Rx(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,o=AA;Hm(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(o=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,p;try{for(let{key:h,value:E}of t.getRange({start:1,snapshot:!1,end:Date.now()-bA/(1+i*i)})){try{m=z_(t,h,E)}catch(g){Hu.warn("Error removing audit entry",g)}if(p=h,await new Promise(setImmediate),++f>=vZ){o=10;break}}await m}finally{f===0?o=Math.min(o<<1,bA/10):(Rx(t,p),o>100&&(o=o>>1)),d(void 0),c()}},o).unref()});return u}if(a(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,qm.getWorkerIndex)()===(0,qm.getWorkerCount)()-1&&c(),(0,qm.getWorkerIndex)()===0&&!yx)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(yx=!0,Hu.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 z_(e,t,r){let n=BZ(r),s;if(n&Zr){s=At(r);let i=e.tableStores[s.tableId];if(i){let o=s.type==="message"?null:i?.getEntry(s.recordId);(!o||o.version!==s.version||!o.value)&&Ho(()=>$a(s.getValue(i)),i.rootStore)}}if((n&15)===IA){s=s||At(r);let i=s.tableId;e.tableStores[s.tableId]?.getEntry(s.recordId)?.version===s.version&&e.deleteCallbacks?.[i]?.(s.recordId,s.version)}return e.remove(t)}function Rx(e,t){wA[0]=t,e.put(Symbol.for("last-removed"),Px)}function MZ(e){let t=e.get(Symbol.for("last-removed"));if(t)return Px.set(t),wA[0]}function UZ(e,t=AA){bA=e,AA=t}function ol(e,t,r,n,s,i,o,c,l,u,d,f,m){let p=Lx[o];if(!p)throw new Error(`Invalid audit entry type ${o}`);let h=1;if(n&&(n>1?Va.setFloat64(0,n):Us.set(NA),h=9),l){if(l&255)throw new Error("Illegal extended type");h+=3}R(s),R(t),g(r),Va.setFloat64(h,e),h+=8,l&sl&&R(u),l&il&&R(d),l&Ym&&(Va.setFloat64(h,f),h+=8),l&Km&&R(Dx[m]),i?g(i):Us[h++]=0,l?Va.setUint32(n?8:0,p|l|3221225472):Us[n?8:0]=p;let E=Us.subarray(0,h);if(c)return Buffer.concat([E,c]);return E;function g(S){let y=h;h+=1,h=(0,rl.writeKey)(S,Us,h);let N=h-y-1;N>127?N>16383?(Hu.error("Key or username was too large for audit entry",S),h=y+1,Us[y]=0):(Us.copyWithin(y+2,y+1,h),Va.setUint16(y,N|32768),h++):Us[y]=N}function R(S){S<128?Us[h++]=S:S<16384?(Va.setUint16(h,S|32768),h+=2):S<1056964608?(Va.setUint32(h,S|3221225472),h+=4):(Us[h]=255,Va.setUint32(h+1,S),h+=5)}}function BZ(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 nl(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function At(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new nl(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,f=n.readFloat64(),m,p,h,E;if(i&sl&&(m=n.readInt()),i&il&&(p=n.readInt()),i&Ym&&(h=n.readFloat64()),i&Km){let y=n.readInt();E=Dx[y]}l=n.readInt();let g=n.position,R=n.position+=l,S;return{type:Lx[i&7],tableId:c,nodeId:o,get recordId(){return(0,rl.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return R>g?(0,rl.readKey)(e,g,R):void 0},get encoded(){return t?e.subarray(t,r):e},get size(){return t!==void 0&&r!==void 0?r-t:e.byteLength},getValue(y,N,I){if(i&K_||i&Gm&&!N)return S||(S=Ho(()=>y.decoder.decode(e.subarray(n.position,r)),y.rootStore)),S;if(i&Gm&&I)return eA(y.getEntry(this.recordId),I,y)},getBinaryValue(){return i&(K_|Gm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:p,expiresAt:h,originatingOperation:E}}catch(n){return Hu.error("Reading audit entry error",n,e),{}}}var rl,Y_,RA,qm,Cx,Hu,Us,Va,Ox,$m,bA,vZ,wA,Px,AA,yx,K_,Gm,bx,IA,Ax,Ix,wx,Nx,j_,xZ,Q_,sl,il,Km,Ym,Zr,Lx,Dx,nl,$i=se(()=>{rl=require("ordered-binary"),Y_=b(me()),RA=b(Yt());H();qm=b(st()),Cx=b(oe());al();Hu=b(J());N_();ss();V_();(0,Y_.initSync)();Us=Buffer.alloc(2816),Va=new DataView(Us.buffer,Us.byteOffset,2816),Ox={writeKey(e,t,r){return e===Vm?(t.set(Vm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,rl.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,rl.readKey)(e,t,r)}},$m={encoding:"binary",keyEncoder:Ox},bA=(0,Cx.convertToMS)((0,Y_.get)(F.LOGGING_AUDITRETENTION))||86400*3,vZ=1e3,wA=new Float64Array(1),Px=new Uint8Array(wA.buffer),AA=1e4,yx=!1;a(W_,"openAuditStore");a(z_,"removeAuditEntry");a(Rx,"updateLastRemoved");a(MZ,"getLastRemoved");a(UZ,"setAuditRetention");K_=16,Gm=32,bx=1,IA=2,Ax=3,Ix=4,wx=5,Nx=6,j_=14,xZ=15,Q_=11,sl=512,il=1024,Km=2048,Ym=4096,Zr=8192,Lx={put:bx|K_,[bx]:"put",delete:IA,[IA]:"delete",message:Ax|K_,[Ax]:"message",invalidate:Ix|Gm,[Ix]:"invalidate",patch:wx|Gm,[wx]:"patch",relocate:Nx,[Nx]:"relocate"},Dx={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};a(ol,"createAuditEntry");a(BZ,"readAction");a(At,"readAuditEntry");nl=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}}}});function J_(){return CA||(CA=Xe({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),CA}function kZ(e){return e=e.replace(FZ,t=>{let[r,n,s,i]=t.split(".").map(o=>parseInt(o));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function HZ(e){if(e.length!==4)throw new Error(`nodeHash must be exactly 4 bytes (32 bits); got ${e.length} bytes`);return e[0]<<24|e[1]<<16|e[2]<<8|e[3]}function PA(e){let t=Mx.default.createHash("shake128",{outputLength:4}),r;return(0,Ux.isIPv6)(e)?r=kZ(e):r=e.toLowerCase(),HZ(Uint8Array.from(t.update(r).digest()))}var Mx,Ux,OA,CA,FZ,LA=se(()=>{we();Mx=b(require("crypto")),Ux=require("node:net"),OA=new Map;a(J_,"getAnalyticsHostnameTable");FZ=/(\d{1,3}\.){3}\d{1,3}$/;a(kZ,"normalizeIPv6");a(HZ,"nodeHashToNumber");a(PA,"stableNodeId")});var Go,DA=se(()=>{Go={TABLE_SIZE:"table-size",DATABASE_SIZE:"database-size",STORAGE_VOLUME:"storage-volume",MAIN_THREAD_UTILIZATION:"main-thread-utilization",RESOURCE_USAGE:"resource-usage",UTILIZATION:"utilization"}});var qx={};ye(qx,{profile:()=>Gx,userCodeFolders:()=>eg});async function Gx(){let e=(0,Z_.pathToFileURL)(Fx.PACKAGE_ROOT).toString(),t=new Map,r=100,n=Hx/1e6,s=0,i=0;try{let{profile:u}=await Gu.post("Profiler.stop");for(let d of u.nodes)t.set(d.id,d);for(let d of u.nodes)o(d);Ve(i*n,"cpu-usage","harper"),Ve(s*n,"cpu-usage","user")}catch(u){kx.error?.("analytics profiler error:",u)}finally{await Gu.post("Profiler.start")}function o(u){if(u.unassignedCount!==void 0)return u.unassignedCount;let d=u.hitCount;if(u.children)for(let f of u.children)d+=o(t.get(f));return l(u)?(s+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):c(u)?(i+=d,d>r&&Ve(d*n,"cpu-usage",u.callFrame.url),u.unassignedCount=0,0):(u.unassignedCount=d,d)}a(o,"getUserHitCount");function c(u){return u.callFrame?.url.startsWith(e)}a(c,"isHarperCode");function l(u){if(eg.some(d=>u.callFrame?.url.startsWith(d)))return!0}a(l,"isUserCode")}var Bx,X_,Fx,Z_,kx,xx,eg,Hx,Gu,$x=se(()=>{Bx=require("node:inspector/promises");is();X_=b(me());H();Fx=b(yt()),Z_=require("node:url"),kx=b(J()),xx=(0,X_.getHdbBasePath)(),eg=xx?[(0,Z_.pathToFileURL)(xx).toString()]:[];process.env.RUN_HDB_APP&&eg.push((0,Z_.pathToFileURL)(process.env.RUN_HDB_APP).toString());Hx=1e3,Gu=new Bx.Session;Gu.connect();(async()=>{if(eg.length===0)return;await Gu.post("Profiler.enable"),await Gu.post("Profiler.setSamplingInterval",{interval:Hx}),await Gu.post("Profiler.start");let e=(0,X_.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;setInterval(()=>{Gx()},e).unref()})();a(Gx,"profile")});var ng={};ye(ng,{addAnalyticsListener:()=>Qm,analyticsDelay:()=>xA,calculateCPUUtilization:()=>a0,diffResourceUsage:()=>c0,onAnalyticsAggregate:()=>kA,recordAction:()=>Ve,recordActionBinary:()=>tn,recordHostname:()=>BA,setAnalyticsEnabled:()=>$Z});function $Z(e){r0=e,clearTimeout(zm),zm=null}function VZ(e,t){if(typeof e=="number"){let r=t.values,n=r.index++;if(n>=r.length){let s=r;t.values=r=new Float32Array(n*2),r.set(s),r.index=n+1}r[n]=e,t.total+=e}else if(typeof e=="boolean")e&&t.total++,t.count++;else if(typeof e=="function")t.count++;else throw new TypeError("Invalid metric value type "+typeof e)}function KZ(e,t,r,n,s,i){let o={};if(typeof t=="number")o.total=t,o.values=new Float32Array(4),o.values.index=1,o.values[0]=t,o.total=t;else if(typeof t=="boolean")o.total=t?1:0,o.count=1;else if(typeof t=="function")o.count=1,o.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);o.description={metric:r,path:n,method:s,type:i},rg.set(e,o)}function Ve(e,t,r,n,s){if(!r0)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=rg.get(i);o?VZ(e,o):KZ(i,e,t,r,n,s),zm||YZ()}function tn(e,t,r,n,s){Ve(!!e,t,r,n,s)}function Qm(e){s0.push(e)}function YZ(){vA||=performance.now(),zm=setTimeout(async()=>{zm=null;let e=performance.now()-vA;vA=0;let t=[],r={time:Date.now(),period:e,threadId:cl.threadId,metrics:t};for(let[s,i]of rg){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,l=0,u=[],d;for(let f of o0){let m=Math.floor(c*f),p=o[m-1];if(m>l){let h=m-l;if(p===d){let E=u[u.length-1];typeof E=="number"?u[u.length-1]={value:E,count:1+h}:E.count+=h}else u.push(h>1?{value:p,count:h}:p),d=p;l=m}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:u,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await l0()}let n=process.memoryUsage();t.push({metric:"memory",threadId:cl.threadId,byThread:!0,...n});for(let s of s0)s(t);rg=new Map,cl.parentPort?cl.parentPort.postMessage({type:n0,report:r}):f0({report:r})},xA).unref()}async function BA(){let e=Be.hostname;en.trace?.("recordHostname server.hostname:",e);let t=PA(e);en.trace?.("recordHostname nodeId:",t);let r=J_();if(!await r.get(t)){let s={id:t,hostname:e};en.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function qu(e,t){let r=Be.hostname,n=OA.get(r);n?en.trace?.("storeMetric cached nodeId:",n):(n=PA(r),en.trace?.("storeMetric new nodeId:",n),OA.set(r,n));let s={id:[(0,UA.getNextMonotonicTime)(),n],...t};en.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function a0(e,t){let r=e.userCPUTime+e.systemCPUTime;return en.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function c0(e,t){return{userCPUTime:t.userCPUTime-(e?.userCPUTime??0),systemCPUTime:t.systemCPUTime-(e?.systemCPUTime??0),minorPageFault:t.minorPageFault-(e?.minorPageFault??0),majorPageFault:t.majorPageFault-(e?.majorPageFault??0),fsRead:t.fsRead-(e?.fsRead??0),fsWrite:t.fsWrite-(e?.fsWrite??0),voluntaryContextSwitches:t.voluntaryContextSwitches-(e?.voluntaryContextSwitches??0),involuntaryContextSwitches:t.involuntaryContextSwitches-(e?.involuntaryContextSwitches??0)}}function WZ(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let o=`${t}.${s}`,c=i.getSize(),l={metric:Go.TABLE_SIZE,database:t,table:s,size:c};en.trace?.(`table ${o} size metric: ${JSON.stringify(l)}`),qu(e,l),n+=c}return n}function Vx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let o=t0.statSync(s.primaryStore.env.path).size,c=WZ(e,r,n),l=o-c,u={metric:Go.DATABASE_SIZE,database:r,size:o,used:c,free:l,audit:i};qu(e,u),en.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){en.warn?.("Error getting DB size metrics",s)}}function Kx(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let o={metric:Go.STORAGE_VOLUME,database:r,...i};qu(e,o),en.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(o)}`)}catch(s){en.warn?.("Error getting DB volume metrics",s)}}async function zZ(e,t=6e4){let r=FA(),n=u0(),s=new Promise(y=>{let N=performance.now();setImmediate(()=>{let I=performance.now();I-N>5e3&&en.warn?.("Unusually high event queue latency on the main thread of "+Math.round(I-N)+"ms"),N=performance.now()}),n.primaryStore.prefetch([1],()=>{let I=performance.now();I-N>5e3&&en.warn?.("Unusually high task queue latency on the main thread of "+Math.round(I-N)+"ms"),y(I-N)})}),i;for(let y of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(y.value?.time){i=y.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,l=new Map,u=[],d;for(let{key:y,value:N}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!N)continue;if(o){if(y>o+t)break}else o=y;d=y;let{metrics:I,threadId:$}=N;for(let ee of I||[]){let{path:G,method:k,type:j,metric:Y,count:ce,total:de,distribution:te,threads:ge,...be}=ee;ce||(ce=1);let Ye=Y+(G?"-"+G:"");k!==void 0&&(Ye+="-"+k),j!==void 0&&(Ye+="-"+j);let qe=c.get(Ye);if(qe){if(qe.threads){let er=qe.threads[$];if(er)qe=er;else{qe.threads[$]={...be};continue}}qe.count||(qe.count=1);let Ar=qe.count;for(let er in be){let Qr=be[er];typeof Qr=="number"&&(qe[er]=(qe[er]*Ar+Qr*ce)/(Ar+ce))}qe.count+=ce,de>=0&&(qe.total+=de,qe.ratio=qe.total/qe.count)}else qe={period:t,...ee},delete qe.distribution,c.set(Ye,qe),qe.byThread&&(qe.threads=[],qe.threads[$]={...be},u.push(qe));if(te){te=te.map(er=>typeof er=="number"?{value:er,count:1}:er);let Ar=l.get(Ye);Ar?Ar.push(...te):l.set(Ye,te)}}await l0()}for(let y of u){let{path:N,method:I,type:$,metric:ee,count:G,total:k,distribution:j,threads:Y,...ce}=y;Y=Y.filter(de=>de);for(let de in ce){if(typeof y[de]!="number")continue;let te=0;for(let ge of Y){let be=ge[de];typeof be=="number"&&(te+=be)}y[de]=te}y.count=Y.length,delete y.threads,delete y.byThread}for(let[y,N]of l){let I=c.get(y);N.sort((er,Qr)=>er.value>Qr.value?1:-1);let $=I.count-1,ee=[],G=0,k=0,j;for(let er of o0){let Qr=$*er;for(;G<Qr;)j=N[k++],G+=j.count,k===1&&G--;let xr=N[k>1?k-2:0];j||(j=N[0]),ee.push(j.value-(j.value-xr.value)*(G-Qr)/j.count)}let[Y,ce,de,te,ge,be,Ye,qe,Ar]=ee;Object.assign(I,{p1:Y,p10:ce,p25:de,median:te,p75:ge,p90:be,p95:Ye,p99:qe,p999:Ar})}let f;for(let[,y]of c)y.time=d,qu(n,y),f=!0;if(f)for(let y of i0)y(c.values());let m=Date.now(),{idle:p,active:h}=performance.eventLoopUtilization();if(f||h*10>p){let y={metric:Go.MAIN_THREAD_UTILIZATION,idle:p-Yx,active:h-Wx,taskQueueLatency:await s,time:m,...process.memoryUsage()};qu(n,y)}Yx=p,Wx=h;let E=process.resourceUsage();E.time=m,E.userCPUTime=E.userCPUTime/1e3,E.systemCPUTime=E.systemCPUTime/1e3,en.trace?.(`process.resourceUsage: ${JSON.stringify(E)}`);let g=c0(tg,E);en.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=tg.time?m-tg.time:t,g.cpuUtilization=a0(g,g.period);let R={metric:Go.RESOURCE_USAGE,...g};qu(n,R),tg=E;let S=ct();Vx(n,S),Vx(n,{system:S.system}),Kx(n,S),Kx(n,{system:S.system})}async function zx(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function FA(){return jx||(jx=Xe({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function u0(){return Qx||(Qx=Xe({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function JZ(){d0=!0;let e=(0,jm.get)(F.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await zZ(xA,e),await zx(FA(),jZ),await zx(u0(),QZ)},Math.min(e/2,2147483647)).unref()}function f0(e,t){let r=e.report;r.threadId=t?.threadId||cl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(Jx+=n.mean*n.count);r.totalBytesProcessed=Jx,t&&(r.metrics.push({metric:Go.UTILIZATION,...t.performance.eventLoopUtilization(Xx.get(t))}),Xx.set(t,t.performance.eventLoopUtilization())),r.id=(0,UA.getNextMonotonicTime)(),FA().primaryStore.put(r.id,r),d0||JZ(),XZ&&(m0=e9(r))}async function e9(e){if(await m0,!Ka){let r=(0,Wm.dirname)(GZ());try{Ka=await(0,MA.open)((0,Wm.join)(r,"analytics.log"),"r+")}catch{Ka=await(0,MA.open)((0,Wm.join)(r,"analytics.log"),"w+")}}let t=(await Ka.stat()).size;if(t>ZZ){let r=Buffer.alloc(t);await Ka.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Ka.write(r,{position:0}),await Ka.truncate(r.length),t=r.length}await Ka.write(JSON.stringify(e)+`
11
+ `,t)}function kA(e){e&&i0.push(e)}var cl,Zx,e0,Wm,MA,UA,jm,t0,GZ,qZ,en,rg,r0,zm,vA,xA,n0,s0,i0,o0,Yx,Wx,tg,l0,jZ,QZ,jx,Qx,d0,Jx,Xx,XZ,m0,Ka,ZZ,is=se(()=>{cl=require("worker_threads"),Zx=b(st());we();e0=b(J()),Wm=require("path"),MA=require("fs/promises"),UA=b(Un()),jm=b(me());H();Hr();t0=b(require("node:fs"));LA();DA();({getLogFilePath:GZ,forComponent:qZ}=e0.default);setTimeout(()=>{Promise.resolve().then(()=>$x())},1e3);en=qZ("analytics").conditional;(0,jm.initSync)();rg=new Map,r0=(0,jm.get)(F.ANALYTICS_AGGREGATEPERIOD)>-1;a($Z,"setAnalyticsEnabled");a(VZ,"recordExistingAction");a(KZ,"recordNewAction");a(Ve,"recordAction");Be.recordAnalytics=Ve;a(tn,"recordActionBinary");vA=0,xA=1e3,n0="analytics-report",s0=[],i0=[];a(Qm,"addAnalyticsListener");o0=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(YZ,"sendAnalytics");a(BA,"recordHostname");a(qu,"storeMetric");a(a0,"calculateCPUUtilization");a(c0,"diffResourceUsage");a(WZ,"storeTableSizeMetrics");a(Vx,"storeDBSizeMetrics");a(Kx,"storeVolumeMetrics");a(zZ,"aggregation");Yx=0,Wx=0,tg={userCPUTime:0,systemCPUTime:0},l0=a(()=>new Promise(setImmediate),"rest");a(zx,"cleanup");jZ=36e5,QZ=31536e6;a(FA,"getRawAnalyticsTable");a(u0,"getAnalyticsTable");(0,Zx.setChildListenerByType)(n0,f0);a(JZ,"startScheduledTasks");Jx=0,Xx=new Map,XZ=!1;a(f0,"recordAnalytics");ZZ=1e6;a(e9,"logAnalytics");a(kA,"onAnalyticsAggregate")});var g0={};ye(g0,{ENTRY:()=>r9,HAS_EXPIRATION:()=>og,HAS_RESIDENCY_ID:()=>KA,HAS_STRUCTURE_UPDATE:()=>ag,LAST_TIMESTAMP_PLACEHOLDER:()=>Vm,LOCAL_TIMESTAMP:()=>t9,METADATA:()=>Ku,NEW_TIMESTAMP_PLACEHOLDER:()=>h0,NO_TIMESTAMP:()=>HA,PENDING_LOCAL_TIME:()=>YA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>NA,RecordEncoder:()=>VA,TIMESTAMP_ASSIGN_LAST:()=>s9,TIMESTAMP_ASSIGN_NEW:()=>E0,TIMESTAMP_ASSIGN_PREVIOUS:()=>_0,TIMESTAMP_PLACEHOLDER:()=>sg,TIMESTAMP_RECORD_PREVIOUS:()=>GA,entryMap:()=>Ya,handleLocalTimeForGets:()=>cg,lastMetadata:()=>lt,recordUpdater:()=>WA,removeEntry:()=>ul});function a9(){return Xm[0]=Xm[0]^64,n9.getFloat64(0)}function cg(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(o,c){e.readCount++,lt=null;let l=r.call(this,o,c);return l&&(lt&&(l.metadataFlags=lt[Ku],l.localTime=lt.localTime,l.residencyId=lt.residencyId,l.size=lt.size,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l.value&&Ya.set(l.value,l),l.key=o),l};let n=e.get;e.get=function(o,c){lt=null;let l=n.call(this,o,c);return lt&&l&&(Ya.set(l,lt),lt=null),l};let s=e.getRange;e.getRange=function(o){let c=s.call(this,o);return o.valuesForKey?c.map(l=>l?.value):o.values===!1||o.onlyCount?c:c.map(l=>(lt&&(l.metadataFlags=lt[Ku],l.localTime=lt.localTime,l.residencyId=lt.residencyId,lt.expiresAt>=0&&(l.expiresAt=lt.expiresAt),lt=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let o=i.constructor,c=i.use,l=i.done;o.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,ll.push(new WeakRef(this))),c.call(this)},o.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<ll.length;u++){let d=ll[u].deref();(!d||d.isDone||d.isCommitted)&&ll.splice(u--,1)}},o.prototype.done.isTracked=!0}return e}function WA(e,t,r){return function(n,s,i,o,c=-1,l,u,d="put",f,m){f||l==null?Vu=i?.localTime?GA|_0:HA:Vu=l?i?.localTime?GA|16384:E0|16384:HA;let p=u?.expiresAt;if(p>=0&&(c|=og),Jm=c,qA=p,i?.version===o&&l===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Vu>0},E,g=0;try{let R=i?.residencyId,S=u?.residencyId;S&&($A=S,Jm|=KA,g|=sl),R!==S&&(g|=il,R||(R=0)),c&og&&(g|=Ym),u?.originatingOperation&&(g|=Km),f&&(h.ifVersion=E=i?.version??null),i&&i.value&&d!=="message"&&i.metadataFlags&Zr&&(r.getBinaryFast(i.localTime)||$a(i.value));let y;if(s!==void 0&&(y=F_(()=>e.put(n,s,h),n,e.rootStore),tl&&(g|=Zr)),l){let N=u?.user?.username;if(m&&(F_(()=>e.encoder.encode(m),n,e.rootStore),tl&&(g|=Zr)),e.encoder.hasStructureUpdate&&(g|=ag,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let I=i?.localTime,$=r.get(I);if($){let ee=At($).previousLocalTime;return y=r.put(I,ol(o,t,n,ee,u?.nodeId??server.replication.getThisNodeId(r)??0,N,d,$u,g,S,R,p),{ifVersion:E}),y}}y=r.put(s===void 0?h0:Vm,ol(o,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,N,d,$u,g,S,R,p,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:E})}return u?.tableToTrack&&i9.has(d)&&Ve($u?.length??1,"db-write",u.tableToTrack,null),y}catch(R){throw R.message+=" id: "+n+" options: "+h,R}}}function ul(e,t,r){if(t)return t.value&&t.metadataFlags&Zr&&!e.auditStore?.getBinaryFast(t.localTime)&&$a(t.value),e.remove(t.key,r)}var p0,ig,sg,Vm,NA,h0,t9,Ku,r9,Xm,n9,HA,E0,s9,_0,GA,og,KA,YA,ag,i9,Ya,o9,$u,Vu,Jm,qA,$A,lt,VA,ll,al=se(()=>{p0=require("msgpackr");$i();ig=b(J());ss();ss();is();sg=new Uint8Array([1,1,1,1,4,64,0,0]),Vm=new Uint8Array([1,1,1,1,1,0,0,0]),NA=new Uint8Array([1,1,1,1,3,64,0,0]),h0=new Uint8Array([1,1,1,1,0,64,0,0]),t9=Symbol("local-timestamp"),Ku=Symbol("metadata"),r9=Symbol("entry"),Xm=new Uint8Array(8),n9=new DataView(Xm.buffer,0,8),HA=0,E0=0,s9=1,_0=3,GA=4,og=16,KA=32,YA=1,ag=256,i9=new Set(["put","patch","delete","message","publish"]),Ya=new WeakMap,Vu=0,Jm=-1,qA=-1,$A=0,lt=null,VA=class extends p0.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{a(this,"RecordObject")}getUpdatedTime(){return Ya.get(this)?.version}getExpiresAt(){return Ya.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,o){if(Vu||Jm>=0){let c=0,l=Vu;l&&(c+=8,Vu=0);let u=Jm,d=qA,f=$A;u>=0&&(c+=4,Jm=-1,d>=0&&(c+=8,qA=-1),f&&(c+=4,$A=0));let m=o9=n.call(this,i,o|2048|c);$u=m.subarray((m.start||0)+c,m.end);let p=m.start||0;return l&&(sg[4]=l,sg[5]=l>>8,m.set(sg,p),p+=8),tl&&(u|=Zr),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,u|j_<<24),p+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(p,d),p+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(p,f)),m}else return $u=n.call(this,i,o),$u};let s=this.saveStructures;this.saveStructures=function(i,o){let c=s.call(this,i,o);return this.hasStructureUpdate=!0,c}}decode(t,r){lt=null;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(Xm,0,c),c+=8;else for(let m=0;m<8;m++)Xm[m]=t[c++];l=a9(),i=t[c]}let u,d;i<32&&(i===j_?(o=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(o=i|t[c+1]<<5,c+=2),o&og&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),o&KA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Ho(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return lt={localTime:l,[Ku]:o,expiresAt:u,residencyId:d,size:s-n},f}return r?.valueAsBuffer?t:Ho(()=>super.decode(t,r),this.rootStore)}catch(c){return ig.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};a(a9,"getTimestamp");a(cg,"handleLocalTimeForGets");ll=[];setInterval(()=>{for(let e=0;e<ll.length;e++){let t=ll[e].deref();!t||t.isDone||t.isCommitted?ll.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(ig.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):ig.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(WA,"recordUpdater");a(ul,"removeEntry")});function QA(e,t,r,n,s,i,o,c){let l=e[0];if(t==="or"){let f=u(l);for(let p=1;p<e.length;p++){let h=e[p],E=u(h);f=f.concat(E)}let m=new Set;return f.filter(p=>{let h=p.key??p;return m.has(h)?!1:(m.add(h),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?o(f,m):f}function u(f){return f.conditions?QA(f.conditions,f.operator,r,n,s,i,o,c):ju(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}a(u,"executeCondition");function d(f,m,p){return f.map((h,E)=>{if(h.conditions){let S=h.operator==="or",y=d(h.conditions,!S,p);return S?(N,I)=>y.some($=>$(N,I)):(N,I)=>y.every($=>$(N,I))}let g=(h.attribute||h[0])===r.primaryKey,R=ep(h,r,i,c,g,p);return m&&E<f.length-1&&p&&(p=E9(r.primaryStore,h.estimated_count,p)),R}).filter(Boolean)}a(d,"mapConditionsToFilters")}function ju(e,t,r,n,s,i,o){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new rn.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let y=c[0],N=zi(n.attributes,y);if(N.relationship){if(c.length<2)throw new rn.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=N.definition?.tableClass||N.elements?.definition?.tableClass,$=new Map,ee=ju({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,I,s,$);if(N.relationship.to){i[c[0]]=$;let G=!!zi(I.attributes,N.relationship.to)?.elements;ee=f9(ee,N,I.primaryStore,G,$)}if(N.relationship.from){let G=a(k=>(k?.key!==void 0&&(k=k.key),ju({attribute:N.relationship.from,value:k},t,r,n,s,$)),"searchEntry");N.elements?(i[c[0]]=$,ee=m9(ee,N,I.primaryStore,$,G)):ee=ee.flatMap(G)}return ee}else if(c.length===1)c=c[0];else throw new rn.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,p,h,E;l instanceof Date&&(l=l.getTime());let g;switch(JA[u]||u){case"lt":m=!0,p=l;break;case"le":m=!0,p=l,h=!0;break;case"gt":m=l,E=!0;break;case"ge":m=l;break;case"prefix":Array.isArray(l)?l[l.length-1]!=null&&(l=l.concat(null)):l=[l,null],m=l,p=l.slice(0),p[p.length-1]=Wi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),p=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),p=l[1],p instanceof Date&&(p=p.getTime()),h=u==="gele"||u==="gtle"||u==="between",E=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,p=l,h=!0;break;case"ne":if(l===null){m=l,E=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new rn.ClientError(`Unknown query comparator "${u}"`)}let R;if(typeof m=="string"&&m.length>xs.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,xs.MAX_SEARCH_KEY_LENGTH)+xs.OVERFLOW_MARKER,E=!1,R=ep(e,n,null,i,d)),typeof p=="string"&&p.length>xs.MAX_SEARCH_KEY_LENGTH&&(p=p.slice(0,xs.MAX_SEARCH_KEY_LENGTH)+xs.OVERFLOW_MARKER,h=!0,R=R??ep(e,n,null,i,d)),r){let y=m;m=p,p=y,y=!E,E=!h,h=y}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new rn.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new rn.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${c}`,403);if(f?.isIndexing)throw new rn.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new rn.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(R=R??ep(e,n,null,i,d),!R)throw new rn.ClientError(`Unknown search operator ${e.comparator}`)}let S={start:m,end:p,inclusiveEnd:h,exclusiveStart:E,values:!0,versions:d,transaction:t,reverse:r};if(d){let y=f.getRange(S).map(R?function({key:N,value:I}){return this?.isSync?I&&R(I)?N:Wa.SKIP:new Promise(($,ee)=>setImmediate(()=>{try{$(I&&R(I)?N:Wa.SKIP)}catch(G){ee(G)}}))}:N=>N.value==null&&!(N.metadataFlags&(Fn|dl))?Wa.SKIP:(o?._freezeRecords&&Object.freeze(N.value),N));return y.hasEntries=!0,y}else return f?f.customIndex?f.customIndex.search(e,o).map(y=>{if(typeof y=="object"&&y){let{key:N,...I}=y,$=n.primaryStore.getEntry(N);return o?._freezeRecords&&Object.freeze($?.value),{...I,...$}}return y}):f.getRange(S).map(R?function({key:y,value:N}){let I;return typeof y=="string"&&y.length>xs.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(N):I={[c]:y},this.isSync?R(I)?N:Wa.SKIP:new Promise(($,ee)=>setImmediate(()=>{try{$(R(I)?N:Wa.SKIP)}catch(G){ee(G)}}))}:({value:y})=>y):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:y,value:N}){return this.isSync?N&&R(N)?y:Wa.SKIP:new Promise((I,$)=>setImmediate(()=>{try{I(N&&R(N)?y:Wa.SKIP)}catch(ee){$(ee)}}))})}function zi(e,t){if(Array.isArray(t))if(t.length>1){let r=zi(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?zi(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 f9(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 f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let o=i.next();return o.done?o:{value:o.value}},return(){if(i?.return)return i.return()}}}})}function m9(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?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(o=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function ep(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],f=zi(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,p=n?.[d],h=ep({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:o},m,r,p?.[d]?.joined,c[1]===m.primaryKey,i);if(!h)return;if(p){p.filters||(p.filters=[]),p.filters.push(h);return}let E=t.propertyResolvers?.[d];E.to&&(h.to=E.to);let g,R=a((y,N)=>{let I,$;return E?E.returnDirect?(I=E(y,r,N),$=lt):($=E(y,r,N,!0),Array.isArray($)?(I=$.map(ee=>ee.value),$=null):I=$?.value):I=y[d],{subObject:I,subEntry:$}},"getSubObject"),S=a((y,N)=>{if(E&&h.idFilter){if(!g)if(h.idFilter.idSet?.size===1){for(let k of h.idFilter.idSet)e={attribute:E.from??t.primaryKey,value:k};g=u(E.from??t.primaryKey,h.idFilter,!0,!0)}else g=u(E.from??t.primaryKey,h.idFilter,!1,!0);let G=g(y);return g.idFilter&&(S.idFilter=g.idFilter),G}let{subObject:I,subEntry:$}=R(y,N);return I?Array.isArray(I)?(!n?.[d]&&n&&(n[d]={fromRecord(G){let k=R(G).subObject;return Array.isArray(k)?k.filter(h).map(j=>j[m.primaryKey]):k}}),I.some(h)):h(I,$):!1},"recordFilter");return S}}switch(l instanceof Date&&(l=l.getTime()),JA[o]||o){case xs.SEARCH_TYPES.EQUALS:case void 0:return u(c,d=>d===l,!0);case"contains":return u(c,d=>d?.toString().includes(l));case"ends_with":return u(c,d=>d?.toString().endsWith(l));case"starts_with":return u(c,d=>typeof d=="string"&&d.startsWith(l),!0);case"prefix":return Array.isArray(l)?l[l.length-1]==null&&(l=l.slice(0,-1)):l=[l],u(c,d=>{if(!Array.isArray(d))return!1;for(let f=0,m=l.length;f<m;f++)if(d[f]!==l[f])return!1;return!0},!0);case"between":return l[0]instanceof Date&&(l[0]=l[0].getTime()),l[1]instanceof Date&&(l[1]=l[1].getTime()),u(c,d=>(0,Wi.compareKeys)(d,l[0])>=0&&(0,Wi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Wi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Wi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Wi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Wi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Wi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new rn.ClientError(`Unknown query comparator "${o}"`)}function u(d,f,m,p){let h;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&ug(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(m=!1));let E=0,g=3;function R(S){let y=S[d],N;if(typeof y!="object"||!y||p?N=f(y):Array.isArray(y)?N=y.some(f):y instanceof Date&&(N=f(y.getTime())),m&&(g++,!N&&!R.idFilter&&++E/g*i>h)){let I=ju(e,r.transaction.getReadTxn(),!1,t),$;R.to?$=I.flatMap(G=>t.primaryStore.get(G)[R.to]):$=I.map(Qu);let ee=new Set($);R.idFilter=G=>ee.has(Qu(G)),R.idFilter.idSet=ee}return N}return a(R,"recordFilter"),s&&(R.idFilter=f),R}a(u,"attributeComparator")}function ug(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/qo(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=JA[n]||n,n===xs.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=zi(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=ug(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*qo(e.indices[i.relationship.from])/(qo(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=qo(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=u9*qo(e.primaryStore)+1;else if(n==="between")r.estimated_count=l9*qo(e.primaryStore)+1;else if(n==="sort"){let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCountAsSort?r.estimated_count=i.customIndex.estimateCountAsSort(r):r.estimated_count=qo(e.primaryStore)+1}else{let s=r[0]??r.attribute,i=e.indices[s];i?.customIndex?.estimateCount?r.estimated_count=i.customIndex.estimateCount(r.value):r.estimated_count=c9*qo(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function dg(e,t){if(e)if($o=e,Yu.lastIndex=0,p9.test(e))try{if(t&&(t.conditions=[]),li=t??new zu,Zm(li,""),qr!==$o.length&&Wt("Unable to parse query, unexpected end of query"),li.parseErrorMessage&&(li.parseError=new zA(t.parseErrorMessage),!t))throw li.parseError;return li}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${qr} in '${$o}'`,li.parseErrorMessage&&(r.message+=", "+li.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Wt(e){let t=`${e} at position ${qr}`;li.parseErrorMessage=li.parseErrorMessage?li.parseErrorMessage+", "+t:t}function Zm(e,t){let r=Yu,n,s,i,o,c,l=decodeURIComponent,u;for(;n=r.exec($o);){qr=r.lastIndex;let[,d,f]=n;o?(d&&Wt(`expected operator, but encountered '${d}'`),o=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Wt(`invalid FIQL operator ${d}`),l=S0):(l=decodeURIComponent,i="equals",d||Wt("attribute must be specified before equality comparator"),s=Wu(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=d9[f],l=jA[i]?S0:decodeURIComponent,d||Wt(`attribute must be specified before comparator ${f}`),s=Wu(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Wt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Wt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Wt("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&T0(h,d),s===""){let E=e.conditions[e.conditions.length-1];E.chainedConditions=E.chainedConditions||[],E.chainedConditions.push(h),E.operator=u}else lg(e,u),e.conditions.push(h)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Wt("conditions/comparisons are not allowed in a property list"):e.push(Wu(d)),s=void 0;break;case"(":Yu.lastIndex=qr;let p=Zm(d?[]:new zu,")");switch(d){case"":lg(e,u),e.conditions.push(p);break;case"limit":switch(p.length){case 1:e.limit=+p[0];break;case 2:e.offset=+p[0],e.limit=p[1]-e.offset;break;default:Wt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(p[0])&&p.length===1&&!p[0].name?(e.select=p[0],e.select.asArray=!0):p.length===1?e.select=p[0]:p.length===2&&p[1]===""?e.select=p.slice(0,1):e.select=p;break;case"group-by":Wt("group by is not implemented yet");case"sort":e.sort=y0(p);break;default:Wt(`unknown query function call ${d}`)}$o[qr]===","?r.lastIndex=++qr:o=!0,s=null;break;case"{":e.conditions&&Wt("property sets are not allowed in a queries"),d||Wt("property sets must have a defined parent property name"),Yu.lastIndex=qr,m=Zm([],"}"),m.name=d,e.push(m),$o[qr]===","?r.lastIndex=++qr:o=!0;break;case"[":if(Yu.lastIndex=qr,d?(m=Zm(new zu,"]"),m.name=d):m=Zm(e.conditions?new zu:[],"]"),e.conditions)if(lg(e,u),$o[qr]==="="){l=decodeURIComponent,i="equals",s=Wu(d),r.lastIndex=++qr;break}else e.conditions.push(m),s=null;else e.push(m);$o[qr]===","?r.lastIndex=++qr:o=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let h={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&T0(h,d),lg(e,u),e.conditions.push(h)}else d&&Wt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Wu(d));return e}else Wt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Wt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?h9:Yu,r.lastIndex=qr),qr===$o.length)return e}t&&Wt(`expected '${t}', but encountered end of string`)}function lg(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Wt("Can not mix operators within a condition grouping"):e.operator=t)}function Wu(e){return e.indexOf(".")>-1?e.split(".").map(Wu):decodeURIComponent(e)}function S0(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 rn.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function T0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new rn.ClientError("wildcard can only be used at the end of a string")}function y0(e){let t=R0(e[0]);return e.length>1&&(t.next=y0(e.slice(1))),t}function R0(e){if(Array.isArray(e)){let t=R0(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}}Wt(`Unknown sort type ${e}`)}function Qu(e){return Array.isArray(e)?e.join("\0"):e}function qo(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function E9(e,t,r){return t*r/qo(e)}var rn,xs,Wi,Wa,c9,l9,u9,d9,jA,JA,zA,p9,Yu,h9,qr,li,$o,zu,fg=se(()=>{rn=b(_e()),xs=b(Yt()),Wi=require("ordered-binary"),Wa=require("lmdb");mg();al();c9=.3,l9=.1,u9=.05,d9={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},jA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(QA,"executeConditions");a(ju,"searchByIndex");a(zi,"findAttribute");a(f9,"joinTo");a(m9,"joinFrom");JA={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(ep,"filterByType");a(ug,"estimateCondition");zA=class extends rn.Violation{static{a(this,"SyntaxViolation")}},p9=/[()[\]|!<>.]|(=\w*=)/,Yu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,h9=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(dg,"parseQuery");a(Wt,"recordError");a(Zm,"parseBlock");a(lg,"assignOperator");a(Wu,"decodeProperty");a(S0,"typedDecoding");a(T0,"wildcardDecoding");a(y0,"toSortObject");a(R0,"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}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};a(Qu,"flattenKey");a(qo,"estimatedEntryCount");a(E9,"intersectionEstimate")});var b0,ui,pg=se(()=>{b0=b(ci()),ui=class extends URLSearchParams{static{a(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,b0._assignPackageExport)("Resource",Resource)});var C0={};ye(C0,{MultiPartId:()=>hg,Resource:()=>lr,contextStorage:()=>Xu,snakeCase:()=>g9,transformForSelect:()=>Zu});function g9(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function A0(e,t){if(fl=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(fl=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new hg;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){fl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return fl=!0,null;e[e.length-1]==="/"&&(fl=!0)}return t.coerceId(decodeURIComponent(e))}function kn(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,l,u,d;if(r){if(o)d=i,o=o.getContext?.()||o;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,o=i.getContext?.()||i):i?.transaction instanceof vo?o=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new Ju.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?o?(d=i,o=o.getContext?.()||o):o=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let E=c.indexOf("?");E>-1&&(l=this.parseQuery(c.slice(E+1),s),c=c.slice(0,E),c===""&&(u=!0));let g=this.parsePath(c,o,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let E of s){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),l.slice&&(l=l.slice(c.length,l.length),l.length===0&&(l=new ui,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new ui,l.id=c,c==null&&(u=!0);l||(l=new ui,l.id=c),u&&(l.isCollection=!0);let f;o||(o=Xu.getStore()??{}),l.ensureLoaded!=null||l.async||u?(f={...t},l.ensureLoaded!=null&&(f.ensureLoaded=l.ensureLoaded),l.async&&(f.async=l.async),u&&(f.isCollection=!0)):f=t;let m=this.loadAsInstance,p=h;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(p=a(E=>Xu.run(o,()=>h(E)),"runAction")),o?.transaction){let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)}else return bt(o,()=>{let E=this.getResource(c,o,f);return E.then?E.then(p):p(E)},f);function h(E){if(m!==!1&&o.authorize){o.authorize=!1;let g=t.type==="read"?E.allowRead(o.user,l,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,d,o):E.allowUpdate(o.user,d,o):t.type==="create"?E.allowCreate(o.user,d,o):E.allowDelete(o.user,l,o);if(g?.then)return g.then(R=>{if(!R)throw new Ju.AccessViolation(o.user);return typeof d?.then=="function"?d.then(S=>e(E,l,o,S)):e(E,l,o,d)});if(!g)throw new Ju.AccessViolation(o.user)}return typeof d?.then=="function"?d.then(g=>e(E,l,o,g)):e(E,l,o,d)}a(h,"authorizeActionOnResource")}}function os(e,t){let r=new Ju.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 XA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();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 Zu(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):XA(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(XA(l,r,n));for(let f of e)u.push(d(f));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(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(XA(l,r,n)),f;for(let m of e){let p=d(m);p===void 0&&o&&(p=null),p?.then?(f||(f=[]),f.push(p.then(h=>u[m.name||m]=h))):u[m.name||m]=p}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(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]=Zu(c.select||c,d)}let u=o(c.name);return l(u)}else return o(c);else return c}}a(i,"handleProperty")}var I0,w0,Ju,N0,Xu,_9,lr,fl,hg,Vo=se(()=>{I0=require("crypto");Pm();Uu();w0=b(ci()),Ju=b(_e());Ga();fg();N0=require("async_hooks");pg();Xu=new N0.AsyncLocalStorage,_9={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},lr=class{static{a(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=kn(function(t,r,n,s){let i=t.get?.(r);if(t.constructor.loadAsInstance===!1)return i;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=Zu(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=kn(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let o of s){let c=t.constructor,l=o[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(o,n))):i.push(u.put(o,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):os(t,"put")},{hasContent:!0,type:"update"});static patch=kn(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):os(t,"patch")},{hasContent:!0,type:"update"});static delete=kn(function(t,r,n,s){return t.delete?t.delete(r):os(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,I0.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Xu.getStore()??{};let s;return this.loadAsInstance===!1?s=t:t==null?s=r?.[this.primaryKey]??this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=r?.[this.primaryKey]??[...t,this.getNewId()]:typeof t!="object"?s=r?.[this.primaryKey]??[t,this.getNewId()]:(s=t?.[this.primaryKey]??this.getNewId(),n=r||{},r=t),bt(n,async()=>{let i=new this(s,n),o=await i.create?i.create(s,r):os(i,"create");return n.newLocation=s??o?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?o:i})}static invalidate=kn(function(t,r,n,s){return t.invalidate?t.invalidate(r):os(t,"delete")},{hasContent:!1,type:"update"});static post=kn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.constructor.loadAsInstance===!1?t.post(r,s):t.post(s,r)},{hasContent:!0,type:"create"});static update=kn(function(t,r,n,s){return t.update(r,s)},{hasContent:!1,type:"update"});static connect=kn(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):os(t,"connect")},{hasContent:!0,type:"read"});static subscribe=kn(function(t,r,n,s){return t.subscribe?t.subscribe(r):os(t,"subscribe")},{type:"read"});static publish=kn(function(t,r,n,s){return t.#e!=null&&t.update?.(),t.publish?t.constructor.loadAsInstance===!1?t.publish(r,s):t.publish(s,r):os(t,"publish")},{hasContent:!0,type:"create"});static search=kn(function(t,r,n){let s=t.search?t.search(r):os(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let o=Zu(i,t.constructor);return s.map(o)}return s},{type:"read"});static query=kn(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):os(t,"search")},{hasContent:!0,type:"read"});static copy=kn(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):os(t,"copy")},{hasContent:!0,type:"create"});static move=kn(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):os(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;os(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return dg(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1),c=r?.headers&&_9[o];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===o))if(t=t.slice(0,s),n)n.property=o;else return{query:{property:o},id:A0(t,this),isCollection:fl}}let i=A0(t,this);return fl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),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.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return o&&(s.#r=!0),s}subscribe(t){return new ns}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new ns}allowRead(t,r){return t?.role.permission.super_user}allowUpdate(t,r,n){return t?.role.permission.super_user}allowCreate(t,r,n){return t?.role.permission.super_user}allowDelete(t,r){return t?.role.permission.super_user}getId(){return this.#e}getContext(){return this.#t}};(0,w0._assignPackageExport)("Resource",lr);a(g9,"snakeCase");a(A0,"pathToId");hg=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(kn,"transactional");a(os,"missingMethod");a(XA,"selectFromObject");a(Zu,"transformForSelect")});var ml,ZA=se(()=>{ml=class{static{a(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var eI={};ye(eI,{Resources:()=>ed,keyArrayToString:()=>td,resetResources:()=>S9,resources:()=>Bs});function S9(){return Bs=new ed,Be.resources=Bs,Bs}function td(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var O0,P0,ed,Bs,za=se(()=>{Ga();ZA();O0=b(J()),P0=b(_e());Hr();ed=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;allTypes=new Map;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s){let c=new P0.ServerError(`Conflicting paths for ${t}`);O0.default.error(c),i.Resource=new ml(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,o=t.length;for(;n<o;){s=n,n=t.indexOf("/",n),n===-1&&(n=o);let u=n===o?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===o&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return bt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(S9,"resetResources");a(td,"keyArrayToString")});function nI(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=D0,T9(e.primaryStore,e.auditStore)):(c=L0,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{v0(L0[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=td(t);let d=new rI(r);d.startTime=n;let f=u.get(t);return f?f.push(d):(u.set(t,f=[d]),f.tables=u,f.key=t),d.subscriptions=f,d}function v0(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),M0(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=At(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,l=td(c),u=0;do{let d=o.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,tI.info)("omitting",c,m.startTime,n);continue}try{let p;m.supportsTransactions&&m.txnInProgress!==i.version&&(p=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,p)}catch(p){console.error(p),(0,tI.info)(p)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f!==l.length-1&&u++,f>-1?l=l.slice(0,f+1):l=null}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function T9(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=D0[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{v0(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function M0(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function U0(e){return e.nextTransaction||(nI({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),M0(e)),e.nextTransaction}var tI,L0,D0,rI,sI=se(()=>{tI=b(J());Uu();za();$i();L0=Object.create(null),D0=Object.create(null);a(nI,"addSubscription");rI=class extends ns{static{a(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(v0,"notifyFromTransactionData");a(T9,"listenToCommits");a(M0,"nextTransaction");a(U0,"whenNextTransaction")});var B0=M((POe,x0)=>{"use strict";var iI=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};x0.exports=iI});var k0=M((DOe,F0)=>{"use strict";var oI=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};F0.exports=oI});var tp=M(G0=>{"use strict";var H0=me(),y9=(H(),v(z)),{RecordEncoder:R9}=(al(),v(g0));H0.initSync();var b9=H0.get(y9.CONFIG_PARAMS.STORAGE_CACHING)!==!1,aI=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=b9&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:R9})}};G0.OpenDBIObject=aI});var rp=M((xOe,q0)=>{"use strict";var as=me(),Fs=(H(),v(z));as.initSync();var Eg=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=as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||as.get(Fs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",as.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=as.get(Fs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=as.get(Fs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),as.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=as.get(Fs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=as.get(Fs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};q0.exports=Eg;Eg.MAX_DBS=1e4});var Et=M((FOe,X0)=>{"use strict";var lI=require("lmdb"),di=require("fs-extra"),cs=require("path"),_g=Un(),K0=J(),Hn=Jr().LMDB_ERRORS_ENUM,gg=k0(),{OpenDBIObject:uI}=tp(),Y0=rp(),ja=Yt(),$0=(H(),v(z)),{table:A9,resetDatabases:I9}=(we(),v(ft)),V0=me(),fi=ja.INTERNAL_DBIS_NAME,W0=ja.DBI_DEFINITION_NAME,w9="data.mdb",N9="lock.mdb",np=".mdb",C9="-lock",cI=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ks(t,r),this.key_type=this.dbi[ja.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ja.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new lI.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Sg(e,t){if(e===void 0)throw new Error(Hn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Hn.ENV_NAME_REQUIRED)}a(Sg,"pathEnvNameValidation");async function dI(e,t,r=!0){try{await di.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Hn.INVALID_BASE_PATH):n}try{let n=cs.join(e,t+np);return await di.access(n,di.constants.R_OK|di.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await di.access(cs.join(e,t,w9),di.constants.R_OK|di.constants.F_OK),cs.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Hn.INVALID_ENVIRONMENT)}else throw new Error(Hn.INVALID_ENVIRONMENT);throw n}}a(dI,"validateEnvironmentPath");function Tg(e,t){if(_g.validateEnv(e),t===void 0)throw new Error(Hn.DBI_NAME_REQUIRED)}a(Tg,"validateEnvDBIName");async function O9(e,t,r=!1,n=!1){Sg(e,t);let s=cs.basename(e);t=t.toString();let i=V0.get($0.CONFIG_PARAMS.DATABASES);i||V0.setProperty($0.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await dI(e,t,n),z0(e,t,r)}catch(o){if(o.message===Hn.INVALID_ENVIRONMENT){let c=cs.join(e,t);await di.mkdirp(n?c:e);let l=new Y0(n?c:c+np,!1),u=lI.open(l);u.dbis=Object.create(null);let d=new uI(!1);u.openDB(fi,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=fI(e,t,r);return u[ja.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw o}}a(O9,"createEnvironment");async function P9(e,t,r,n=!0){Sg(e,t),t=t.toString();let s=cs.join(e,t);return A9({table:t,database:cs.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(P9,"copyEnvironment");async function z0(e,t,r=!1){Sg(e,t),t=t.toString();let n=fI(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 dI(e,t),i=cs.join(e,t+np),o=s!=i,c=new Y0(s,o),l=lI.open(c);l.dbis=Object.create(null);let u=Q0(l);for(let d=0;d<u.length;d++)ks(l,u[d]);return l[ja.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}a(z0,"openEnvironment");async function L9(e,t,r=!1){Sg(e,t),t=t.toString();let n=cs.join(e,t+np),s=await dI(e,t);if(global.lmdb_map!==void 0){let i=fI(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await j0(o),delete global.lmdb_map[i]}}await di.remove(s),await di.remove(s===n?s+C9:cs.join(cs.dirname(s),N9))}a(L9,"deleteEnvironment");async function j0(e){_g.validateEnv(e);let t=e[ja.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(j0,"closeEnvironment");function fI(e,t,r=!1){let s=`${cs.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(fI,"getCachedEnvironmentName");function D9(e){_g.validateEnv(e);let t=Object.create(null),r=ks(e,fi);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==fi)try{t[n]=Object.assign(new gg,s)}catch{K0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(D9,"listDBIDefinitions");function Q0(e){_g.validateEnv(e);let t=[],r=ks(e,fi);for(let{key:n}of r.getRange({start:!1}))n!==fi&&t.push(n);return t}a(Q0,"listDBIs");function v9(e,t){let n=ks(e,fi).getEntry(t),s=new gg;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{K0.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(v9,"getDBIDefinition");function J0(e,t,r,n=!r){if(Tg(e,t),t=t.toString(),t===fi)throw new Error(Hn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ks(e,t)}catch(s){if(s.message===Hn.DBI_DOES_NOT_EXIST){let i=new uI(r,n===!0),o=e.openDB(t,i),c=new gg(r===!0,n);return o[W0]=c,ks(e,fi).putSync(t,c),e.dbis[t]=o,o}throw s}}a(J0,"createDBI");function ks(e,t){if(Tg(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==fi?r=v9(e,t):r=new gg,r===void 0)throw new Error(Hn.DBI_DOES_NOT_EXIST);let n;try{let s=new uI(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(Hn.DBI_DOES_NOT_EXIST):s}return n[W0]=r,e.dbis[t]=n,n}a(ks,"openDBI");function M9(e,t){Tg(e,t),t=t.toString();let r=ks(e,t),n=r.getStats();return r[ja.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(M9,"statDBI");async function U9(e,t){try{let r=cs.join(e,t+np);return(await di.stat(r)).size}catch{throw new Error(Hn.INVALID_ENVIRONMENT)}}a(U9,"environmentDataSize");function x9(e,t){if(Tg(e,t),t=t.toString(),t===fi)throw new Error(Hn.CANNOT_DROP_INTERNAL_DBIS_NAME);ks(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ks(e,fi).removeSync(t)}a(x9,"dropDBI");function B9(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ks(e,i)}catch(o){if(o.message===Hn.DBI_DOES_NOT_EXIST)J0(e,i,i!==t,i===t),n=!0;else throw o}}n&&I9()}a(B9,"initializeDBIs");X0.exports={openDBI:ks,openEnvironment:z0,createEnvironment:O9,listDBIs:Q0,listDBIDefinitions:D9,createDBI:J0,dropDBI:x9,statDBI:M9,deleteEnvironment:L9,initializeDBIs:B9,TransactionCursor:cI,environmentDataSize:U9,copyEnvironment:P9,closeEnvironment:j0}});var tB=M((HOe,eB)=>{"use strict";var mI=Et(),F9=J(),Z0=Jr().LMDB_ERRORS_ENUM;eB.exports=k9;async function k9(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 mI.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Z0.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await mI.closeEnvironment(global.lmdb_map[n]),await mI.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Z0.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){F9.error(t)}}a(k9,"cleanLMDBMap")});var Qi=M((qOe,nB)=>{"use strict";var rB=oe(),H9=(H(),v(z)),rd=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ji=require("joi"),Qa={schema_format:{pattern:rd,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},G9=ji.alternatives(ji.string().min(1).max(Qa.schema_length.maximum).pattern(rd).messages({"string.pattern.base":"{:#label} "+Qa.schema_format.message}),ji.number(),ji.array()).required(),q9=ji.alternatives(ji.string().min(1).max(Qa.schema_length.maximum).pattern(rd).messages({"string.pattern.base":"{:#label} "+Qa.schema_format.message}),ji.number()),$9=ji.alternatives(ji.string().min(1).max(Qa.schema_length.maximum).pattern(rd).messages({"string.pattern.base":"{:#label} "+Qa.schema_format.message}),ji.number()).required();function V9(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Qa.schema_length.maximum?`'${property_name}' maximum of 250 characters`:rd.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}a(V9,"checkValidTable");function K9(e,t){return rB.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(K9,"validateSchemaExists");function Y9(e,t){let r=t.state.ancestors[0].schema;return rB.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Y9,"validateTableExists");function W9(e,t){return e.toLowerCase()===H9.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(W9,"validateSchemaName");nB.exports={commonValidators:Qa,schemaRegex:rd,hdbSchemaTable:G9,validateSchemaExists:K9,validateTableExists:Y9,validateSchemaName:W9,checkValidTable:V9,hdbDatabase:q9,hdbTable:$9}});var mt=M((VOe,sB)=>{"use strict";var Gn=require("validate.js");Gn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Gn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Gn.validators.type.checks={Object:a(function(e){return Gn.isObject(e)&&!Gn.isArray(e)},"Object"),Array:Gn.isArray,Integer:Gn.isInteger,Number:Gn.isNumber,String:Gn.isString,Date:Gn.isDate,Boolean:a(function(e){return typeof e=="boolean"},"Boolean")};Gn.validators.hasValidFileExt=function(e,t){return Gn.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};sB.exports={validateObject:z9,validateObjectAsync:j9,validateBySchema:Q9};function z9(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Gn(e,t,{format:"flat"});return r?new Error(r):null}a(z9,"validateObject");async function j9(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Gn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(j9,"validateObjectAsync");function Q9(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Q9,"validateBySchema")});var hI=M((YOe,oB)=>{var{hdbTable:J9,hdbDatabase:iB}=Qi(),X9=mt(),pI=require("joi"),Z9={undefined:"undefined",null:"null"},e7=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||Z9[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"customRecordsVal"),t7=pI.object({database:iB,schema:iB,table:J9,records:pI.array().items(pI.object().custom(e7)).required()});oB.exports=function(e){return X9.validateBySchema(e,t7)}});var cB=M((zOe,aB)=>{"use strict";var EI=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")}};aB.exports=EI});var uB=M((QOe,lB)=>{"use strict";var _I=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};lB.exports=_I});var fB=M((XOe,dB)=>{"use strict";var gI=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}};dB.exports=gI});var pB=M((ePe,mB)=>{"use strict";var SI=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};mB.exports=SI});var hl=M((iPe,_B)=>{"use strict";var r7=Et(),n7=uB(),s7=fB(),i7=pB(),Ji=Un(),sp=Jr().LMDB_ERRORS_ENUM,o7=Yt(),Ko=(H(),v(z)),a7=oe(),c7=require("uuid"),rPe=require("lmdb"),{handleHDBError:l7,hdbErrors:u7}=_e(),{OVERFLOW_MARKER:nPe,MAX_SEARCH_KEY_LENGTH:sPe}=o7,hB=me();hB.initSync();var yg=hB.get(Ko.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),TI=Ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME,pl=Ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function d7(e,t,r,n,s=Ji.getNextMonotonicTime()){AI(e,t,r,n),yI(e,t,r);let i=new n7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];EB(u,!0,s);let d=f7(e,t,r,u),f=u[t];o.push(d),c.push(f)}return RI(o,c,n,i,s)}a(d7,"insertRecords");function f7(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][Ko.FUNC_VAL],n[o]=c)}let l=Ji.getIndexedValues(c),u=e.dbis[o];if(l){yg&&u.prefetch(l.map(d=>({key:d,value:s})),Rg);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}yg&&e.dbis[t].prefetch([s],Rg),e.dbis[t].put(s,n,n[pl])})}a(f7,"insertRecord");function m7(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(m7,"removeSkippedRecords");function EB(e,t,r){let n=r>0;(n||!Number.isInteger(e[pl]))&&(e[pl]=r||(r=Ji.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[TI]))&&(e[TI]=r||Ji.getNextMonotonicTime()):delete e[TI]}a(EB,"setTimestamps");function yI(e,t,r){r.indexOf(Ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ko.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ko.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),r7.initializeDBIs(e,t,r)}a(yI,"initializeTransaction");async function p7(e,t,r,n,s=Ji.getNextMonotonicTime()){AI(e,t,r,n),yI(e,t,r);let i=new s7,o=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=bI(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),o.push(u);continue}c.push(m),l.push(f)}return RI(c,l,n,i,s,o)}a(p7,"updateRecords");async function h7(e,t,r,n,s=Ji.getNextMonotonicTime()){try{AI(e,t,r,n)}catch(l){throw l7(l,l.message,u7.HTTP_STATUS_CODES.BAD_REQUEST)}yI(e,t,r);let i=new i7,o=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;a7.isEmpty(u[t])?(d=c7.v4(),u[t]=d):d=u[t];let f=bI(e,t,u,d,i,!1,s);o.push(f),c.push(d)}return RI(o,c,n,i,s)}a(h7,"upsertRecords");async function RI(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||Ji.getNextMonotonicTime(),m7(r,i),n}a(RI,"finalizeWrite");function bI(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(EB(r,!d,o),Number.isInteger(r[pl])&&u[pl]>r[pl])return!1;d&&s.original_records.push(u);let f,m=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let E=r[h],g=e.dbis[h];if(g===void 0)continue;let R=u[h];if(typeof E=="function"){let y=E([[u]]);Array.isArray(y)&&(E=y[0][Ko.FUNC_VAL],r[h]=E)}if(E===R)continue;let S=Ji.getIndexedValues(R);if(S){yg&&g.prefetch(S.map(y=>({key:y,value:n})),Rg);for(let y=0,N=S.length;y<N;y++)g.remove(S[y],n)}if(S=Ji.getIndexedValues(E),S){yg&&g.prefetch(S.map(y=>({key:y,value:n})),Rg);for(let y=0,N=S.length;y<N;y++)g.put(S[y],n)}}let p={...u,...r};c.put(n,p,p[pl])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(p=>p?!0:bI(e,t,r,n,s,i,o))}a(bI,"updateUpsertRecord");function E7(e,t,r){if(Ji.validateEnv(e),t===void 0)throw new Error(sp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(sp.WRITE_ATTRIBUTES_REQUIRED):new Error(sp.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(E7,"validateBasic");function AI(e,t,r,n){if(E7(e,t,r),!Array.isArray(n))throw n===void 0?new Error(sp.RECORDS_REQUIRED):new Error(sp.RECORDS_MUST_BE_ARRAY)}a(AI,"validateWrite");function Rg(){}a(Rg,"noop");_B.exports={insertRecords:d7,updateRecords:p7,upsertRecords:h7}});var Xi=M((aPe,_7)=>{_7.exports={hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"hash_function"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"id",table:"hdb_license",database:"system",audit:!0,attributes:[{attribute:"id"},{name:"level"},{name:"region",indexed:!0},{name:"reads"},{name:"writes"},{name:"readBytes"},{name:"writeBytes"},{name:"realTimeMessages"},{name:"realTimeBytes"},{name:"cpuTime"},{name:"storage"},{name:"usedReads"},{name:"usedWrites"},{name:"usedReadBytes"},{name:"usedWriteBytes"},{name:"usedRealTimeMessages"},{name:"usedRealTimeBytes"},{name:"usedCpuTime"},{name:"usedStorage"},{name:"expiration"},{name:"autoRenew"},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]},hdb_certificate_cache:{hash_attribute:"certificate_id",name:"hdb_certificate_cache",schema:"system",attributes:[{attribute:"certificate_id"}]},hdb_crl_cache:{hash_attribute:"distribution_point",name:"hdb_crl_cache",schema:"system",attributes:[{attribute:"distribution_point"}]},hdb_revoked_certificates:{hash_attribute:"composite_id",name:"hdb_revoked_certificates",schema:"system",attributes:[{attribute:"composite_id"}]}}});var SB=M((cPe,gB)=>{"use strict";var g7=require("uuid"),II=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||g7.v4(),this.schema_table=`${this.schema}.${this.table}`}};gB.exports=II});var bg=M((uPe,TB)=>{"use strict";var S7=SB(),wI=class extends S7{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}};TB.exports=wI});var RB=M((fPe,yB)=>{"use strict";yB.exports=y7;var T7="inserted";function y7(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===T7?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(y7,"returnObject")});var Ag=M((hPe,AB)=>{"use strict";var R7=(H(),v(z)),NI=Et(),b7=hl(),{getSystemSchemaPath:A7,getSchemaPath:I7}=Rt(),pPe=Xi(),{validateBySchema:w7}=mt(),ip=require("joi"),N7=bg(),C7=RB(),{handleHDBError:O7,hdbErrors:P7,ClientError:L7}=_e(),bB=oe(),{HTTP_STATUS_CODES:D7}=P7,v7="inserted";AB.exports=M7;async function M7(e){let t=w7(e,ip.object({database:ip.string(),schema:ip.string(),table:ip.string().required(),attribute:ip.string().required()}));if(t)throw new L7(t.message);let r=!e.skip_table_check&&bB.checkGlobalSchemaTable(e.schema,e.table);if(r)throw O7(new Error,r,D7.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=bB.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 N7(e.schema,e.table,e.attribute,e.id);try{let i=await NI.openEnvironment(I7(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${create_attribute_obj.attribute}' already exists in ${e.schema}.${e.table}`);NI.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await NI.openEnvironment(A7(),R7.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await b7.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return C7(v7,c,{records:[s]},l)}catch(i){throw i}}a(M7,"lmdbCreateAttribute")});var op=M((gPe,wB)=>{"use strict";var Yo=oe(),IB=J(),_Pe=hI(),{getDatabases:U7}=(we(),v(ft)),{ClientError:El}=_e();wB.exports=x7;function x7(e){if(Yo.isEmpty(e))throw new El("invalid update parameters defined.");if(Yo.isEmptyOrZeroLength(e.schema))throw new El("invalid schema specified.");if(Yo.isEmptyOrZeroLength(e.table))throw new El("invalid table specified.");if(!Array.isArray(e.records))throw new El("records must be an array");let t=U7()[e.schema]?.[e.table];if(Yo.isEmpty(t))throw new El(`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&&Yo.isEmptyOrZeroLength(o[r]))throw IB.error("a valid hash attribute must be provided with update record:",o),new El("a valid hash attribute must be provided with update record, check log for more info");if(!Yo.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw IB.error(`a valid hash value must be provided with ${e.operation} record:`,o),new El(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Yo.isEmpty(o[r])&&o[r]!==""&&n.has(Yo.autoCast(o[r]))&&(o.skip=!0),n.add(Yo.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(x7,"insertUpdateValidate")});var Ig=M((TPe,CB)=>{"use strict";var NB=oe(),B7=(H(),v(z)),F7=J(),k7=Ag(),H7=bg(),G7=Wo(),{SchemaEventMsg:q7}=ls(),$7="already exists in";CB.exports=V7;async function V7(e,t,r){if(NB.isEmptyOrZeroLength(r))return r;let n=[];NB.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 K7(e,t.schema,t.name,i)})),s}a(V7,"lmdbCheckForNewAttributes");async function K7(e,t,r,n){let s=new H7(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await Y7(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes($7))F7.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(K7,"createNewAttribute");async function Y7(e){let t;return t=await k7(e),G7.signalSchemaChange(new q7(process.pid,B7.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(Y7,"createAttribute")});var nd=M((RPe,OB)=>{"use strict";var CI=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}};OB.exports=CI});var LB=M((APe,PB)=>{"use strict";var W7=nd(),z7=(H(),v(z)).OPERATIONS_ENUM,OI=class extends W7{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(z7.INSERT,r,n,s,i),this.records=t}};PB.exports=OI});var vB=M((wPe,DB)=>{"use strict";var j7=nd(),Q7=(H(),v(z)).OPERATIONS_ENUM,PI=class extends j7{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(Q7.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};DB.exports=PI});var UB=M((CPe,MB)=>{"use strict";var J7=nd(),X7=(H(),v(z)).OPERATIONS_ENUM,LI=class extends J7{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(X7.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};MB.exports=LI});var BB=M((PPe,xB)=>{"use strict";var Z7=nd(),eee=(H(),v(z)).OPERATIONS_ENUM,DI=class extends Z7{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(eee.DELETE,n,s,t,i),this.original_records=r}};xB.exports=DI});var ap=M((vPe,GB)=>{"use strict";var DPe=require("path"),FB=Et(),tee=LB(),ree=vB(),nee=UB(),see=BB(),sd=Yt(),kB=oe(),{CONFIG_PARAMS:iee}=(H(),v(z)),HB=me();HB.initSync();var wg=(H(),v(z)).OPERATIONS_ENUM,{getTransactionAuditStorePath:oee}=Rt();GB.exports=aee;async function aee(e,t){if(HB.get(iee.LOGGING_AUDITLOG)===!1)return;let r=oee(e.schema,e.table),n=await FB.openEnvironment(r,e.table,!0),s=cee(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){FB.initializeDBIs(n,sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,sd.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),kB.isEmpty(s.user_name)||n.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[sd.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(aee,"writeTransaction");function cee(e,t){let r=kB.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===wg.INSERT)return new tee(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wg.UPDATE)return new ree(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wg.UPSERT)return new nee(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===wg.DELETE)return new see(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(cee,"createTransactionObject")});var vI=M((xPe,qB)=>{"use strict";var lee=op(),UPe=Nm(),cp=(H(),v(z)),uee=Cm(),dee=hl().insertRecords,fee=Et(),mee=J(),pee=Ig(),{getSchemaPath:hee}=Rt(),Eee=ap();qB.exports=_ee;async function _ee(e){try{let{schemaTable:t,attributes:r}=lee(e);uee(e,r,t.hash_attribute),e.schema!==cp.SYSTEM_SCHEMA_NAME&&(r.includes(cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cp.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await pee(e.hdb_auth_header,t,r),s=hee(e.schema,e.table),i=await fee.openEnvironment(s,e.table),o=await dee(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Eee(e,o)}catch(c){mee.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(_ee,"lmdbCreateRecords")});var KB=M((FPe,VB)=>{"use strict";var $B=(H(),v(z)),gee=vI(),See=Nm(),Tee=require("fs-extra"),{getSchemaPath:yee}=Rt();VB.exports=Ree;async function Ree(e){let t=[{name:e.schema,createddate:Date.now()}],r=new See($B.SYSTEM_SCHEMA_NAME,$B.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await gee(r),await Tee.mkdirp(yee(e.schema))}a(Ree,"lmdbCreateSchema")});var WB=M((HPe,YB)=>{"use strict";var MI=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}};YB.exports=MI});var JB=M((KPe,QB)=>{"use strict";var zB=Et(),UI=Un(),xI=Jr().LMDB_ERRORS_ENUM,bee=Yt(),jB=J(),qPe=oe(),Aee=require("lmdb"),Iee=WB(),wee=(H(),v(z)),{OVERFLOW_MARKER:$Pe,MAX_SEARCH_KEY_LENGTH:VPe}=bee,Nee=wee.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Cee(e,t,r,n){if(UI.validateEnv(e),t===void 0)throw new Error(xI.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(xI.IDS_REQUIRED):new Error(xI.IDS_MUST_BE_ITERABLE);try{let s=zB.listDBIs(e);zB.initializeDBIs(e,t,s);let i=new Iee,o,c=[],l=[];for(let m=0,p=r.length;m<p;m++)try{o=r[m];let h=e.dbis[t].get(o);if(!h||n&&h[Nee]>n){i.skipped.push(o);continue}let E=e.dbis[t].ifVersion(o,Aee.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let g=0;g<s.length;g++){let R=s[g];if(!h.hasOwnProperty(R)||R===t)continue;let S=e.dbis[R],y=h[R];if(y!=null)try{let N=UI.getIndexedValues(y);if(N)for(let I=0,$=N.length;I<$;I++)S.remove(N[I],o)}catch{jB.warn(`cannot delete from attribute: ${R}, ${y}:${o}`)}}});c.push(E),l.push(o),i.original_records.push(h)}catch(h){jB.warn(h),i.skipped.push(o)}let u=[],d=await Promise.all(c);for(let m=0,p=d.length;m<p;m++)d[m]===!0?i.deleted.push(l[m]):(i.skipped.push(l[m]),u.push(m));let f=0;for(let m=0;m<u.length;m++){let p=u[m];i.original_records.splice(p-f,1),f++}return i.txn_time=UI.getNextMonotonicTime(),i}catch(s){throw s}}a(Cee,"deleteRecords");QB.exports={deleteRecords:Cee}});var lp=M((WPe,ZB)=>{"use strict";var id=oe(),Oee=JB(),Pee=Et(),{getSchemaPath:Lee}=Rt(),Dee=ap(),vee=J();ZB.exports=Mee;async function Mee(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(id.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(id.isEmptyOrZeroLength(e.hash_values)&&!id.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];id.isEmpty(l)||e.hash_values.push(l)}}if(id.isEmptyOrZeroLength(e.hash_values))return XB([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(id.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=Lee(e.schema,e.table),i=await Pee.openEnvironment(s,e.table),o=await Oee.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Dee(e,o)}catch(c){vee.error(`unable to write transaction due to ${c.message}`)}return XB(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a(Mee,"lmdbDeleteRecords");function XB(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(XB,"createDeleteResponse")});var FI=M((QPe,eF)=>{"use strict";var Uee=(H(),v(z)),jPe=Un();function BI(e,t){let r=Object.create(null);if(t.length===1&&Uee.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(BI,"parseRow");function xee(e,t,r,n){let s=BI(r,e);n.push(s)}a(xee,"searchAll");function Bee(e,t,r,n){let s=BI(r,e);n[t]=s}a(Bee,"searchAllToMap");function Fee(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Fee,"iterateDBI");function _l(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(_l,"pushResults");function kee(e,t,r,n,s,i){t.toString().endsWith(e)&&_l(t,r,n,s,i)}a(kee,"endsWith");function Hee(e,t,r,n,s,i){t.toString().includes(e)&&_l(t,r,n,s,i)}a(Hee,"contains");function Gee(e,t,r,n,s,i){t>e&&_l(t,r,n,s,i)}a(Gee,"greaterThanCompare");function qee(e,t,r,n,s,i){t>=e&&_l(t,r,n,s,i)}a(qee,"greaterThanEqualCompare");function $ee(e,t,r,n,s,i){t<e&&_l(t,r,n,s,i)}a($ee,"lessThanCompare");function Vee(e,t,r,n,s,i){t<=e&&_l(t,r,n,s,i)}a(Vee,"lessThanEqualCompare");eF.exports={parseRow:BI,searchAll:xee,searchAllToMap:Bee,iterateDBI:Fee,endsWith:kee,contains:Hee,greaterThanCompare:Gee,greaterThanEqualCompare:qee,lessThanCompare:$ee,lessThanEqualCompare:Vee,pushResults:_l}});var od=M((tLe,aF)=>{"use strict";var Ja=Et(),XPe=J(),us=Un(),Ng=Yt(),rr=Jr().LMDB_ERRORS_ENUM,ZPe=oe(),Kee=(H(),v(z)),Cg=FI(),{parseRow:Yee}=Cg,eLe=require("lmdb"),{OVERFLOW_MARKER:tF,MAX_SEARCH_KEY_LENGTH:Wee}=Ng;function rF(e,t,r,n=!1,s=void 0,i=void 0){return gl(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(rF,"iterateFullIndex");function up(e,t,r,n,s,i=!1,o=void 0,c=void 0,l=!1,u=!1){return gl(e,t,r,(d,f,m,p)=>{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 p===r?(S.values=!1,f.getRange(S).map(y=>({value:y}))):f.getRange(S)})}a(up,"iterateRangeBetween");function gl(e,t,r,n){let s=e.database||e,i=Ja.openDBI(s,r);i[Ng.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ja.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(gl,"setupTransaction");function nF(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(tF)){if(!s)if(r)s=Ja.openDBI(e,r);else{let l=Ja.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Ja.openDBI(e,l[u]),!s[Ng.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(nF,"getOverflowCheck");function zee(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return gl(e,t,t,(o,c,l)=>(Og(r),r=dp(l,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>Yee(u.value,r))))}a(zee,"searchAll");function jee(e,t,r,n=!1,s=void 0,i=void 0){if(us.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);Og(r),r=dp(e.database||e,r);let o=new Map;for(let{key:c,value:l}of rF(e,t,t,n,s,i))o.set(c,Cg.parseRow(l,r));return o}a(jee,"searchAllToMap");function Qee(e,t,r=!1,n=void 0,s=void 0){if(us.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=rF(e,void 0,t,r,n,s),c=o.transaction,l=nF(c.database,c,void 0,t);for(let{key:u,value:d}of o){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}a(Qee,"iterateDBI");function Jee(e,t){if(us.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);return Ja.statDBI(e,t).entryCount}a(Jee,"countAll");function Xee(e,t,r,n,s=!1,i=void 0,o=void 0){return Xa(e,r,n),gl(e,t,r,(c,l,u,d)=>(n=us.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(f=>({key:n,value:f}))))}a(Xee,"equals");function Zee(e,t,r){return Xa(e,t,r),Ja.openDBI(e,t).getValuesCount(r)}a(Zee,"count");function ete(e,t,r,n,s=!1,i=void 0,o=void 0){return Xa(e,r,n),gl(e,null,r,(c,l)=>{n=us.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(o)?o++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:o}).map(m=>{let{key:p}=m;if(p!==f){if(p.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}a(ete,"startsWith");function tte(e,t,r,n,s=!1,i=void 0,o=void 0){return sF(e,t,r,n,s,i,o,!0)}a(tte,"endsWith");function sF(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return Xa(e,r,n),gl(e,null,r,(l,u,d,f)=>{let m=nF(d,l,f,r);return o=Number.isInteger(o)?o:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(p=>{let h=p.toString();return h.endsWith(tF)?u.getValues(p,{transaction:l}).map(E=>{let g=m(p,E);if(c?g.endsWith(n):g.includes(n))return{key:g,value:E}}).filter(E=>E):(c?h.endsWith(n):h.includes(n))?u[Ng.DBI_DEFINITION_NAME].is_hash_attribute?{key:p,value:p}:u.getValues(p,{transaction:l}).map(E=>({key:p,value:E})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(sF,"contains");function rte(e,t,r,n,s=!1,i=void 0,o=void 0){Xa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),up(e,t,r,n,l,s,i,o,!0,!1)}a(rte,"greaterThan");function nte(e,t,r,n,s=!1,i=void 0,o=void 0){Xa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),up(e,t,r,n,l,s,i,o,!1,!1)}a(nte,"greaterThanEqual");function ste(e,t,r,n,s=!1,i=void 0,o=void 0){Xa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),up(e,t,r,l,n,s,i,o,!1,!0)}a(ste,"lessThan");function ite(e,t,r,n,s=!1,i=void 0,o=void 0){Xa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),up(e,t,r,l,n,s,i,o,!1,!1)}a(ite,"lessThanEqual");function ote(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(us.validateEnv(e),r===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(rr.START_VALUE_REQUIRED);if(s===void 0)throw new Error(rr.END_VALUE_REQUIRED);if(n=us.convertKeyValueToWrite(n),s=us.convertKeyValueToWrite(s),n>s)throw new Error(rr.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return up(e,t,r,n,s,i,o,c)}a(ote,"between");function ate(e,t,r,n){us.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Og(r),r=dp(s,r),n===void 0)throw new Error(rr.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=Cg.parseRow(c,r)),o}a(ate,"searchByHash");function cte(e,t,r){us.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(cte,"checkHashExists");function lte(e,t,r,n,s=[]){return oF(e,t,r,n,s),iF(e,t,r,n,s).map(i=>i[1])}a(lte,"batchSearchByHash");function ute(e,t,r,n,s=[]){oF(e,t,r,n,s);let i=new Map;for(let[o,c]of iF(e,t,r,n,s))i.set(o,c);return i}a(ute,"batchSearchByHashToMap");function iF(e,t,r,n,s=[]){return gl(e,t,t,(i,o,c)=>{r=dp(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,Cg.parseRow(d,r)];s.push(u)}).filter(u=>u)})}a(iF,"batchHashSearch");function oF(e,t,r,n,s){if(us.validateEnv(e),t===void 0)throw new Error(rr.HASH_ATTRIBUTE_REQUIRED);if(Og(r),n==null)throw new Error(rr.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(rr.IDS_MUST_BE_ITERABLE)}a(oF,"initializeBatchSearchByHash");function Og(e){if(!Array.isArray(e))throw e===void 0?new Error(rr.FETCH_ATTRIBUTES_REQUIRED):new Error(rr.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Og,"validateFetchAttributes");function Xa(e,t,r){if(us.validateEnv(e),t===void 0)throw new Error(rr.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rr.SEARCH_VALUE_REQUIRED);if(r?.length>Wee)throw new Error(rr.SEARCH_VALUE_TOO_LARGE)}a(Xa,"validateComparisonFunctions");function dp(e,t){return t.length===1&&Kee.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ja.listDBIs(e)),t}a(dp,"setGetWholeRowAttributes");aF.exports={searchAll:zee,searchAllToMap:jee,count:Zee,countAll:Jee,equals:Xee,startsWith:ete,endsWith:tte,contains:sF,searchByHash:ate,setGetWholeRowAttributes:dp,batchSearchByHash:lte,batchSearchByHashToMap:ute,checkHashExists:cte,iterateDBI:Qee,greaterThan:rte,greaterThanEqual:nte,lessThan:ste,lessThanEqual:ite,between:ote}});var ad=M((nLe,fF)=>{var cF=require("lodash"),lF=mt(),je=require("joi"),dte=oe(),{hdbSchemaTable:fp,checkValidTable:uF,hdbTable:dF,hdbDatabase:Pg}=Qi(),{handleHDBError:fte,hdbErrors:mte}=_e(),{getDatabases:pte}=(we(),v(ft)),{HTTP_STATUS_CODES:hte}=mte,Ete=je.object({database:Pg,schema:Pg,table:dF,attribute:fp,value:je.any().required(),get_attributes:je.array().min(1).items(je.alternatives(fp,je.object())).optional(),desc:je.bool(),limit:je.number().integer().min(1),offset:je.number().integer().min(0)}),_te=je.object({database:Pg,schema:Pg,table:dF,operator:je.string().valid("and","or").default("and").lowercase(),offset:je.number().integer().min(0),limit:je.number().integer().min(1),get_attributes:je.array().min(1).items(je.alternatives(fp,je.object())).optional(),sort:je.object({attribute:je.alternatives(fp,je.array().min(1)),descending:je.bool().optional()}).optional(),conditions:je.array().min(1).items(je.alternatives(je.object({operator:je.string().valid("and","or").default("and").lowercase(),conditions:je.array()}),je.object({attribute:je.alternatives(fp,je.array().min(1)),comparator:je.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),value:je.when("comparator",{switch:[{is:"equals",then:je.any()},{is:"between",then:je.array().items(je.alternatives([je.string(),je.number()])).length(2)}],otherwise:je.alternatives(je.string(),je.number())}).required()}))).required()});fF.exports=function(e,t){let r=null;switch(t){case"value":r=lF.validateBySchema(e,Ete);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(uF("database",e.schema)),i(uF("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=lF.validateBySchema(e,_te);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=dte.checkGlobalSchemaTable(e.schema,e.table);if(s)return fte(new Error,s,hte.NOT_FOUND);let o=pte()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.attribute);let l=a(d=>{for(let f of d.conditions)f.conditions?l(f):c.push(f.attribute)},"addConditions");t==="conditions"&&l(e);let u=cF.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!cF.some(o,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var kI=M((iLe,mF)=>{"use strict";var gte=Et(),Ste=ad(),{getSchemaPath:Tte}=Rt();mF.exports=yte;function yte(e){let t=Ste(e,"hashes");if(t)throw t;let r=Tte(e.schema,e.table);return gte.openEnvironment(r,e.table)}a(yte,"initialize")});var HI=M((aLe,pF)=>{"use strict";var Rte=od(),bte=kI();pF.exports=Ate;async function Ate(e){let t=await bte(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Rte.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Ate,"lmdbGetDataByHash")});var cd=M((lLe,hF)=>{"use strict";var GI=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};hF.exports=GI});var _F=M((fLe,EF)=>{"use strict";var dLe=cd(),Ite=od(),wte=kI();EF.exports=Nte;async function Nte(e){let t=await wte(e),r=global.hdb_schema[e.schema][e.table];return Ite.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Nte,"lmdbSearchByHash")});var mi=M((pLe,gF)=>{"use strict";var qI=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.attribute=n,this.value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};gF.exports=qI});var Lg=M((ELe,AF)=>{"use strict";var En=od(),Cte=Et(),Ote=oe(),Qe=Yt(),Sl=(H(),v(z)),Pte=Xi(),SF=Jr().LMDB_ERRORS_ENUM,{getSchemaPath:Lte}=Rt(),zo=Sl.SEARCH_WILDCARDS;async function Dte(e,t,r){let n;e.schema===Sl.SYSTEM_SCHEMA_NAME?n=Pte[e.table]:n=global.hdb_schema[e.schema][e.table];let s=bF(e,n.hash_attribute,r,t);return yF(e,s,n.hash_attribute,r)}a(Dte,"prepSearch");async function yF(e,t,r,n){let s=Lte(e.schema,e.table),i=await Cte.openEnvironment(s,e.table),o=RF(i,e,t,r),c=o.transaction||i;if([Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Qe.SEARCH_TYPES.SEARCH_ALL,Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(vte(e,r)===!1){let d=e.attribute;if(d===r)return n?TF(o,()=>!0):o.map(m=>({[r]:m.key}));let f=a(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?TF(o,f):o.map(f)}let u=e.attribute===r?o.map(d=>d.key):o.map(d=>d.value);return n===!0?En.batchSearchByHashToMap(c,r,e.get_attributes,u):En.batchSearchByHash(c,r,e.get_attributes,u)}a(yF,"executeSearch");function RF(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 Qe.SEARCH_TYPES.EQUALS:s=En.equals(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.CONTAINS:s=En.contains(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.ENDS_WITH:case Qe.SEARCH_TYPES._ENDS_WITH:s=En.endsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.STARTS_WITH:case Qe.SEARCH_TYPES._STARTS_WITH:s=En.startsWith(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return En.batchSearchByHash(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return En.batchSearchByHashToMap(e,t.attribute,t.get_attributes,[t.value]);case Qe.SEARCH_TYPES.SEARCH_ALL:return En.searchAll(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return En.searchAllToMap(e,n,t.get_attributes,o,c,l);case Qe.SEARCH_TYPES.BETWEEN:s=En.between(e,i,t.attribute,t.value,t.end_value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN:case Qe.SEARCH_TYPES._GREATER_THAN:s=En.greaterThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.GREATER_THAN_EQUAL:case Qe.SEARCH_TYPES._GREATER_THAN_EQUAL:s=En.greaterThanEqual(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN:case Qe.SEARCH_TYPES._LESS_THAN:s=En.lessThan(e,i,t.attribute,t.value,o,c,l);break;case Qe.SEARCH_TYPES.LESS_THAN_EQUAL:case Qe.SEARCH_TYPES._LESS_THAN_EQUAL:s=En.lessThanEqual(e,i,t.attribute,t.value,o,c,l);break;default:return Object.create(null)}return s}a(RF,"searchByType");function TF(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(TF,"createMapFromIterable");function vte(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(vte,"checkToFetchMore");function bF(e,t,r,n){if(Ote.isEmpty(n)){let s=e.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.attribute===t&&(c=!0),zo.indexOf(s)>-1)return r===!0?Qe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Qe.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(zo[0])<0&&s.indexOf(zo[1])<0)return c===!0?r===!0?Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Qe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Qe.SEARCH_TYPES.EQUALS;if(zo.indexOf(i)>=0&&zo.indexOf(o)>=0)return e.value=e.value.slice(1,-1),Qe.SEARCH_TYPES.CONTAINS;if(zo.indexOf(i)>=0)return e.value=e.value.substr(1),Qe.SEARCH_TYPES.ENDS_WITH;if(zo.indexOf(o)>=0)return e.value=e.value.slice(0,-1),Qe.SEARCH_TYPES.STARTS_WITH;if(s.includes(zo[0])||s.includes(zo[1]))return Qe.SEARCH_TYPES.EQUALS;throw new Error(SF.UNKNOWN_SEARCH_TYPE)}else switch(n){case Sl.VALUE_SEARCH_COMPARATORS.BETWEEN:return Qe.SEARCH_TYPES.BETWEEN;case Sl.VALUE_SEARCH_COMPARATORS.GREATER:return Qe.SEARCH_TYPES.GREATER_THAN;case Sl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Qe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Sl.VALUE_SEARCH_COMPARATORS.LESS:return Qe.SEARCH_TYPES.LESS_THAN;case Sl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Qe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(SF.UNKNOWN_SEARCH_TYPE)}}a(bF,"createSearchTypeFromSearchObject");AF.exports={executeSearch:yF,createSearchTypeFromSearchObject:bF,prepSearch:Dte,searchByType:RF}});var wF=M((SLe,IF)=>{"use strict";var gLe=mi(),Mte=ad(),Ute=oe(),xte=(H(),v(z)),Bte=Lg();IF.exports=Fte;function Fte(e,t){if(!Ute.isEmpty(t)&&xte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=Mte(e,"value");if(n)throw n;return Bte.prepSearch(e,t,!0)}a(Fte,"lmdbGetDataByValue")});var mp=M((RLe,NF)=>{"use strict";var yLe=mi(),kte=ad(),Hte=oe(),Gte=(H(),v(z)),qte=Lg();NF.exports=$te;async function $te(e,t){if(!Hte.isEmpty(t)&&Gte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=kte(e,"value");if(n)throw n;return qte.prepSearch(e,t,!1)}a($te,"lmdbSearchByValue")});var OF=M((ILe,CF)=>{"use strict";var ALe=Yt(),$I=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}},VI=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.attribute=t,this.comparator=r,this.value=n}},KI=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};CF.exports={SearchByConditionsObject:$I,SearchCondition:VI,SortAttribute:KI}});var MF=M((PLe,vF)=>{"use strict";var{SearchByConditionsObject:NLe,SearchCondition:CLe}=OF(),Vte=mi(),Kte=ad(),YI=od(),Dg=Yt(),{Resource:OLe}=(Vo(),v(C0)),DF=Lg(),Yte=FI(),Wte=require("lodash"),{getSchemaPath:zte}=Rt(),PF=Et(),{handleHDBError:jte,hdbErrors:Qte}=_e(),{HTTP_STATUS_CODES:Jte}=Qte,Xte=1e8;vF.exports=Zte;async function Zte(e){let t=Kte(e,"conditions");if(t)throw jte(t,t.message,Jte.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=zte(e.schema,e.table),n=await PF.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)PF.openDBI(n,u.attribute);let i=Wte.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.comparator;d===Dg.SEARCH_TYPES.EQUALS?u.estimated_count=YI.count(n,u.attribute,u.value):d===Dg.SEARCH_TYPES.CONTAINS||d===Dg.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=Xte}return u.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await LF(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(DF.filterByType),f=d.length,m=YI.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(p=>u.get(p,{transaction:o,lazy:!0})),f>0&&(l=l.filter(p=>{for(let h=0;h<f;h++)if(!d[h](p))return!1;return!0})),(e.offset||e.limit!==void 0)&&(l=l.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),l=l.map(p=>Yte.parseRow(p,m))}else{for(let f=1;f<i.length;f++){let m=i[f],p=await LF(o,e,m,s.hash_attribute);c=c.concat(p)}let u=new Set,d=e.offset||0;c=c.filter(f=>u.has(f)?!1:(u.add(f),!0)).slice(d,e.limit&&e.limit+d),l=YI.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{o.done()},l}a(Zte,"lmdbSearchByConditions");async function LF(e,t,r,n){let s=new Vte(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.comparator;return s.attribute=r.attribute,i===Dg.SEARCH_TYPES.BETWEEN?(s.value=r.value[0],s.end_value=r.value[1]):s.value=r.value,DF.searchByType(e,s,i,n).map(o=>o.value)}a(LF,"executeConditionSearch")});var pp=M((DLe,UF)=>{"use strict";var ere=(H(),v(z)).OPERATIONS_ENUM,WI=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=ere.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};UF.exports=WI});var zI=M((MLe,$F)=>{"use strict";var kF=mi(),HF=pp(),GF=mp(),qF=lp(),qn=(H(),v(z)),xF=oe(),BF=Et(),{getTransactionAuditStorePath:tre,getSchemaPath:rre}=Rt(),FF=J();$F.exports=nre;async function nre(e){try{if(xF.isEmpty(global.hdb_schema[e.schema])||xF.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await sre(e),await ire(e);let t=rre(e.schema,e.table);try{await BF.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")FF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=tre(e.schema,e.table);await BF.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")FF.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(nre,"lmdbDropTable");async function sre(e){let t=new kF(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await GF(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 HF(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await qF(s)}a(sre,"deleteAttributesFromSystem");async function ire(e){let t=new kF(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await GF(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 HF(qn.SYSTEM_SCHEMA_NAME,qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await qF(s)}catch(i){throw i}}a(ire,"dropTableFromSystem")});var KF=M((xLe,VF)=>{"use strict";var ore=require("fs-extra"),are=mi(),cre=cd(),lre=pp(),ure=zI(),dre=lp(),fre=HI(),mre=mp(),jo=(H(),v(z)),{getSchemaPath:pre}=Rt(),{handleHDBError:hre,hdbErrors:Ere}=_e(),{HDB_ERROR_MSGS:_re,HTTP_STATUS_CODES:gre}=Ere;VF.exports=Sre;async function Sre(e){let t;try{t=await Tre(e.schema);let r=new are(jo.SYSTEM_SCHEMA_NAME,jo.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,jo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[jo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await mre(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await ure(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new lre(jo.SYSTEM_SCHEMA_NAME,jo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await dre(s);let i=pre(t);await ore.remove(i)}catch(r){throw r}}a(Sre,"lmdbDropSchema");async function Tre(e){let t=new cre(jo.SYSTEM_SCHEMA_NAME,jo.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[jo.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await fre(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw hre(new Error,_re.SCHEMA_NOT_FOUND(e),gre.NOT_FOUND,void 0,void 0,!0);return n}a(Tre,"validateDropSchema")});var hp=M((FLe,YF)=>{"use strict";var jI=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};YF.exports=jI});var JI=M((GLe,WF)=>{"use strict";var yre=require("fs-extra"),vg=Et(),{getTransactionAuditStorePath:Rre}=Rt(),QI=Yt(),HLe=hp();WF.exports=bre;async function bre(e){let t;try{let r=Rre(e.schema,e.table);await yre.mkdirp(r),t=await vg.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{vg.createDBI(t,QI.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),vg.createDBI(t,QI.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),vg.createDBI(t,QI.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(bre,"createTransactionsAuditEnvironment")});var QF=M((VLe,jF)=>{"use strict";var XI=(H(),v(z)),zF=Et(),Are=hl(),{getSystemSchemaPath:Ire,getSchemaPath:wre}=Rt(),$Le=Xi(),Nre=Ag(),ZI=bg(),Cre=J(),Ore=JI();jF.exports=Pre;async function Pre(e,t){let r=wre(t.schema,t.table),n=new ZI(t.schema,t.table,XI.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new ZI(t.schema,t.table,XI.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new ZI(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await zF.createEnvironment(r,t.table),e!==void 0){let o=await zF.openEnvironment(Ire(),XI.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Are.insertRecords(o,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await ew(n),await ew(s),await ew(i)}await Ore(t)}catch(o){throw o}}a(Pre,"lmdbCreateTable");async function ew(e){try{await Nre(e)}catch(t){Cre.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(ew,"createAttribute")});var XF=M((YLe,JF)=>{"use strict";var Lre=op(),Dre=Cm(),vre=Ig(),Ep=(H(),v(z)),Mre=hl().updateRecords,Ure=Et(),{getSchemaPath:xre}=Rt(),Bre=ap(),Fre=J();JF.exports=kre;async function kre(e){try{let{schemaTable:t,attributes:r}=Lre(e);Dre(e,r,t.hash_attribute),e.schema!==Ep.SYSTEM_SCHEMA_NAME&&(r.includes(Ep.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ep.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ep.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ep.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await vre(e.hdb_auth_header,t,r),s=xre(e.schema,e.table),i=await Ure.openEnvironment(s,e.table),o=await Mre(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Bre(e,o)}catch(c){Fre.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(kre,"lmdbUpdateRecords")});var ek=M((zLe,ZF)=>{"use strict";var Hre=(H(),v(z)).OPERATIONS_ENUM,tw=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Hre.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};ZF.exports=tw});var rk=M((JLe,tk)=>{"use strict";var QLe=ek(),Gre=op(),qre=Cm(),$re=Ig(),_p=(H(),v(z)),Vre=hl().upsertRecords,Kre=Et(),{getSchemaPath:Yre}=Rt(),Wre=ap(),zre=J(),{handleHDBError:jre,hdbErrors:Qre}=_e();tk.exports=Jre;async function Jre(e){let t;try{t=Gre(e)}catch(l){throw jre(l,l.message,Qre.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;qre(e,n,r.hash_attribute),e.schema!==_p.SYSTEM_SCHEMA_NAME&&(n.includes(_p.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(_p.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(_p.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(_p.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await $re(e.hdb_auth_header,r,n),i=Yre(e.schema,e.table),o=await Kre.openEnvironment(i,e.table),c=await Vre(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await Wre(e,c)}catch(l){zre.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}a(Jre,"lmdbUpsertRecords")});var sk=M((ZLe,nk)=>{"use strict";var rw=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};nk.exports=rw});var ok=M((tDe,ik)=>{"use strict";var nw=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}};ik.exports=nw});var lk=M((sDe,ck)=>{"use strict";var sw=Et(),{getTransactionAuditStorePath:Xre}=Rt(),nDe=sk(),gp=Yt(),Zre=oe(),ak=ok(),ene=require("util").promisify,tne=ene(setTimeout),rne=1e4,nne=100;ck.exports=sne;async function sne(e){let t=Xre(e.schema,e.table),r=await sw.openEnvironment(t,e.table,!0),n=sw.listDBIs(r);sw.initializeDBIs(r,gp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new ak;do s=await ine(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 tne(nne);while(s.transactions_deleted>0);return i}a(sne,"deleteAuditLogsBefore");async function ine(e,t){let r=new ak;try{let n=e.dbis[gp.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[gp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Zre.isEmpty(c)||(s=e.dbis[gp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<o.hash_values.length;l++)s=e.dbis[gp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>rne)break}return await s,r}catch(n){throw n}}a(ine,"deleteTransactions")});var dk=M((oDe,uk)=>{"use strict";var iw=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};uk.exports=iw});var mk=M((lDe,fk)=>{"use strict";var one=mi(),ane=pp(),cDe=dk(),Zi=(H(),v(z)),cne=oe(),ow=Et(),lne=Xi(),une=mp(),dne=lp(),{getSchemaPath:fne}=Rt();fk.exports=mne;async function mne(e,t=!0){let r;e.schema===Zi.SYSTEM_SCHEMA_NAME?r=lne[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await hne(e),s=fne(e.schema,e.table),i=await ow.openEnvironment(s,e.table);return t===!0&&await pne(e,i,r.hash_attribute),ow.dropDBI(i,e.attribute),n}a(mne,"lmdbDropAttribute");async function pne(e,t,r){let n=ow.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(pne,"removeAttributeFromAllObjects");async function hne(e){let t=new one(Zi.SYSTEM_SCHEMA_NAME,Zi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await une(t)).filter(o=>o[Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(cne.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(o=>o[Zi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new ane(Zi.SYSTEM_SCHEMA_NAME,Zi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return dne(i)}a(hne,"dropAttributeFromSystem")});var Sk=M((fDe,gk)=>{"use strict";var aw=Et(),ld=Yt(),dDe=Un(),cw=(H(),v(z)),pk=oe(),{getTransactionAuditStorePath:Ene}=Rt(),_ne=od(),Mg=nd(),gne=J();gk.exports=Sne;async function Sne(e){let t=Ene(e.schema,e.table),r=await aw.openEnvironment(t,e.table,!0),n=aw.listDBIs(r);aw.initializeDBIs(r,ld.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return hk(r,e.search_values);case cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,yne(r,e.search_values,s);case cw.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Tne(r,e.search_values);default:return hk(r)}}a(Sne,"readAuditLog");function hk(e,t=[0,Date.now()]){pk.isEmpty(t[0])&&(t[0]=0),pk.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ld.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 Mg,s))}a(hk,"searchTransactionsByTimestamp");function Tne(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[ld.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,_k(e,i))}return Object.fromEntries(r)}a(Tne,"searchTransactionsByUsername");function yne(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=_ne.equals(e,ld.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ld.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,u);for(let{value:f}of d){let m=Number(f);n.has(m)?n.get(m).push(u.toString()):n.set(m,[u.toString()])}}let s=Array.from(n.keys()),i=_k(e,s),o=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);Ek(l,"records",r,d,o),Ek(l,"original_records",r,d,o)}return Object.fromEntries(o)}a(yne,"searchTransactionsByHashValues");function Ek(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 f=new Mg(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new Mg(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}a(Ek,"loopRecords");function _k(e,t){let r=[];try{let n=e.dbis[ld.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 Mg,i);r.push(o)}}catch(i){gne.warn(i)}return r}catch(n){throw n}}a(_k,"batchSearchTransactions")});var yk=M((EDe,Tk)=>{"use strict";var{getSchemaPath:pDe}=Rt(),hDe=Et(),{database:Rne}=(we(),v(ft));Tk.exports={writeTransaction:bne};async function bne(e,t,r){return Rne({database:e,table:t}).transaction(r)}a(bne,"writeTransaction")});var Ik=M((gDe,Ak)=>{"use strict";var{getSchemaPath:Rk}=Rt(),bk=Et();Ak.exports={flush:Ane,resetReadTxn:Ine};async function Ane(e,t){return(await bk.openEnvironment(Rk(e,t),t.toString())).flushed}a(Ane,"flush");async function Ine(e,t){try{(await bk.openEnvironment(Rk(e,t),t.toString())).resetReadTxn()}catch{}}a(Ine,"resetReadTxn")});var Ok=M((TDe,Ck)=>{"use strict";var{Readable:wne}=require("stream"),{getDatabases:Nne}=(we(),v(ft)),{readSync:Cne,openSync:One,createReadStream:wk}=require("fs"),{open:Pne}=require("lmdb"),{OpenDBIObject:Nk}=tp(),Lne=rp(),{AUDIT_STORE_OPTIONS:Dne}=($i(),v(vx)),{INTERNAL_DBIS_NAME:vne,AUDIT_STORE_NAME:Mne}=Yt();Ck.exports=xne;var lw=32768,Une=100;async function xne(e){let t=e.database||e.schema||"data",r=Nne()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let u=r[s[0]];if(!u)throw new Error(`Can not find table ${s[0]}`);let d=u.dbisDB,f=Pne({noSync:!0,maxDbs:Lne.MAX_DBS}),m,p=f.openDB(vne,new Nk(!1)),h=d.useReadTransaction(),E=0,g=a(async function(S,y){y.encoding="binary",y.encoder=void 0;let N=f.openDB(S,y),I=d.openDB(S,y);for(let{key:$,version:ee,value:G}of I.getRange({start:null,transaction:h,versions:I.useVersions}))m=N.put($,G,ee),E++%Une===0&&(await new Promise(k=>setTimeout(k,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:S,value:y}of d.getRange({transaction:h,start:!1}))if(s.some(N=>S.startsWith?.(N+"/"))){p.put(S,y);let[,N]=S.split("/"),I=!N,$=new Nk(!I,I);await g(S,$)}e.include_audit&&await g(Mne,{...Dne}),await m;let R=wk(f.path);return R.headers=l(),R.on("close",()=>{h.done(),f.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=One(o.path);return o.transaction(()=>{let u=Buffer.alloc(lw);Cne(c,u,0,lw),o.resetReadTxn();let d=o.useReadTransaction();d.renew();let f=wk(null,{fd:c,start:lw}),m=new wne.from((async function*(){yield u;for await(let p of f)d.openTimer&&(d.openTimer=0),yield p;d.done()})());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}a(xne,"getBackup")});var Dk=M((RDe,Lk)=>{"use strict";var Bne=J(),{handleHDBError:Fne}=_e(),kne=cB(),Hne=Ag(),Gne=vI(),qne=KB(),$ne=lp(),Vne=HI(),Kne=_F(),Yne=wF(),Wne=mp(),zne=MF(),jne=KF(),Qne=QF(),Jne=XF(),Xne=rk(),Zne=lk(),ese=zI(),tse=mk(),rse=Sk(),nse=yk(),Pk=Ik(),sse=Ok(),uw=class extends kne{static{a(this,"LMDBBridge")}async searchByConditions(t){return zne(t)}async getDataByHash(t){return await Vne(t)}async searchByHash(t){return await Kne(t)}async getDataByValue(t,r){return await Yne(t,r)}async searchByValue(t){return await Wne(t)}async createSchema(t){return await qne(t)}async dropSchema(t){return await jne(t)}async createTable(t,r){return await Qne(t,r)}async dropTable(t){return await ese(t)}async createAttribute(t){return await Hne(t)}async createRecords(t){return await Gne(t)}async updateRecords(t){return await Jne(t)}async upsertRecords(t){try{return await Xne(t)}catch(r){throw Fne(r,null,null,Bne.ERR,r)}}async deleteRecords(t){return await $ne(t)}async dropAttribute(t){return await tse(t)}async deleteAuditLogsBefore(t){return await Zne(t)}async readAuditLog(t){return await rse(t)}writeTransaction(t,r,n){return nse.writeTransaction(t,r,n)}flush(t,r){return Pk.flush(t,r)}resetReadTxn(t,r){return Pk.resetReadTxn(t,r)}getBackup(t){return sse(t)}};Lk.exports=uw});function $n(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function Tp(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=a(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"ID":d=a(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(p=>typeof p=="string")||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a string, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Float":case"Number":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="number"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a number, attempt to assign ${p}`);$n(this)[u]=m},"set");break;case"Int":d=a(function(m){let p=m?.__op__?m.value:m;if(!(p>>0===p||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs((p>>0)-p)<=1)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Long":d=a(function(m){let p=m?.__op__?m.value:m;if(!(Math.round(p)===m&&Math.abs(p)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof p=="number"&&Math.abs(p)<=9007199254740992)p=Math.round(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"BigInt":d=a(function(m){let p=m?.__op__?m.value:m;if(!(typeof p=="bigint"||m==null&&l.nullable!==!1))if(typeof p=="string"||typeof p=="number")p=BigInt(p),m?.__op__?m.value=p:m=p;else throw new ds.ClientError(`${u} must be a number, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Boolean":d=a(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a boolean, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Date":d=a(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new ds.ClientError(`${u} must be a Date, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Bytes":d=a(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Blob":d=a(function(m){if(!(m instanceof Ms||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be a Blob, attempt to assign ${m}`);$n(this)[u]=m},"set");break;case"Any":case void 0:d=a(function(m){$n(this)[u]=m},"set");break;default:d=a(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new ds.ClientError(`${u} must be an object, attempt to assign ${m}`);$n(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let h=m[u];if(h?.__op__){let E=this.getRecord()?.[u];return h.update(E)}return h}let p=this.getRecord()?.[u];if(p&&typeof p=="object"){let h=dw(p,l);if(h)return m||this._setChanges(m=Object.create(null)),m[u]=h}return p},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}o("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),o("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new ds.ClientError("Can not add a property to a sealed table schema");$n(this)[l]=u}),o("deleteProperty",function(l){$n(this)[l]=void 0}),o("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let p=u[f];m=m.update(p)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||o("get",n.getProperty),n.delete||o("delete",n.deleteProperty),n.then||o("then",null);function o(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}a(o,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?Uk:Mk);break}c=l}while(c&&c!==Mk&&c!==Uk)}function xk(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(vk[t])return vk[t];let n=r.getChanges?.();if(n&&t in n)return n[t];let s=r.getRecord?.()?.[t];if(s&&typeof s=="object"){let i=dw(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function ise(e,t,r,n){if(typeof t=="string"){let s=n.getChanges?.();s||(s={},n._setChanges(s)),s[t]=r}else Object.defineProperty(n,t,{value:r,configurable:!0,writable:!0});return!0}function dw(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends yl{static{a(this,"TrackedObject")}},Tp(r,t)),new r(e)):new yl(e);case Array:let n=new xg(e.length,e);for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=dw(o,t?.elements)),n[s]=o}return n;default:return e}}function Bg(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Bg(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=e.getRecord?{...e.getRecord()}:{}),Object.assign(r,e)),r||e.getRecord?.()||e}function Rl(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Rl(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.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=tA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Rl(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)ose.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Ug(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Tl]||e.length!==t.length)return!0;for(let r=0,n=e.length;r<n;r++){let s=t[r],i=e[r];if(s&&i?.getRecord?.()===s){if(Ug(i))return!0}else return!0}}else{let r=e.getChanges?.();if(r&&!t)return!0;for(let n in r){let s=r[n];if(s&&typeof s=="object"){let i=t[n];if(i&&s.getRecord?.()===i){if(Ug(s))return!0}else return!0}else return!0}}return!1}var ds,vk,Mk,Uk,yl,ose,Tl,xg,Sp,fw=se(()=>{ds=b(_e());N_();ss();a($n,"getChanges");a(Tp,"assignTrackedAccessors");vk=Object.prototype,Mk=new Proxy({},{get:xk}),Uk=new Proxy({},{get:xk,set:ise});a(xk,"getProxiedProperty");a(ise,"setProxiedProperty");a(dw,"trackObject");yl=class{static{a(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};Tp(yl,{},!0);a(Bg,"collapseData");ose=Object.prototype.hasOwnProperty;a(Rl,"updateAndFreeze");a(Ug,"hasChanges");Tl=Symbol.for("has-array-changes"),xg=class extends Array{static{a(this,"TrackedArray")}#e;[Tl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[Tl]=!0,super.splice(...t)}push(...t){return this[Tl]=!0,super.push(...t)}pop(){return this[Tl]=!0,super.pop()}unshift(...t){return this[Tl]=!0,super.unshift(...t)}shift(){return this[Tl]=!0,super.shift()}};xg.prototype.constructor=Array;Sp=class{static{a(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var Vk={};ye(Vk,{ResourceBridge:()=>hw});function Ew({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 Bk(e,t){let r=eo(e),n=Ew(e,r);if(!r)throw new pi.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;bt(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&&Bg(d)}catch(f){d={message:(0,$k.errorToString)(f)}}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 eo(e){let t=e.database||e.schema||cse,r=ct()[t];if(!r)throw(0,pi.handleHDBError)(new Error,ase.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Fk(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*kk(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 Hk,Fg,pi,Gk,mw,pw,qk,$k,ase,cse,lse,use,hw,Kk=se(()=>{Hk=b(Dk()),Fg=b(ad()),pi=b(_e());we();Gk=b(op());H();mw=b(Wo()),pw=b(ls()),qk=b(oe());Ga();fw();$k=b(J()),{HDB_ERROR_MSGS:ase}=pi.hdbErrors,cse="data",lse=1e4,use=10,hw=class extends Hk.default{static{a(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);let r=eo(t);if(!r)throw new pi.ClientError(`Table ${t.table} not found`);t.conditions=t.conditions.map(n);function n(i){if("conditions"in i&&i.conditions)return i.conditions=i.conditions.map(n),i;{let o=i;return{attribute:o.attribute??o.search_attribute,comparator:o.comparator??o.search_type,value:o.value!==void 0?o.value:o.search_value}}}a(n,"mapCondition");let s=(0,Fg.default)(t,"conditions");if(s)throw(0,pi.handleHDBError)(s,s.message,400,void 0,void 0,!0);return r.search({conditions:t.conditions,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Ew(t,r),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let 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 pi.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}Xe({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await eo(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=eo(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:f}=r.primaryStore.getEntry(o);return i(o,d,f)}})),"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){return eo(t).dropTable()}createSchema(t){return ud({database:t.schema,table:null}),mw.signalSchemaChange(new pw.SchemaEventMsg(process.pid,V.CREATE_SCHEMA,t.schema))}async dropSchema(t){await _w(t.schema),mw.signalSchemaChange(new pw.SchemaEventMsg(process.pid,V.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,this.upsertRecords(t)}async upsertRecords(t){let{schemaTable:r,attributes:n}=(0,Gk.default)(t),s,i=ct()[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),bt(o,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,o);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=Bg(m));for(let p in d)if(Object.prototype.hasOwnProperty.call(d,p)){let h=d[p];if(typeof h=="function")try{let E=h([[m]]);Array.isArray(E)&&(h=E[0].func_val,d[p]=h)}catch(E){throw E.message+="Trying to set key "+p+" on object"+JSON.stringify(d),E}}if(m)for(let p in m)Object.prototype.hasOwnProperty.call(d,p)||(d[p]=m[p]);await(f==null?i.create(d,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=ct()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),bt(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 Fk(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=ct()[t.schema][t.table];if(!r.createdTimeProperty)throw new pi.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:u_.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,qk.asyncSetTimeout)(use),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%lse===0&&await u();return l.length>0&&await u(),s?Fk(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,Fg.default)(t,"hashes");if(r)throw r;return Bk(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of Bk(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&kb[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.search_attribute!==void 0&&(t.attribute=t.search_attribute),t.search_value!==void 0&&(t.value=t.search_value);let n=(0,Fg.default)(t,"value");if(n)throw n;let s=eo(t);if(!s)throw new pi.ClientError(`Table ${t.table} not found`);let i=t.value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===u_.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.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:Ew(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=eo(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){eo({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return eo(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=eo(t),n={};switch(t.search_type){case d_.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let o=i.operation??i.type;return o==="put"&&(o="upsert"),{operation:o,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case d_.USERNAME:{let s=t.search_values;for await(let i of kk(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return kk(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};a(Ew,"getSelect");a(Bk,"getRecords");a(eo,"getTable");a(Fk,"createDeleteResponse");a(kk,"groupRecordsInHistory")});var fs=M((vDe,Yk)=>{"use strict";var{ResourceBridge:dse}=(Kk(),v(Vk)),fse=me();fse.initSync();var kg;function mse(){return kg||(kg=new dse,kg)}a(mse,"getBridge");Yk.exports=mse()});var to=M((UDe,jk)=>{var pse=Xi(),{promisify:hse}=require("util"),{getDatabases:zk}=(we(),v(ft));jk.exports={setSchemaDataToGlobal:Wk,getTableSchema:Ese,getSystemSchema:_se,setSchemaDataToGlobalAsync:hse(Wk)};function Wk(e){global.hdb_schema=zk(),e&&e()}a(Wk,"setSchemaDataToGlobal");function Ese(e,t,r){let n=zk()[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(Ese,"getTableSchema");function _se(){return pse}a(_se,"getSystemSchema")});var Vn=M((BDe,Zk)=>{"use strict";var Gg=hI(),nn=oe(),gse=require("util"),qg=fs(),Sse=to(),Qk=J(),{handleHDBError:bl,hdbErrors:Tse}=_e(),{HTTP_STATUS_CODES:Al}=Tse,yse=gse.promisify(Sse.getTableSchema),Rse="updated",Jk="inserted",Xk="upserted";Zk.exports={insert:Ase,update:Ise,upsert:wse,validation:bse,flush:Nse};async function bse(e){if(nn.isEmpty(e))throw new Error("invalid update parameters defined.");if(nn.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(nn.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await yse(e.schema,e.table),r=Gg(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&&nn.isEmptyOrZeroLength(c[n]))throw Qk.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(!nn.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw Qk.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!nn.isEmpty(c[n])&&c[n]!==""&&s.has(nn.autoCast(c[n]))&&(c.skip=!0),s.add(nn.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(bse,"validation");async function Ase(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Gg(e);if(t)throw bl(new Error,t.message,Al.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw bl(new Error,r,Al.BAD_REQUEST);let n=await qg.createRecords(e);return Hg(Jk,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(Ase,"insertData");async function Ise(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Gg(e);if(t)throw bl(new Error,t.message,Al.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw bl(new Error,r,Al.BAD_REQUEST);let n=await qg.updateRecords(e);return nn.isEmpty(n.existing_rows)?Hg(Rse,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Hg(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(Ise,"updateData");async function wse(e){if(e.operation!=="upsert")throw bl(new Error,"invalid operation, must be upsert",Al.INTERNAL_SERVER_ERROR);let t=Gg(e);if(t)throw bl(new Error,t.message,Al.BAD_REQUEST);nn.transformReq(e);let r=nn.checkSchemaTableExist(e.schema,e.table);if(r)throw bl(new Error,r,Al.BAD_REQUEST);let n=await qg.upsertRecords(e);return Hg(Xk,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(wse,"upsertData");function Hg(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===Jk?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===Xk?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Hg,"returnObject");function Nse(e){return nn.transformReq(e),qg.flush(e.schema,e.table)}a(Nse,"flush")});var Sw=M((kDe,rH)=>{var Cse=mt(),gw=require("joi"),{hdbTable:Ose,hdbDatabase:eH}=Qi(),tH={schema:eH,database:eH,table:Ose},Pse={date:gw.date().iso().required()},Lse={timestamp:gw.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};rH.exports=function(e,t){let r=t==="timestamp"?{...tH,...Lse}:{...tH,...Pse},n=gw.object(r);return Cse.validateBySchema(e,n)}});var iH=M((HDe,sH)=>{var Dse=mt(),Tw=require("joi"),{hdbTable:vse,hdbDatabase:nH}=Qi(),Mse=Tw.object({schema:nH,database:nH,table:vse,hash_values:Tw.array().required(),ids:Tw.array()});sH.exports=function(e){return Dse.validateBySchema(e,Mse)}});var Aw=M((GDe,oH)=>{"use strict";var yw=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}},Rw=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.attribute=n,this.hash_attribute=s,this.get_attributes=i,this.value=o}},bw=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};oH.exports={InsertObject:yw,NoSQLSeachObject:Rw,DeleteResponseObject:bw}});var Nl=M(($De,dH)=>{"use strict";var cH=Sw(),Use=iH(),Il=oe(),aH=require("moment"),lH=J(),{promisify:xse,callbackify:Bse}=require("util"),wl=(H(),v(z)),Fse=to(),Iw=xse(Fse.getTableSchema),ww=fs(),{DeleteResponseObject:kse}=Aw(),{handleHDBError:Za,hdbErrors:Hse}=_e(),{HDB_ERROR_MSGS:$g,HTTP_STATUS_CODES:ec}=Hse,Gse="records successfully deleted",qse=Bse(uH);dH.exports={delete:qse,deleteRecord:uH,deleteFilesBefore:$se,deleteAuditLogsBefore:Vse};async function $se(e){let t=cH(e,"date");if(t)throw Za(t,t.message,ec.BAD_REQUEST,void 0,void 0,!0);if(Il.transformReq(e),!aH(e.date,aH.ISO_8601).isValid())throw Za(new Error,$g.INVALID_DATE,ec.BAD_REQUEST,wl.LOG_LEVELS.ERROR,$g.INVALID_DATE,!0);let n=Il.checkSchemaTableExist(e.schema,e.table);if(n)throw Za(new Error,n,ec.NOT_FOUND,wl.LOG_LEVELS.ERROR,n,!0);let s=await ww.deleteRecordsBefore(e);if(await Iw(e.schema,e.table),lH.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a($se,"deleteFilesBefore");async function Vse(e){let t=cH(e,"timestamp");if(t)throw Za(t,t.message,ec.BAD_REQUEST,void 0,void 0,!0);if(Il.transformReq(e),isNaN(e.timestamp))throw Za(new Error,$g.INVALID_VALUE("Timestamp"),ec.BAD_REQUEST,wl.LOG_LEVELS.ERROR,$g.INVALID_VALUE("Timestamp"),!0);let r=Il.checkSchemaTableExist(e.schema,e.table);if(r)throw Za(new Error,r,ec.NOT_FOUND,wl.LOG_LEVELS.ERROR,r,!0);let n=await ww.deleteAuditLogsBefore(e);return await Iw(e.schema,e.table),lH.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(Vse,"deleteAuditLogsBefore");async function uH(e){e.ids&&(e.hash_values=e.ids);let t=Use(e);if(t)throw Za(t,t.message,ec.BAD_REQUEST,void 0,void 0,!0);Il.transformReq(e);let r=Il.checkSchemaTableExist(e.schema,e.table);if(r)throw Za(new Error,r,ec.NOT_FOUND,wl.LOG_LEVELS.ERROR,r,!0);try{await Iw(e.schema,e.table);let n=await ww.deleteRecords(e);return Il.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Gse}`),n}catch(n){if(n.message===wl.SEARCH_NOT_FOUND_MESSAGE){let s=new kse;return s.message=wl.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(uH,"deleteRecord")});var Lw={};ye(Lw,{HASH_FUNCTION:()=>$r,hash:()=>Ow,validate:()=>Pw});function Nw(e=Rp){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(yp.randomBytes(e)).map(r=>t[r%t.length]).join("")}function Ow(e,t=$r[mH?.toUpperCase()]??$r.SHA256){return Cw[t](e)}function Pw(e,t,r=$r[mH?.toUpperCase()]??$r.SHA256){return e?Kse[r](e,t):!1}var yp,dd,fH,mH,Rp,pH,$r,Cw,Kse,Dw=se(()=>{yp=b(require("node:crypto")),dd=b(require("argon2")),fH=b(me());H();mH=(0,fH.get)(F.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Rp=16,pH=9,$r={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};a(Nw,"generateSalt");Cw={[$r.MD5]:(e,t=void 0)=>{t=t??Nw(pH);let r=yp.createHash($r.MD5).update(e+t).digest("hex");return t+r},[$r.SHA256]:(e,t=void 0)=>{t=t??Nw(Rp);let r=yp.createHash($r.SHA256).update(e+t).digest("hex");return t+r},[$r.ARGON2ID]:async e=>{let t=Nw(Rp),r=await dd.hash(e,{type:dd.argon2id,salt:Buffer.from(t)});return t+r}},Kse={[$r.MD5]:(e,t)=>{let r=e.slice(0,pH);return e===Cw[$r.MD5](t,r)},[$r.SHA256]:(e,t)=>{let r=e.slice(0,Rp);return e===Cw[$r.SHA256](t,r)},[$r.ARGON2ID]:async(e,t)=>await dd.verify(e.slice(Rp),t)};a(Ow,"hash");a(Pw,"validate")});var EH=M((WDe,hH)=>{var vw=mt(),_n={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 Yse(e){return _n.password.presence=!0,_n.username.presence=!0,_n.role.presence=!0,_n.active.presence=!0,vw.validateObject(e,_n)}a(Yse,"addUserValidation");function Wse(e){return _n.password.presence=!1,_n.username.presence=!0,_n.role.presence=!1,_n.active.presence=!1,vw.validateObject(e,_n)}a(Wse,"alterUserValidation");function zse(e){return _n.password.presence=!1,_n.username.presence=!0,_n.role.presence=!1,_n.active.presence=!1,vw.validateObject(e,_n)}a(zse,"dropUserValidation");hH.exports={addUserValidation:Yse,alterUserValidation:Wse,dropUserValidation:zse}});var OH=M((QDe,CH)=>{"use strict";var Mw=require("recursive-iterator"),jse=require("alasql"),Uw=require("clone"),_H=oe(),{handleHDBError:gH,hdbErrors:Qse}=_e(),{HDB_ERROR_MSGS:SH,HTTP_STATUS_CODES:TH}=Qse,{getDatabases:Jse}=(we(),v(ft)),Xse=["DISTINCT_ARRAY"],yH=Symbol("validateTables"),xw=Symbol("validateTable"),jDe=Symbol("getAllColumns"),RH=Symbol("validateAllColumns"),Vg=Symbol("findColumn"),bH=Symbol("validateOrderBy"),bp=Symbol("validateSegment"),Bw=Symbol("validateColumn"),AH=Symbol("setColumnsForTable"),IH=Symbol("checkColumnsForAsterisk"),wH=Symbol("validateGroupBy"),NH=Symbol("hasColumns"),Fw=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[yH](),this[IH](),this[RH]()}[yH](){if(this[NH]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xw](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xw](t.table)})}}[NH](){let t=!1,r=new Mw(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[xw](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Jse();if(!r[t.databaseid])throw gH(new Error,SH.SCHEMA_NOT_FOUND(t.databaseid),TH.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw gH(new Error,SH.TABLE_NOT_FOUND(t.databaseid,t.tableid),TH.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=Uw(s);i.table=Uw(t),this.attributes.push(i)})}[Vg](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)}[IH](){let t=new Mw(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[AH](r.tableid)}[AH](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new jse.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[RH](){this[bp](this.statement.columns,!1),this[bp](this.statement.joins,!1),this[bp](this.statement.where,!1),this[wH](this.statement.group,!1),this[bp](this.statement.order,!0)}[bp](t,r){if(!t)return;let n=new Mw(t),s=[];for(let{node:i,path:o}of n)!_H.isEmpty(i)&&!_H.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[bH](i):s.push(this[Bw](i)));return s}[wH](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&Xse.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=Uw(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[Vg](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[Vg](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((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 '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[bH](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[Bw](t)}[Bw](t){let r=this[Vg](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]}};CH.exports=Fw});var vH=M((XDe,DH)=>{"use strict";var PH=require("lodash"),Ap=require("mathjs"),Zse=require("jsonata"),LH=oe();DH.exports={distinct_array:a(e=>Array.isArray(e)&&e.length>1?PH.uniqWith(e,PH.isEqual):e,"distinct_array"),searchJSON:eie,mad:Ip.bind(null,Ap.mad),mean:Ip.bind(null,Ap.mean),mode:Ip.bind(null,Ap.mode),prod:Ip.bind(null,Ap.prod),median:Ip.bind(null,Ap.median)};function Ip(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(Ip,"aggregateFunction");function eie(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(LH.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),LH.isEmpty(this.__ala__.res[r])){let n=Zse(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(eie,"searchJSON")});var UH=M((eve,MH)=>{"use strict";var ur=require("moment"),kw="YYYY-MM-DDTHH:mm:ss.SSSZZ";ur.suppressDeprecationWarnings=!0;MH.exports={current_date:a(()=>ur().utc().format("YYYY-MM-DD"),"current_date"),current_time:a(()=>ur().utc().format("HH:mm:ss.SSS"),"current_time"),extract:a((e,t)=>{switch(t.toLowerCase()){case"year":return ur(e).utc().format("YYYY");case"month":return ur(e).utc().format("MM");case"day":return ur(e).utc().format("DD");case"hour":return ur(e).utc().format("HH");case"minute":return ur(e).utc().format("mm");case"second":return ur(e).utc().format("ss");case"millisecond":return ur(e).utc().format("SSS");default:break}},"extract"),date:a(e=>ur(e).utc().format(kw),"date"),date_format:a((e,t)=>ur(e).utc().format(t),"date_format"),date_add:a((e,t,r)=>ur(e).utc().add(t,r).valueOf(),"date_add"),date_sub:a((e,t,r)=>ur(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:a((e,t,r)=>{let n=ur(e).utc(),s=ur(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:a(()=>ur().utc().valueOf(),"now"),get_server_time:a(()=>ur().format(kw),"get_server_time"),offset_utc:a((e,t)=>ur(e).utc().utcOffset(t).format(kw),"offset_utc")}});var kH=M((rve,FH)=>{"use strict";var tie=require("@turf/area"),rie=require("@turf/length"),nie=require("@turf/circle"),sie=require("@turf/difference"),iie=require("@turf/distance"),oie=require("@turf/boolean-contains"),aie=require("@turf/boolean-equal"),cie=require("@turf/boolean-disjoint"),lie=require("@turf/helpers"),xH=(H(),v(z)),Ze=oe(),Qo=J();FH.exports={geoArea:uie,geoLength:die,geoCircle:fie,geoDifference:mie,geoDistance:BH,geoNear:pie,geoContains:hie,geoEqual:Eie,geoCrosses:_ie,geoConvert:gie};function uie(e){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return tie.default(e)}catch(t){return Qo.trace(t,e),NaN}}a(uie,"geoArea");function die(e,t){if(Ze.isEmpty(e))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return rie.default(e,{units:t||"kilometers"})}catch(r){return Qo.trace(r,e),NaN}}a(die,"geoLength");function fie(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e));try{return nie.default(e,t,{units:r||"kilometers"})}catch(n){return Qo.trace(n,e,t),NaN}}a(fie,"geoCircle");function mie(e,t){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return sie(e,t)}catch(r){return Qo.trace(r,e,t),NaN}}a(mie,"geoDifference");function BH(e,t,r){if(Ze.isEmpty(e))return NaN;if(Ze.isEmpty(t))return NaN;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return iie.default(e,t,{units:r||"kilometers"})}catch(n){return Qo.trace(n,e,t),NaN}}a(BH,"geoDistance");function pie(e,t,r,n){if(Ze.isEmpty(e)||Ze.isEmpty(t))return!1;if(Ze.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return BH(e,t,n)<=r}catch(s){return Qo.trace(s,e,t),!1}}a(pie,"geoNear");function hie(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return oie.default(e,t)}catch(r){return Qo.trace(r,e,t),!1}}a(hie,"geoContains");function Eie(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return aie.default(e,t)}catch(r){return Qo.trace(r,e,t),!1}}a(Eie,"geoEqual");function _ie(e,t){if(Ze.isEmpty(e)||Ze.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ze.autoCastJSON(e)),typeof t=="string"&&(t=Ze.autoCastJSON(t));try{return!cie.default(e,t)}catch(r){return Qo.trace(r,e,t),!1}}a(_ie,"geoCrosses");function gie(e,t,r){if(Ze.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ze.isEmpty(t))throw new Error("geo_type is required");if(Ze.isEmpty(xH.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(xH.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ze.autoCastJSON(e)),lie[t](e,r)}a(gie,"geoConvert")});var Kg=M((sve,HH)=>{var Cl=vH(),ms=UH(),ro=kH();HH.exports=e=>{e.aggr.mad=e.aggr.MAD=Cl.mad,e.aggr.mean=e.aggr.MEAN=Cl.mean,e.aggr.mode=e.aggr.MODE=Cl.mode,e.aggr.prod=e.aggr.PROD=Cl.prod,e.aggr.median=e.aggr.MEDIAN=Cl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Cl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Cl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ms.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ms.current_time,e.fn.extract=e.fn.EXTRACT=ms.extract,e.fn.date=e.fn.DATE=ms.date,e.fn.date_format=e.fn.DATE_FORMAT=ms.date_format,e.fn.date_add=e.fn.DATE_ADD=ms.date_add,e.fn.date_sub=e.fn.DATE_SUB=ms.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ms.date_diff,e.fn.now=e.fn.NOW=ms.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ms.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ms.get_server_time,e.fn.getdate=e.fn.GETDATE=ms.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ms.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ro.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ro.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ro.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ro.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ro.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ro.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ro.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ro.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ro.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ro.geoNear}});var VH=M((ive,$H)=>{"use strict";var wp=require("lodash"),Kn=require("alasql");Kn.options.cache=!1;var Sie=Kg(),GH=require("clone"),Yg=require("recursive-iterator"),Ke=J(),it=oe(),fd=fs(),Tie=(H(),v(z)),{hdbErrors:yie}=_e(),{getDatabases:qH}=(we(),v(ft)),Rie="IS NULL",hi="There was a problem performing this search. Please check the logs and try again.";Sie(Kn);var Hw=class{static{a(this,"SQLSearch")}constructor(t,r){if(it.isEmpty(t))throw Ke.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(),it.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!it.isEmptyOrZeroLength(n))return Ke.trace("No results returned from checkEmptySQL SQLSearch method."),n}catch(n){throw Ke.error("Error thrown from checkEmptySQL in SQLSearch class method search."),Ke.error(n),new Error(hi)}try{let n=await this._getFetchAttributeValues();if(n)return n}catch(n){throw Ke.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),Ke.error(n),new Error(hi)}if(Object.keys(this.data).length===0)return Ke.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(n){throw Ke.error("Error thrown from processJoins in SQLSearch class method search."),Ke.error(n),new Error(hi)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(n){throw Ke.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),Ke.error(n),new Error(hi)}try{return t=await this._finalSQL(),t}catch(n){throw Ke.error("Error thrown from finalSQL in SQLSearch class method search."),Ke.error(n),new Error(hi)}}_getColumns(){let t=new Yg(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(GH(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=wp.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hashName=qH()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(it.isEmpty(this.statement.where)){Ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Yg(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!it.isEmpty(r)&&r.right)if(it.isNotEmptyAndHasValue(r.right.value)){let n=it.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Kn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=it.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Kn.yy.LogicValue({value:i}):n instanceof Kn.yy.StringValue&&it.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Kn.yy.NumValue({value:i}))});if(t){Ke.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Yg(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(!it.isEmpty(Tie.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(it.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(it.isEmptyOrZeroLength(r.left.columnid)||it.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,value:r.right.value})}continue}if(it.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"=":!it.isEmpty(r.right.value)||!it.isEmpty(r.left.value)?n.add(it.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(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from)&&it.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&&wp.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(it.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);it.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(it.isEmptyOrZeroLength(this.all_table_attributes)&&!it.isEmptyOrZeroLength(this.columns.columns))return t;if(it.isEmptyOrZeroLength(this.all_table_attributes)&&it.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Kn.promise(r)}catch(r){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),Ke.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(GH(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__mergedAttributes.push(r),this.data[t].__mergedAttrMap[r]=this.data[t].__mergedAttributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__mergedData[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__mergedAttrMap[n];this.data[t].__mergedData[r].splice(i,1,s)}async _getFetchAttributeValues(){if(it.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(Rie)>-1&&this.tables.forEach(s=>{let i={columnid:qH()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=wp.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].__hashName;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].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(l=!0),!it.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await fd.getDataByHash(c);for(let f of c.hash_values)d.get(f)&&!this.data[i].__mergedData[f]&&(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(hi)}else try{c.attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.value=d;let m=await fd.getDataByValue(f);for(let[p,h]of m)this.data[i].__mergedData[p]?this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]):(this.data[i].__mergedData[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,p))}))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),Ke.error(d),new Error(hi)}else if(!it.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!it.isEmptyOrZeroLength(this.comparator_search_values[u].comparators))try{let d=this.comparator_search_values[u].comparators;for(let f=0,m=d.length;f<m;f++){let p=d[f];c.attribute=p.attribute,c.value=p.value;let h=await fd.getDataByValue(c,p.operation);if(l)for(let[E]of h)this.data[i].__mergedData[E]||(this.data[i].__mergedData[E]=[...n[i]],this._setMergedHashAttribute(i,E));else for(let[E,g]of h)this.data[i].__mergedData[E]?this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]):(this.data[i].__mergedData[E]=[...n[i]],this._updateMergedAttribute(i,E,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,E))}}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),Ke.error(d),new Error(hi)}else try{c.attribute=s.attribute,c.value="*";let d=await fd.getDataByValue(c);if(l)for(let[f]of d)this.data[i].__mergedData[f]||(this.data[i].__mergedData[f]=[...n[i]],this._setMergedHashAttribute(i,f));else for(let[f,m]of d)this.data[i].__mergedData[f]?this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]):(this.data[i].__mergedData[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,m[s.attribute]),this._setMergedHashAttribute(i,f))}catch(d){throw Ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),Ke.error(d),new Error(hi)}}}_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 Kn.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 Kn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Kn.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 Kn.yy.FuncValue:new Kn.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__mergedData)),this.statement.joins&&this.statement.joins.forEach(p=>{p.joinmode&&p.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(p.table);let h=p.joinmode+" JOIN ? AS "+(p.as?p.as:p.table.tableid);p.on&&(h+=" ON "+p.on.toString()),i.push(h),t.push(Object.values(this.data[`${p.table.databaseid_orig}_${p.table.as?p.table.as_orig:p.table.tableid_orig}`].__mergedData))});let o=[],c={};s.forEach(p=>{let h=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__hashName,E=p.as?p.as_orig:p.tableid_orig;o.push({key:`'${E}.${h}'`,schema:p.databaseid_orig,table:p.as?p.as_orig:p.tableid_orig,keys:new Set}),r.push(`${p.as?p.as:p.tableid}.\`${h}\` AS "${E}.${h}"`),c[p.as?p.as_orig:p.tableid_orig]=this.data[`${p.databaseid_orig}_${p.as?p.as_orig:p.tableid_orig}`].__mergedAttributes});let l=this.statement.where?"WHERE "+this.statement.where:"";l=l.replace(/NOT\(NULL\)/g,"NOT NULL");let u="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(u="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(p=>{p.is_func?r.push(p.initial_select_column.toString()):p.initial_select_column.tableid?r.push(`${p.initial_select_column.tableid}.${p.initial_select_column.columnid} AS ${p.expression.columnid}`):r.push(`${p.initial_select_column.columnid} AS ${p.expression.columnid}`)}));let d="",f="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(d=this.statement.limit?"LIMIT "+this.statement.limit:"",f=this.statement.offset?"OFFSET "+this.statement.offset:"");let m=[];try{let p=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,h=this._convertColumnsToIndexes(p,s);m=await Kn.promise(h,t),t=null}catch(p){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),Ke.error(p),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let p=0,h=m.length;p<h;p++){let E=m[p];o.forEach(g=>{E[g.key]!==null&&E[g.key]!==void 0&&g.keys.add(E[g.key])})}o.forEach(p=>{let h=Object.keys(this.data[`${p.schema}_${p.table}`].__mergedData),E=wp.difference(h,[...p.keys].map(g=>g.toString()));for(let g=0,R=E.length;g<R;g++){let S=E[g];delete this.data[`${p.schema}_${p.table}`].__mergedData[S]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new Yg(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=wp.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 Ke.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),Ke.error(i),new Error(hi)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,o=[];for(let d in i)o.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},l=await fd.getDataByHash(c),u=s.columns.length;for(let d=0,f=o.length;d<f;d++){let m=o[d],p=l.get(m);for(let h=0;h<u;h++){let E=s.columns[h],g=p[E]===void 0?null:p[E];this.data[n].__mergedData[m].push(g)}}}}catch(r){throw Ke.error("Error thrown from getDataByHash function in SQLSearch class method getData."),Ke.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__mergedData)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__mergedData)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(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();Ke.trace(`Final SQL: ${s}`),n=await Kn.promise(s,t),this.has_outer_join&&(n=this._translateUndefinedValues(n)),Ke.trace(`Final AlaSQL results data included ${n.length} rows`)}catch(s){throw Ke.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),Ke.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 Ke.error(yie.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),Ke.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return r=r.replace(/NOT\(NULL\)/g,"NOT NULL"),this.statement.columns.forEach(n=>{if(n.funcid&&n.as){let s=n.toString().replace(" AS "+n.as,"");r=r.replace(n.toString(),s)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let n=t,s={};r.forEach(i=>{i.databaseid_orig?s[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:s[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__mergedAttributes.forEach((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].__mergedAttributes.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.attribute=n.attribute,i.value="*";let o=await fd.getDataByValue(i);for(let[c,l]of o)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(o){throw Ke.error("There was an error when processing this SQL operation. Check your logs"),Ke.error(o),new Error(hi)}}return Object.values(Object.values(this.data)[0].__mergedData)}};$H.exports=Hw});var gn=M((ave,KH)=>{"use strict";KH.exports={searchByConditions:bie,searchByHash:Aie,searchByValue:Iie,search:wie};var Gw=fs(),{transformReq:qw}=oe();async function bie(e){return qw(e),Gw.searchByConditions(e)}a(bie,"searchByConditions");async function Aie(e){qw(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Gw.searchByHash(e))r&&t.push(r);return t}a(Aie,"searchByHash");async function Iie(e){qw(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Gw.searchByValue(e))t.push(r);return t}a(Iie,"searchByValue");function wie(e,t){try{let r=OH(),n=VH(),s=new r(e);s.validate(),new n(s.statement,s.attributes).search().then(o=>{t(null,o)}).catch(o=>{t(o,null)})}catch(r){return t(r)}}a(wie,"search")});var no=M((lve,jH)=>{"use strict";var Np=require("crypto"),Nie=me(),{CONFIG_PARAMS:Cie}=(H(),v(z)),WH="aes-256-cbc",Oie=32,Pie=16,$w=64,zH=32,Lie=$w+zH,YH=new Map;jH.exports={encrypt:Die,decrypt:vie,createNatsTableStreamName:Mie};function Die(e){let t=Np.randomBytes(Oie),r=Np.randomBytes(Pie),n=Np.createCipheriv(WH,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(Die,"encrypt");function vie(e){let t=e.substr(0,$w),r=e.substr($w,zH),n=e.substr(Lie,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Np.createDecipheriv(WH,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(vie,"decrypt");function Mie(e,t){let r=Nie.get(Cie.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=YH.get(r);return n||(n=Np.createHash("md5").update(r).digest("hex"),YH.set(r,n)),n}a(Mie,"createNatsTableStreamName")});var Ct=M((fve,JH)=>{"use strict";var{platform:dve}=require("os"),Uie="nats-server.zip",Vw="nats-server",xie=process.platform==="win32"?`${Vw}.exe`:Vw,Bie=/^[^\s.,*>]+$/,QH="__request__",Fie=a(e=>`${e}.${QH}`,"REQUEST_SUBJECT"),kie={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Hie={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Gie={HUB:"hub.pid",LEAF:"leaf.pid"},qie={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},$ie={SUCCESS:"success",ERROR:"error"},Vie={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Kie={TXN:"txn",MSGID:"msgid"},md={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Yie={[md.ERR]:1,[md.WRN]:2,[md.INF]:3,[md.DBG]:4,[md.TRC]:5},Wie={debug:"-D",trace:"-DVV"};JH.exports={NATS_SERVER_ZIP:Uie,NATS_SERVER_NAME:Vw,NATS_BINARY_NAME:xie,PID_FILES:Gie,NATS_CONFIG_FILES:Hie,SERVER_SUFFIX:qie,NATS_TERM_CONSTRAINTS_RX:Bie,REQUEST_SUFFIX:QH,UPDATE_REMOTE_RESPONSE_STATUSES:$ie,CLUSTER_STATUS_STATUSES:Vie,REQUEST_SUBJECT:Fie,SUBJECT_PREFIXES:Kie,MSG_HEADERS:kie,LOG_LEVELS:md,LOG_LEVEL_FLAGS:Wie,LOG_LEVEL_HIERARCHY:Yie}});var Kw=M(Sn=>{"use strict";var zie={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
12
12
  `),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
13
13
  `)},jie="certificate.pem",Qie="privateKey.pem",Jie="caCertificate.pem",Xie="natsCertificate.pem",Zie="natsCaCertificate.pem",Ot={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},eoe={tls_certificate:Ot.SERVER,tlsCertificateAuthority:Ot.CA,customFunctions_tls_certificate:Ot.SERVER,customFunctionsTlsCertificateAuthority:Ot.CA,operationsApi_tls_certificate:Ot["OPERATIONS-API"],operationsApiTlsCertificateAuthority:Ot["OPERATIONS-CA"]},toe={[Ot.SERVER]:2,[Ot.DEFAULT]:1},roe={[Ot["OPERATIONS-API"]]:3,[Ot.SERVER]:2,[Ot.DEFAULT]:1},noe={[Ot["OPERATIONS-API"]]:3,[Ot.SERVER]:2,[Ot.DEFAULT]:1},soe={[Ot["OPERATIONS-CA"]]:3,[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1},ioe={[Ot["OPERATIONS-CA"]]:3,[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1},ooe={[Ot.CA]:2,[Ot["DEFAULT-CA"]]:1};Sn.CERTIFICATE_PEM_NAME=jie;Sn.PRIVATEKEY_PEM_NAME=Qie;Sn.CA_PEM_NAME=Jie;Sn.CERT_NAME=Ot;Sn.CERT_CONFIG_NAME_MAP=eoe;Sn.CERT_PREFERENCE_APP=toe;Sn.CERT_PREFERENCE_OPS=roe;Sn.CERT_PREFERENCE_REP=noe;Sn.CA_CERT_PREFERENCE_REP=soe;Sn.CA_CERT_PREFERENCE_OPS=ioe;Sn.CA_CERT_PREFERENCE_APP=ooe;Sn.CERTIFICATE_VALUES=zie;Sn.NATS_CERTIFICATE_PEM_NAME=Xie;Sn.NATS_CA_PEM_NAME=Zie});var Ww=M((Eve,nG)=>{"use strict";var tG=require("fs-extra"),Se=require("joi"),aoe=require("os"),{boolean:We,string:_t,number:dr,array:tc}=Se.types(),{totalmem:XH}=require("os"),Ol=require("path"),coe=J(),Yw=oe(),hve=Kw(),ZH=(H(),v(z)),loe=mt(),eG="log",uoe="components",doe="Invalid logging.rotation.maxSize unit. Available units are G, M or K",foe="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",moe="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",poe="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",hoe="rootPath config parameter is undefined",Yn=Se.alternatives([dr.min(0),_t]).optional().empty(null),Wg=Se.alternatives([tc.items(_t,{host:_t.required(),port:Yn},{hostname:_t.required(),port:Yn}).empty(null),tc.items(_t)]),so,rG=!1;nG.exports={configValidator:Eoe,routesValidator:Roe,routeConstraints:Wg};function Eoe(e,t=!1){if(rG=t,so=e.rootPath,Yw.isEmpty(so))throw hoe;let r=We.optional(),n=dr.min(0).max(1e3).empty(null).default(yoe),s=_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Cp),i=_t.optional().empty(null),o=_t.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Se.string().empty(null).default(Cp),l=Se.custom(goe).empty(null).default(Cp),u=e.clustering?.enabled,d=Se.object({certificate:i,certificateAuthority:i,privateKey:i}),f;return u===!0?f=Se.object({enabled:r,hubServer:Se.object({cluster:Se.object({name:Se.required().empty(null),network:Se.object({port:Yn,routes:Wg}).required()}).required(),leafNodes:Se.object({network:Se.object({port:Yn}).required()}).required(),network:Se.object({port:Yn}).required()}).required(),leafServer:Se.object({network:Se.object({port:Yn,routes:Wg}).required(),streams:Se.object({maxAge:dr.min(120).allow(null).optional(),maxBytes:dr.min(1).allow(null).optional(),maxMsgs:dr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Se.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:We.optional(),databaseLevel:We.optional(),tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:We.required(),verify:We.optional()}),user:_t.optional().empty(null)}).optional():f=Se.object({enabled:r,tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:We.optional()})}).optional(),Se.object({authentication:Se.alternatives(Se.object({authorizeLocal:We,cacheTTL:dr.required(),cookie:Se.object({domains:tc.items(_t).optional(),expires:_t.optional()}),enableSessions:We,hashFunction:_t.valid("md5","sha256","argon2id").optional().empty(null)}),We).optional(),analytics:Se.object({aggregatePeriod:dr,replicate:We.optional()}),replication:Se.object({hostname:Se.alternatives(_t,dr).optional().empty(null),url:_t.optional().empty(null),port:Yn,securePort:Yn,routes:tc.optional().empty(null),databases:Se.alternatives(_t,tc),enableRootCAs:We.optional(),copyTablesToCatchUp:We.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Se.object({enabled:r}).required(),logging:Se.object({auditAuthEvents:Se.object({logFailed:We,logSuccessful:We}),file:We.required(),level:Se.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Se.object({enabled:We.optional(),compress:We.optional(),interval:_t.custom(Toe).optional().empty(null),maxSize:_t.custom(Soe).optional().empty(null),path:_t.optional().empty(null).default(Cp)}).required(),root:s,stdStreams:We.required(),auditLog:We.required()}).required(),operationsApi:Se.object({network:Se.object({cors:We.optional(),corsAccessList:tc.optional(),headersTimeout:dr.min(1).optional(),keepAliveTimeout:dr.min(1).optional(),port:Yn,domainSocket:Se.optional().empty("hdb/operations-server").default(Cp),securePort:Yn,timeout:dr.min(1).optional()}).optional(),tls:Se.alternatives([Se.array().items(d),d])}).required(),rootPath:_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Se.object({network:Se.object({port:Yn,securePort:Yn,mtls:Se.alternatives([We.optional(),Se.object({user:_t.optional(),certificateAuthority:i,required:We.optional()})])}).required(),webSocket:We.optional(),requireAuthentication:We.optional()}),http:Se.object({compressionThreshold:dr.optional(),cors:We.optional(),corsAccessList:tc.optional(),headersTimeout:dr.min(1).optional(),port:Yn,securePort:Yn,maxHeaderSize:dr.optional(),mtls:Se.alternatives([We.optional(),Se.object({user:_t.optional(),certificateAuthority:i,required:We.optional()})]),threadRange:Se.alternatives([tc.optional(),_t.optional()])}).required(),threads:Se.alternatives(n.optional(),Se.object({count:n.optional(),debug:Se.alternatives(We.optional(),Se.object({startingPort:dr.min(1).optional(),host:_t.optional(),waitForDebugger:We.optional()})),maxHeapMemory:dr.min(0).optional()})),storage:Se.object({writeAsync:We.required(),overlappingSync:We.optional(),caching:We.optional(),compression:Se.alternatives([We.optional(),Se.object({dictionary:_t.optional(),threshold:dr.optional()})]),compactOnStart:We.optional(),compactOnStartKeepBackup:We.optional(),noReadAhead:We.optional(),path:l,prefetchWrites:We.optional(),maxFreeSpaceToLoad:dr.optional(),maxFreeSpaceToRetain:dr.optional()}).required(),ignoreScripts:We.optional(),tls:Se.alternatives([Se.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Eoe,"configValidator");function _oe(e){return rG||tG.existsSync(e)?null:`Specified path ${e} does not exist.`}a(_oe,"doesPathExist");function goe(e,t){Se.assert(e,_t.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=_oe(e);if(r)return t.message(r)}a(goe,"validatePath");function Soe(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(doe);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(moe):e}a(Soe,"validateRotationMaxSize");function Toe(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(foe);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(poe):e}a(Toe,"validateRotationInterval");function yoe(e,t){let r=t.state.path.join("."),n=aoe.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||XH();return i=Math.round(Math.min(i,XH())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),coe.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(yoe,"setDefaultThreads");function Cp(e,t){let r=t.state.path.join(".");if(!Yw.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Yw.isEmpty(so))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ol.join(so,uoe);case"logging.root":return Ol.join(so,eG);case"clustering.leafServer.streams.path":return Ol.join(so,"clustering","leaf");case"storage.path":let n=Ol.join(so,ZH.LEGACY_DATABASES_DIR_NAME);return tG.existsSync(n)?n:Ol.join(so,ZH.DATABASES_DIR_NAME);case"logging.rotation.path":return Ol.join(so,eG);case"operationsApi.network.domainSocket":return r==null?null:Ol.join(so,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Cp,"setDefaultRoot");function Roe(e){let t=Se.object({routes:Wg});return loe.validateBySchema({routes:e},t)}a(Roe,"routesValidator")});var gt=M(nr=>{"use strict";var Hs=(H(),v(z)),Cr=oe(),fr=J(),{configValidator:boe,routesValidator:sG}=Ww(),Tn=require("fs-extra"),oG=require("yaml"),hs=require("path"),Aoe=require("is-number"),aG=require("properties-reader"),Ioe=require("lodash"),{handleHDBError:woe}=_e(),{HTTP_STATUS_CODES:Noe,HDB_ERROR_MSGS:pd}=Jr(),{server:Coe}=(Hr(),v(Tm)),{PACKAGE_ROOT:cG}=yt(),{DATABASES_PARAM_CONFIG:Op,CONFIG_PARAMS:ps,CONFIG_PARAM_MAP:Ei}=Hs,Ooe="Unable to get config value because config is uninitialized",Poe="Config successfully initialized",Loe="Error backing up config file",Doe="Empty parameter sent to getConfigValue",lG=hs.join(cG,"config","yaml",Hs.HDB_DEFAULT_CONFIG_FILE),voe=hs.join(cG,"config","yaml","defaultNatsConfig.yaml"),Moe="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",iG={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"},zg,Ft,jg;nr.createConfigFile=Uoe;nr.getDefaultConfig=xoe;nr.getConfigValue=dG;nr.initConfig=Qg;nr.flattenConfig=hd;nr.updateConfigValue=fG;nr.updateConfigObject=Foe;nr.getConfiguration=Goe;nr.setConfiguration=qoe;nr.readConfigFile=Jw;nr.getClusteringRoutes=$oe;nr.initOldConfig=mG;nr.getConfigFromFile=Voe;nr.getConfigFilePath=Pl;nr.addConfig=Koe;nr.deleteConfigFromFile=Yoe;nr.getConfigObj=Woe;nr.resolvePath=zw;nr.getFlatConfigObj=zoe;function zw(e){if(e?.startsWith("~/"))return hs.join(Cr.getHomeDir(),e.slice(1));let t=me();try{return hs.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}a(zw,"resolvePath");function Uoe(e,t=!1){let r=rc(lG);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=oG.parseDocument(Tn.readFileSync(voe,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}zg=hd(r.toJSON());let n;for(let c in e){let l=Ei[c.toLowerCase()];if(l===ps.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=jw(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{u.length>1&&typeof r.getIn(u.slice(0,-1))=="boolean"&&r.deleteIn(u.slice(0,-1)),r.setIn([...u],d)}catch(f){fr.error(f)}}}n&&uG(r,n),Qw(r,t);let s=r.toJSON();Ft=hd(s);let i=r.getIn(["rootPath"]),o=hs.join(i,Hs.HDB_CONFIG_FILE);if(Tn.createFileSync(o),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);Tn.writeFileSync(o,String(r)),fr.trace(`Config file written to ${o}`)}a(Uoe,"createConfigFile");function uG(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Cr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Op.TABLES))for(let i in n[s][Op.TABLES])for(let o in n[s][Op.TABLES][i]){let c=n[s][Op.TABLES][i][o],l=[ps.DATABASES,s,Op.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=[ps.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){fr.error("Error parsing schemas CLI/env config arguments",n)}}a(uG,"setSchemasConfig");function xoe(e){if(zg===void 0){let r=rc(lG);zg=hd(r.toJSON())}let t=Ei[e.toLowerCase()];if(t!==void 0)return zg[t.toLowerCase()]}a(xoe,"getDefaultConfig");function dG(e){if(e==null){fr.info(Doe);return}if(Ft===void 0){fr.trace(Ooe);return}let t=Ei[e.toLowerCase()];if(t!==void 0)return Ft[t.toLowerCase()]}a(dG,"getConfigValue");function Pl(e=Cr.getPropsFilePath()){let t=Cr.getEnvCliRootPath();if(t)return zw(hs.join(t,Hs.HDB_CONFIG_FILE));let r=aG(e);return zw(r.get(Hs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}a(Pl,"getConfigFilePath");function Qg(e=!1){if(Ft===void 0||e){let t;if(!Cr.noBootFile()){t=Cr.getPropsFilePath();try{Tn.accessSync(t,Tn.constants.F_OK|Tn.constants.R_OK)}catch(i){throw fr.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Pl(t),n;if(r.includes("config/settings.js"))try{mG(r);return}catch(i){if(i.code!==Hs.NODE_ERROR_CODES.ENOENT)throw i}try{n=rc(r)}catch(i){if(i.code===Hs.NODE_ERROR_CODES.ENOENT){fr.trace(`HarperDB config file not found at ${r}.
14
- This can occur during early stages of install where the config file has not yet been created`);return}else throw fr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Boe(n,r),Qw(n);let s=n.toJSON();if(Coe.config=s,Ft=hd(s),Ft.logging_rotation_rotate)for(let i in iG)Ft[i]&&fr.error(`Config ${iG[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);fr.trace(Poe)}}a(Qg,"initConfig");function Boe(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],hs.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],hs.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(fr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Tn.writeFileSync(t,String(e))}}a(Boe,"checkForUpdatedConfig");function Qw(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 pd.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 pd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=boe(r,t);if(n.error)throw pd.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(Qw,"validateConfig");function Foe(e,t){Ft===void 0&&(Ft={});let r=Ei[e.toLowerCase()];if(r===void 0){fr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ft[r.toLowerCase()]=t}a(Foe,"updateConfigObject");function fG(e,t,r=void 0,n=!1,s=!1,i=!1){Ft===void 0&&Qg();let o=dG(Ei.hdb_root),c=hs.join(o,Hs.HDB_CONFIG_FILE),l=rc(c),u;if(r&&Ft){let m=!1;for(let p in r)if(r[p]!=Ft[p.toLowerCase()]){m=!0;break}if(!m){fr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ps.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=Ei[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=jw(m,t);l.setIn([...p],h)}else for(let m in r){let p=Ei[m.toLowerCase()];if(p===ps.HTTP_SECUREPORT&&r[m]===Ft[ps.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ps.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Ft[ps.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ps.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Hs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=jw(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(R){fr.error(R)}}}u&&uG(l,u),Qw(l);let d=l.getIn(["rootPath"]),f=hs.join(d,Hs.HDB_CONFIG_FILE);if(n===!0&&koe(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Tn.writeFileSync(f,String(l)),s&&(Ft=hd(l.toJSON())),fr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(fG,"updateConfigValue");function koe(e,t){try{let r=hs.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Hs.HDB_CONFIG_FILE}.bak`);Tn.copySync(e,r),fr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){fr.error(Loe),fr.error(r)}}a(koe,"backupConfigFile");var Hoe=["databases"];function hd(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}),jg=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])&&!Hoe.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;!ps[l.toUpperCase()]&&Ei[l]&&(s[Ei[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(hd,"flattenConfig");function jw(e,t){if(e===ps.CLUSTERING_NODENAME||e===ps.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(Aoe(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Cr.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 Cr.autoCast(t)}a(jw,"castConfigValue");function Goe(){let e=Cr.getPropsFilePath(),t=Pl(e);return rc(t).toJSON()}a(Goe,"getConfiguration");async function qoe(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return fG(void 0,void 0,s,!0),Moe}catch(i){throw typeof i=="string"||i instanceof String?woe(i,i,Noe.BAD_REQUEST,void 0,void 0,!0):i}}a(qoe,"setConfiguration");function Jw(){let e=Cr.getPropsFilePath();try{Tn.accessSync(e,Tn.constants.F_OK|Tn.constants.R_OK)}catch(n){if(!Cr.noBootFile())throw fr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Pl(e);return rc(t).toJSON()}a(Jw,"readConfigFile");function rc(e){return oG.parseDocument(Tn.readFileSync(e,"utf8"),{simpleKeys:!0})}a(rc,"parseYamlDoc");function $oe(){let e=Jw(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Cr.isEmptyOrZeroLength(t)?[]:t;let r=sG(t);if(r)throw pd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Cr.isEmptyOrZeroLength(n)?[]:n;let s=sG(n);if(s)throw pd.CONFIG_VALIDATION(s.message);if(!Cr.isEmptyOrZeroLength(n)&&!Cr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Cr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw pd.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a($oe,"getClusteringRoutes");function mG(e){let t=aG(e);Ft={};for(let r in Ei){let n=t.get(r.toUpperCase());if(Cr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Ei[r].toLowerCase();s===ps.LOGGING_ROOT?Ft[s]=hs.dirname(n):Ft[s]=n}return Ft}a(mG,"initOldConfig");function Voe(e){let t=Jw();return Ioe.get(t,e.replaceAll("_","."))}a(Voe,"getConfigFromFile");async function Koe(e,t){let r=rc(Pl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Tn.writeFile(Pl(),String(r))}a(Koe,"addConfig");function Yoe(e){let t=Pl(Cr.getPropsFilePath()),r=rc(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=hs.join(n,Hs.HDB_CONFIG_FILE);Tn.writeFileSync(s,String(r))}a(Yoe,"deleteConfigFromFile");function Woe(){return jg||(Qg(),jg)}a(Woe,"getConfigObj");function zoe(){return Ft||Qg(),Ft}a(zoe,"getFlatConfigObj")});var Es=M((Tve,Vr)=>{"use strict";var EG="username is required",_G="nothing to update, must supply active, role or password to update",gG="password cannot be an empty string",SG="If role is specified, it cannot be empty.",TG="active must be true or false";Vr.exports.addUser=nae;Vr.exports.alterUser=sae;Vr.exports.dropUser=oae;Vr.exports.getSuperUser=dae;Vr.exports.userInfo=aae;Vr.exports.listUsers=Zg;Vr.exports.listUsersExternal=cae;Vr.exports.setUsersWithRolesCache=Ll;Vr.exports.findAndValidateUser=iN;Vr.exports.getClusterUser=fae;Vr.exports.getUsersWithRolesCache=uae;Vr.exports.USERNAME_REQUIRED=EG;Vr.exports.ALTERUSER_NOTHING_TO_UPDATE=_G;Vr.exports.EMPTY_PASSWORD=gG;Vr.exports.EMPTY_ROLE=SG;Vr.exports.ACTIVE_BOOLEAN=TG;var yG=Vn(),joe=Nl(),Pp=(Dw(),v(Lw)),RG=EH(),Lp=gn(),tN=Wo(),io=oe(),bG=require("validate.js"),rN=J(),{promisify:Qoe}=require("util"),nN=no(),Zw=(H(),v(z)),pG=Ct(),Joe=gt(),Xoe=me(),Zoe=Xi(),{hdbErrors:eae,ClientError:_i}=_e(),{HTTP_STATUS_CODES:Jo,AUTHENTICATION_ERROR_MSGS:Xw,HDB_ERROR_MSGS:Ed}=eae,{UserEventMsg:sN}=ls(),eN=require("lodash"),{server:Xg}=(Hr(),v(Tm)),tae=J();Xg.getUser=(e,t)=>iN(e,t,t!=null);Xg.authenticateUser=(e,t)=>iN(e,t);var AG={username:!0,active:!0,role:!0,password:!0},hG=new Map,rae=Qoe(joe.delete),Jg=Xoe.get(Zw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Pp.HASH_FUNCTION.SHA256,oo;async function nae(e){let t=bG.cleanAttributes(e,AG),r=RG.addUserValidation(t);if(r)throw new _i(r.message);let n=await Lp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new _i(Ed.ROLE_NAME_NOT_FOUND(t.role),Jo.NOT_FOUND);if(n.length>1)throw new _i(Ed.DUP_ROLES_FOUND(t.role),Jo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=nN.encrypt(t.password)),t.password=await Pp.hash(t.password,Jg),t.hash_function=Jg,t.role=n[0].id;let s=await yG.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(rN.debug(s),await Ll(),s.skipped_hashes.length===1)throw new _i(Ed.USER_ALREADY_EXISTS(t.username),Jo.CONFLICT);return tN.signalUserChange(new sN(process.pid)),`${t.username} successfully added`}a(nae,"addUser");async function sae(e){let t=bG.cleanAttributes(e,AG);if(io.isEmptyOrZeroLength(t.username))throw new Error(EG);if(io.isEmptyOrZeroLength(t.password)&&io.isEmptyOrZeroLength(t.role)&&io.isEmptyOrZeroLength(t.active))throw new Error(_G);if(!io.isEmpty(t.password)&&io.isEmptyOrZeroLength(t.password.trim()))throw new Error(gG);if(!io.isEmpty(t.active)&&!io.isBoolean(t.active))throw new Error(TG);if(!io.isEmpty(t.password)&&!io.isEmptyOrZeroLength(t.password.trim())&&(iae(t.username)&&(t.hash=nN.encrypt(t.password)),t.password=await Pp.hash(t.password,Jg),t.hash_function=Jg),t.role==="")throw new Error(SG);if(t.role){let n=await Lp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new _i(Ed.ALTER_USER_ROLE_NOT_FOUND(t.role),Jo.NOT_FOUND);if(n.length>1)throw new _i(Ed.DUP_ROLES_FOUND(t.role),Jo.CONFLICT);t.role=n[0].id}let r=await yG.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Ll(),tN.signalUserChange(new sN(process.pid)),r}a(sae,"alterUser");function iae(e){let t=!1,r=oo.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(iae,"isClusterUser");async function oae(e){let t=RG.dropUserValidation(e);if(t)throw new _i(t.message);if(oo.get(e.username)===void 0)throw new _i(Ed.USER_NOT_EXIST(e.username),Jo.NOT_FOUND);let r=await rae({table:"hdb_user",schema:"system",hash_values:[e.username]});return rN.debug(r),await Ll(),tN.signalUserChange(new sN(process.pid)),`${e.username} successfully deleted`}a(oae,"dropUser");async function aae(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=eN.cloneDeep(e.hdb_user);let r=await Lp.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(aae,"userInfo");async function cae(){let e=await Zg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(cae,"listUsersExternal");async function Zg(){let e=await Lp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=eN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Lp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=eN.cloneDeep(s),s.role=t[s.role],lae(s.role),n.set(s.username,s);return n}a(Zg,"listUsers");function lae(e){if(!e){rN.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(Zoe)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(lae,"appendSystemTablesToRole");async function Ll(e=void 0){e?oo=e:oo=await Zg()}a(Ll,"setUsersWithRolesCache");async function uae(){return oo||await Ll(),oo}a(uae,"getUsersWithRolesCache");async function iN(e,t,r=!0){oo||await Ll();let n=oo.get(e);if(!n){if(!r)return{username:e};throw new _i(Xw.GENERIC_AUTH_FAIL,Jo.UNAUTHORIZED)}if(n&&!n.active)throw new _i(Xw.USER_INACTIVE,Jo.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(hG.get(t)===n.password)return s;{let i=Pp.validate(n.password,t,n.hash_function||Pp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)hG.set(t,n.password);else throw new _i(Xw.GENERIC_AUTH_FAIL,Jo.UNAUTHORIZED)}}return s}a(iN,"findAndValidateUser");async function dae(){oo||await Ll();for(let[,e]of oo)if(e.role.role==="super_user")return e}a(dae,"getSuperUser");async function fae(){let e=await Zg(),t=Joe.getConfigFromFile(Zw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Zw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=nN.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+pG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+pG.SERVER_SUFFIX.ADMIN,r}a(fae,"getClusterUser");var IG=[];Xg.invalidateUser=function(e){for(let t of IG)try{t(e)}catch(r){tae.error("Error invalidating user",r)}};Xg.onInvalidatedUser=function(e){IG.push(e)}});var Ne,_d=ne(()=>{Ne={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var gd,oN=ne(()=>{_d();gd=class{static{a(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Ne.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ne.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ne.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ne.WARNING,t)}markLoading(t){this.updateStatus(Ne.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ne.HEALTHY}hasError(){return this.status===Ne.ERROR}isLoading(){return this.status===Ne.LOADING}hasWarning(){return this.status===Ne.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Dl,nc,aN,Sd,cN,Td,lN,eS=ne(()=>{Dl=b(Jr()),nc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},aN=class extends nc{static{a(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Dl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Sd=class extends nc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Dl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},cN=class extends nc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Td=class extends nc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},lN=class extends nc{static{a(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Dl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
15
- `)}}});var wG,vl,NG,sc,Dp,yd,mae,tS,uN=ne(()=>{wG=b(ls()),vl=b(nt());H();NG=b(wr());_d();eS();sc=(0,NG.loggerWithTag)("componentStatus.crossThread"),Dp=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,vl.onMessageByType)(f_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;sc.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(sc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,vl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),sc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),sc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,g),(0,wG.sendItcEvent)({type:f_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Sd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,vl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return sc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Sd?sc.error?.(`ITC failure during component status collection: ${r.message}`):sc.warn?.("Failed to collect component status from all threads:",r),sc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,vl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},yd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Ne.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Ne.ERROR,Ne.WARNING,Ne.LOADING,Ne.UNKNOWN,Ne.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ne.UNKNOWN}},mae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),tS=new Dp(mae)});var ic,rS=ne(()=>{oN();_d();uN();eS();ic=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new Td(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ne).includes(r))throw new Td(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ne).join(", ")}`);this.statusMap.set(t,new gd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ne.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ne.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ne.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ne.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ne.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ne.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Ne.HEALTHY]:0,[Ne.ERROR]:0,[Ne.WARNING]:0,[Ne.LOADING]:0,[Ne.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await tS.collect(t);return yd.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Ne.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Ne.ERROR),c=n.some(f=>f.status===Ne.LOADING),l=o?Ne.ERROR:c?Ne.LOADING:Ne.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Ne.ERROR||m.status===Ne.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Ne.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var mr,nS=ne(()=>{rS();mr=new ic});function OG(e){let t=CG.get(e);return t||(t=new dN(e),CG.set(e,t)),t}function PG(){mr.reset()}var dN,CG,ao,LG,DG=ne(()=>{nS();_d();dN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return mr.setStatus(this.componentName,Ne.HEALTHY,t),this}warning(t){return mr.setStatus(this.componentName,Ne.WARNING,t),this}error(t,r){return mr.setStatus(this.componentName,Ne.ERROR,t,r),this}loading(t){return mr.setStatus(this.componentName,Ne.LOADING,t||"Loading..."),this}unknown(t){return mr.setStatus(this.componentName,Ne.UNKNOWN,t),this}get(){return mr.getStatus(this.componentName)}},CG=new Map;a(OG,"statusForComponent");ao={loading(e,t){mr.initializeLoading(e,t)},loaded(e,t){mr.markLoaded(e,t)},failed(e,t,r){mr.markFailed(e,t,r)}};a(PG,"reset");LG=Ne});var vp={};ye(vp,{AggregationError:()=>cN,COMPONENT_STATUS_LEVELS:()=>Ne,ComponentStatus:()=>gd,ComponentStatusError:()=>nc,ComponentStatusOperationError:()=>Td,ComponentStatusRegistry:()=>ic,CrossThreadCollectionError:()=>lN,CrossThreadStatusCollector:()=>Dp,CrossThreadTimeoutError:()=>aN,ITCError:()=>Sd,StatusAggregator:()=>yd,componentStatusRegistry:()=>mr,crossThreadCollector:()=>tS,query:()=>pae});var pae,vG=ne(()=>{nS();rS();oN();rS();uN();nS();eS();_d();pae={get(e){return mr.getStatus(e)},all(){return mr.getAllStatuses()},byStatus(e){return mr.getComponentsByStatus(e)},summary(){return mr.getStatusSummary()},async allThreads(){return ic.getAggregatedFromAllThreads(mr)}}});var fN={};ye(fN,{STATUS:()=>LG,internal:()=>vp,lifecycle:()=>ao,reset:()=>PG,statusForComponent:()=>OG});var Mp=ne(()=>{DG();vG()});var xp=M((eMe,xG)=>{"use strict";var _s=J(),yn=(H(),v(z)),hae=tB(),Eae=Es(),{validateEvent:mN}=ls(),Up=fs(),_ae=require("process"),{resetDatabases:gae}=(we(),v(ft)),Sae={[yn.ITC_EVENT_TYPES.SCHEMA]:Tae,[yn.ITC_EVENT_TYPES.USER]:UG,[yn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Rae};async function Tae(e){let t=mN(e);if(t){_s.error(t);return}_s.trace("ITC schemaHandler received schema event:",e),await hae(e.message),await yae(e.message)}a(Tae,"schemaHandler");async function yae(e){try{Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=gae();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){_s.error(t)}}a(yae,"syncSchemaMetadata");var MG=[];async function UG(e){try{try{Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){_s.warn(r)}let t=mN(e);if(t){_s.error(t);return}_s.trace(`ITC userHandler ${yn.HDB_ITC_CLIENT_PREFIX}${_ae.pid} received user event:`,e),await Eae.setUsersWithRolesCache();for(let r of MG)r()}catch(t){_s.error(t)}}a(UG,"userHandler");UG.addListener=function(e){MG.push(e)};async function Rae(e){try{let t=mN(e);if(t){_s.error(t);return}_s.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Mp(),v(fN)),{getWorkerIndex:n}=nt(),{sendItcEvent:s}=ls(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:yn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?_s.trace(`Sent component status response directly to thread ${u}`):(u===void 0?_s.debug("No originator threadId, falling back to broadcast"):_s.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){_s.error("Error handling component status request:",t)}}a(Rae,"componentStatusRequestHandler");xG.exports=Sae});var ls=M((oMe,FG)=>{"use strict";var rMe=J(),pN=oe(),bae=(H(),v(z)),{ITC_ERRORS:Bp}=Jr(),{parentPort:nMe,threadId:Aae,isMainThread:Iae,workerData:sMe}=require("worker_threads"),{onMessageFromWorkers:wae,broadcast:iMe,broadcastWithAcknowledgement:Nae}=nt();FG.exports={sendItcEvent:Cae,validateEvent:BG,SchemaEventMsg:Oae,UserEventMsg:Pae};var sS;wae(async(e,t)=>{sS=sS||xp(),BG(e),sS[e.type]&&await sS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Cae(e){return!Iae&&e.message&&(e.message.originator=Aae),Nae(e)}a(Cae,"sendItcEvent");function BG(e){if(typeof e!="object")return Bp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||pN.isEmpty(e.type))return Bp.MISSING_TYPE;if(!e.hasOwnProperty("message")||pN.isEmpty(e.message))return Bp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||pN.isEmpty(e.message.originator))return Bp.MISSING_ORIGIN;if(bae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Bp.INVALID_EVENT(e.type)}a(BG,"validateEvent");function Oae(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(Oae,"SchemaEventMsg");function Pae(e){this.originator=e}a(Pae,"UserEventMsg")});var Wo=M((lMe,qG)=>{"use strict";var kG=(H(),v(z)),cMe=oe(),iS=J(),HG=B0(),Rd,{sendItcEvent:GG}=ls();function Lae(e){try{iS.debug("signalSchemaChange called with message:",e),Rd=Rd||xp();let t=new HG(kG.ITC_EVENT_TYPES.SCHEMA,e);return Rd.schema(t),GG(t)}catch(t){iS.error(t)}}a(Lae,"signalSchemaChange");function Dae(e){try{iS.trace("signalUserChange called with message:",e),Rd=Rd||xp();let t=new HG(kG.ITC_EVENT_TYPES.USER,e);return Rd.user(t),GG(t)}catch(t){iS.error(t)}}a(Dae,"signalUserChange");qG.exports={signalSchemaChange:Lae,signalUserChange:Dae}});function Fp(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 $G(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Gs(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 Gs,kp=ne(()=>{Gs=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(Fp,"appendHeader");a($G,"mergeHeaders")});function oS(e,t,r=Mae){let n;return function(...i){return n?n.length*hN>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,o){setImmediate(()=>{let c=performance.now();hN=(hN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var YG,vae,Mae,VG,Uae,EN,KG,hN,_N=ne(()=>{YG=b(wr()),vae=3e3,Mae=2e4,VG=0,Uae=3e4,EN=3e3,KG=performance.now()+EN,hN=0;a(oS,"throttle");setInterval(()=>{let e=performance.now();e-KG-EN>vae&&VG+Uae<e&&(YG.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),VG=e),KG=e},EN).unref()});var nq={};ye(nq,{EVICTED:()=>dl,INVALIDATED:()=>Fn,coerceType:()=>cS,makeTable:()=>uS});function uS(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=WA(i,n,l),N,I,$={},ee=Promise.resolve(),G,k,j;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(G=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(j=K),K.isPrimaryKey&&($=K);let Y,ce=[],de=[],te=1,ge=2,be={},Ye={},qe=864e5,Ar=0,er,Qr,xr,wu=!1,Kc,Ut,ii,Ma=Ul.get(F.REPLICATION_DATABASES);if(Array.isArray(Ma)){for(let K of Ma)if(K.name===c&&K.replicateTo>=0){ii=K.replicateTo;break}}let ZE=i.getRange({start:!1,end:!1}).constructor,cm=10,e_=6;g&&mm(),Hm(i.env.path,K=>{if(I)return xa(K)});class lm extends yl{static{a(this,"Updatable")}getUpdatedTime(){return Ya.get(this.getRecord())?.version}getExpiresAt(){return Ya.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new Sp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class ve extends lr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(D=>!D.intermediateSource)){if(this.sources.some(D=>D.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}I=I||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=a(D=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),A.length>0)if(A.length===1){let U=A[0];return(w,L,q)=>{if(w?.source!==U)return U[D](L,q,w)}}else return(U,w,L)=>{let q=[];for(let W of A){if(U?.source===W)break;q.push(W[D](w,L,U))}return Promise.all(q)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(D=>{if(P[D]&&(!P[D].reliesOnPrototype||P.prototype[D]))return(A,U,w)=>{if(!A?.source)return P[D](U,w,A)}},"getApplyToCanonicalSource");be={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ye={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let x=P.shouldRevalidateEvents;return(async()=>{let D=!1,A,U=a(async(w,L)=>{let q=w.value,W=w.table?Me[c][w.table]:ve;if(c===_m&&(w.table===Du.ROLE_TABLE_NAME||w.table===Du.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=q[W.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=_;let Q={residencyId:Yc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId,async:!0},B=w.id,Ee=await W.getResource(B,L,Q);switch(w.finished&&await w.finished,w.type){case"put":return x?Ee._writeInvalidate(B,q,Q):Ee._writeUpdate(B,q,!0,Q);case"patch":return x?Ee._writeInvalidate(B,q,Q):Ee._writeUpdate(B,q,!1,Q);case"delete":return Ee._writeDelete(B,Q);case"publish":case"message":return Ee._writePublish(B,q,Q);case"invalidate":return Ee._writeInvalidate(B,q,Q);case"relocate":return Ee._writeRelocate(B,Q);default:ke.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=_.subscribe;w&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},q=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Ml.getWorkerIndex)(),L):(0,Ml.getWorkerIndex)()===0,W=w&&q&&await _.subscribe?.(L);if(W){let Q;for await(let B of W)try{if(!(B.type==="transaction"?B.writes[0]:B)){ke.default.error?.("Bad subscription event",B);continue}if(B.source=_,B.type==="end_txn"){Q?.resolve();let pe;if(B.localTime&&A!==B.localTime&&B.remoteNodeIds?.length>0&&(pe=a(()=>{let se=[Symbol.for("seq"),B.remoteNodeIds[0]],ie=d.get(se),Oe=ie?.nodes;Oe||(Oe=[]);for(let ae of B.remoteNodeIds.slice(1)){let xe=Oe.find(Ce=>Ce.id===ae);Oe=Oe.filter(Ce=>Ce.id!==ae||Ce===xe),xe||(xe={id:ae,seqId:0},Oe.push(xe)),xe.seqId=Math.max(ie?.seqId??1,B.localTime),ae===Q?.nodeId&&(xe.lastTxnTime=B.timestamp)}let le=Math.max(ie?.seqId??1,B.localTime);ke.default.trace?.("Received txn",c,le,new Date(le),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(se,{seqId:le,nodes:Oe})},"updateRecordedSequenceId"),A=B.localTime),B.onCommit){let se=Q?Q.committed.then(B.onCommit):B.onCommit();pe&&(se?.then?se.then(pe):pe())}else pe&&pe();continue}if(Q)if(B.beginTxn)Q.resolve();else{Q.writePromises.push(U(B,Q));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let fe=bt(B,()=>{if(B.type==="transaction"){let pe=[];for(let se of B.writes)try{pe.push(U(se,B))}catch(ie){throw ie.message+=" writing "+JSON.stringify(se)+" of event "+JSON.stringify(B),ie}return Promise.all(pe)}else if(B.type==="define_schema"){let pe=this.attributes.slice(0),se=!1;for(let ie of B.attributes)pe.find(Oe=>Oe.name===ie.name)||(pe.push(ie),se=!0);se&&(Xe({table:s,database:c,attributes:pe,origin:"cluster"}),Gp.signalSchemaChange(new qp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return B.beginTxn?(Q=B,Q.writePromises=[U(B,B)],new Promise(pe=>{Q.resolve=()=>pe(Promise.all(Q.writePromises))})):U(B,B)});Q&&(Q.committed=fe),D&&fe&&!fe?.waitingForUserChange&&(fe.then(()=>Gp.signalUserChange(new qp.UserEventMsg(process.pid))),fe.waitingForUserChange=!0),B.onCommit&&(fe?fe.then(B.onCommit):B.onCommit())}catch(Ee){ke.default.error?.("error in subscription handler",Ee)}}}catch(w){ke.default.error?.(w)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==ve.prototype.get}static getResource(_,T,C){let P=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Hi(_);try{if(P.getRecord?.())return P;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let O=!C?.async||i.cache?.get?.(_),x=Br(T),D=x.getReadTxn();if(D?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Lo(_,T,{transaction:D,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?ve._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new ut.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=pn(_,A,T,P);if(U)return x?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,qs(U,w=>(ve._updateResource(P,w),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(_)),O}}return P}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=pn(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,qs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=$?.type;if(_==="String"||_==="ID")return super.getNewId();if(!Ut){let O=i.getEntry(Symbol.for("id_allocation")),x=O?.value,D;if(x&&x.nodeName===server.hostname&&(!Wae(i)||x.pid===process.pid)){let A=x.start,U=x.end;D=A;for(let w of i.getKeys({start:U,end:A,limit:1,reverse:!0}))D=w}else x=P(O?.version??null),D=x.start;Ut=new BigInt64Array([BigInt(D)+1n]),Ut=new BigInt64Array(i.getUserSharedBuffer("id",Ut.buffer)),Ut.maxSafeId=x.end}let T=Number(Atomics.add(Ut,0,1n)),C=_==="Int"?512:1048576;if(T+C>=Ut.maxSafeId){let O=a(x=>{Ut.maxSafeId=T+(_==="Int"?1023:4194303);let D=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=x?void 0:i.useReadTransaction(),U=Number(Ut[0]);for(let q of i.getKeys({start:U+1,end:D,limit:1,transaction:A}))D=q;A?.done();let{value:w,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Ut.maxSafeId<D){if(w.end>Ut.maxSafeId-100)return;ke.default.info?.("New id allocation",T,Ut.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:w.start,end:Ut.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{ke.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ut.maxSafeId}, but id of ${D} detected`);let q=P(L);q.alreadyUpdated||Atomics.store(Ut,0,BigInt(q.start+1)),Ut.maxSafeId=q.end}},"updateEnd");T+C===Ut.maxSafeId?setImmediate(O):T+100>=Ut.maxSafeId&&(ke.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let x=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=x/4,A,U,w=!1,L,q;do{L=Math.floor(Math.random()*x),q={start:L,end:L+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let W of i.getKeys({start:L,limit:1,reverse:!0}))A=W;U=x;for(let W of i.getKeys({start:L+1,end:x,limit:1}))U=W;D*=.875,D<1e3&&!w&&(w=!0,ke.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,D))}while(!(D<U-L&&(D<L-A||A===0)));return i.transactionSync(()=>{let W=i.getEntry(Symbol.for("id_allocation"));return(W?.version??null)==O?(ke.default.info?.("Allocated new id range",q),i.put(Symbol.for("id_allocation"),q,Date.now()),q):(ke.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...W.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,xa()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){ve.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(_){ve.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(ve.getResidencyById)return ve.getResidencyById(_[t]);let C=ii;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,C));else{let O=server.nodes.map(A=>A.name),x=Math.floor(O.length*Math.random());P.push(...O.slice(x,x+C));let D=x+C-O.length;D>0&&P.push(...O.slice(0,D))}return P}}static enableAuditing(){g||(g=!0,mm(),ve.audit=!0)}static coerceId(_){return _===""?null:cS(_,$)}static async dropTable(){delete Me[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Zr&&_.value&&$a(_.value);if(c===o){for(let _ of S)d.remove(ve.tableName+"/"+_.name),r[_.name]?.drop();d.remove(ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),SN.default.unlinkSync(i.env.path);Gp.signalSchemaChange(new qp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(um(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?ve.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),P=Br(C),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let x=Ds(_);Hi(x);let D=!0;return _.checkPermission&&(D=this.allowRead(C.user,_)),qs(qs(D,A=>{if(!A)throw new ut.AccessViolation(C.user);let U=!0;return Lo(x,C,{transaction:O,ensureLoaded:U},!1,w=>{if(C.onlyIfCached){if(!w?.value)throw new ut.ServerError("Entry is not cached",504)}else if(U){let L=pn(x,w,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then(q=>q?.value)}return w?.value})}),A=>{let U=_?.select;return U&&A!=null?Zu(U,this.constructor)(A):A})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Dn(_,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||wu&&O){if(T||(T={}),O){let x=Array.isArray(O)?O:[O],D=P?.length>0&&gN(P,"read");T.select=x.map(A=>{let U=A.name||A;if(!D||D[U]){let w=xr[U]?.definition?.tableClass;if(w){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!w.prototype.allowRead.call(null,_,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(x=>x.read&&!xr[x.attribute_name]).map(x=>x.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let P=Dn(_,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let x=gN(O,"update");for(let D in T)if(!x[D])return!1;for(let D of O){let A=D.attribute_name;!D.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return Ua(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let P=Dn(_,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let x=gN(O,"insert");for(let D in T)if(!x[D])return!1;return Ua(this.getContext())}else return Ua(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Dn(_,T)?.delete&&Ua(this.getContext())}update(_,T){let C,P=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),O=!1;P?(O=T,T=_,C=this.getId()):C=Ds(_);let x=this.getContext();if(!Br(x))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(A=this.allowUpdate(x.user,T,_)),qs(A,U=>{if(!U)throw new ut.AccessViolation(x.user);return qs(i.get(Ds(_)),w=>{let L=new lm(w);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===zG?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new Sp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),qs(T,P=>{if(!P)throw new ut.AccessViolation(C.user);this._writeInvalidate(_?Ds(_):this.getId())})}_writeInvalidate(_,T,C){let P=this.getContext();Hi(_),Br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:be.invalidate?.bind(this,P,_),beforeIntermediate:Pu(T,Ye.invalidate?.bind(this,P,_)),commit:a((x,D)=>{if(!(Fr(x,D,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));ke.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,T,D,x,Fn,g,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Hi(_),Br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:be.relocate?.bind(this,C,_),beforeIntermediate:Ye.relocate?.bind(this,C,_),commit:a((O,x)=>{if(Fr(O,x,T?.nodeId)<=0)return;let D=ve.getResidencyRecord(T.residencyId),A=0,U=null,w=x?.value;if(D&&!D.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=w[L];A=Fn}else U=w;ke.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(O).toISOString()}`),y(_,U,x,O,A,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},P=Ba(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Yc(P)}let x=0;ke.default.debug?.("Performing a relocate of an entry",_.key,T.value,P);let D=y(_.key,T.value,_,_.version,x,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let P=this.Source,O;if(!((I||g)&&(!T||(O=i.getEntry(_),!O||!T)||O.version!==C))){if(I){if(i.hasLock(_,O.version))return;let x;for(let D in r)x||(x={}),x[D]=T[D];if(x)return y(_,x,O,C,dl,null,null,null,!0)}return i.ifVersion(_,C,()=>{Nu(_,T,null)}),ul(i,O??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return _.checkPermission&&(C=this.allowUpdate(P.user,T,_)),qs(C,O=>{if(!O)throw new ut.AccessViolation(P.user);if(Array.isArray(T))for(let x of T){let D=x[t];this._writeUpdate(D,x,!0)}else{let x=Ds(_);this._writeUpdate(x,T,!0)}})}}create(_,T){let C=!0,P=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(P.user,T,_)),qs(C,O=>{if(!O)throw new ut.AccessViolation(P.user);let x=Ds(_)??T[t];if(x===void 0)x=this.constructor.getNewId();else if(i.get(x))throw new ut.ClientError("Record already exists",409);return this._writeUpdate(x,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,P){let O=this.getContext(),x=Br(O);Hi(_);let D=this.#n??i.getEntry(_);this.#s=C?zG:$ae;let A=a(w=>C?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,Rl(this)):null,"writeToSources"),U={key:_,store:i,entry:D,nodeName:O?.nodeName,validate:a(w=>{T||(T=this.#t),C||T&&Ug(this.#t===T?this:T)?O?.source||(x.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(w):k.type==="String"?new Date(w).toISOString():w),C&&(t&&T[t]!==_&&(T[t]=_),G&&(D?.value?T[G.name]=D?.value[G.name]:T[G.name]=G.type==="Date"?new Date(w):G.type==="String"?new Date(w).toISOString():w),T=Rl(T))):x.removeWrite(U)},"validate"),before:A(be),beforeIntermediate:Pu(T,A(Ye)),commit:a((w,L,q)=>{if(q){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=w;let W=L?.value,Q;this.#s=0;let B=!1,Ee=Fr(w,L,P?.nodeId),fe;if(Ee<=0){if(g){let le=L.localTime,ae=L.version;ke.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(ae),"local recorded time",new Date(le));let xe=[];for(;le>w||ae>=w&&le>0;){let Ce=l.get(le);if(!Ce)break;let Le=At(Ce);if(ae=Le.version,ae>=w){if(ae===w){if(Ee=Fr(w,{version:ae,localTime:le},P?.nodeId),Ee===0)return;if(Ee>0){le=Le.previousLocalTime;continue}}if(Le.type==="patch")xe.push(Le),fe=T;else if(Le.type==="put"||Le.type==="delete")return}le=Le.previousLocalTime}le||ke.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),xe.sort((Ce,Le)=>Ce.version-Le.version);for(let Ce of xe){let Le=Ce.getValue(i);if(ke.default.debug?.("Rebuilding update with future patch:",new Date(Ce.version),Le,Ce),Q=w_(Q??T,Le,C),!Q)return}}else{if(C)return;Q=w_(Q??T,W,C),ke.default.debug?.("Rebuilding update without audit:",Q)}ke.default.trace?.("Rebuilt record to save:",Q," is full update:",C)}let pe;if(C&&!Q?pe=T:this.constructor.loadAsInstance===!1?pe=Rl(W,Q??T):(this.#e=W,pe=Rl(this,Q??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let se;if(P?.residencyId!=null)se=P.residencyId;else{D?.residencyId&&(O.previousResidency=ve.getResidencyRecord(D.residencyId));let le=Ba(ve.getResidency(pe,O));if(le&&!le.includes(server.hostname))if(fe??=pe,B=!0,ve.getResidencyById)pe=void 0;else{pe=null;for(let ae in r)pe||(pe={}),pe[ae]=fe[ae]}se=Yc(le)}C||(fe=T);let ie=O?.expiresAt??(h?h+Date.now():-1);ke.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(w).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),Nu(_,W,pe);let Oe=C?"put":"patch";y(_,pe,L,w,B?Fn:0,g,{omitLocalRecord:B,user:O?.user,residencyId:se,expiresAt:ie,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},Oe,!1,fe),O.expiresAt&&xa()},"commit")};x.addWrite(U)}async delete(_){if(um(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),qs(T,P=>{if(!P)throw new ut.AccessViolation(C.user);let O=Ds(_);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=Br(this.getContext());Hi(_);let P=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:P?.nodeName,before:be.delete?.bind(this,P,_),beforeIntermediate:Ye.delete?.bind(this,P,_),commit:a((O,x,D)=>{let A=x?.value;D&&(P&&x?.version>(P.lastModified||0)&&(P.lastModified=x.version),ve._updateResource(this,x)),!(Fr(O,x,T?.nodeId)<=0)&&(Nu(this.getId(),A),ke.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(O).toISOString()}`),g||R?(y(_,null,x,O,0,g,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||xa()):ul(i,x))},"commit")}),!0}search(_){let T=this.getContext(),C=Br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new ut.AccessViolation(T.user);T&&(T.lastModified=kae);let P=_.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let O=_.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let x,D={};function A(ie,Oe){let le;switch(Oe){case"and":case void 0:if(ie.length<1)throw new Error('An "and" operator requires at least one condition');le=!0;break;case"or":if(ie.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}for(let ae of ie){if(ae.conditions){ae.conditions=A(ae.conditions,ae.operator);continue}let xe=ae[0]??ae.attribute,Ce=xe==null?$:zi(S,xe);if(Ce)(Ce.type||jA[ae.comparator])&&(ae[1]===void 0?ae.value=w(ae.value,Ce):ae[1]=w(ae[1],Ce));else if(xe!=null&&!_.allowConditionsOnDynamicAttributes)throw(0,ut.handleHDBError)(new Error,`${xe} is not a defined attribute`,404);if(ae.chainedConditions)if(ae.chainedConditions.length===1&&(!ae.operator||ae.operator=="and")){let Le=ae.chainedConditions[0],De,pt;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(De=ae,pt=Le):(De=Le,pt=ae),De.comparator!=="lt"&&De.comparator!=="less_than"&&De.comparator!=="le"&&De.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let wt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",xt=De.comparator==="le"||De.comparator==="less_than_equal";ae.comparator=(wt?"ge":"gt")+(xt?"le":"lt"),ae.value=[pt.value,De.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ie}a(A,"prepareConditions");function U(ie,Oe){if(_.enforceExecutionOrder)return ie;for(let le of ie)le.conditions&&(le.conditions=U(le.conditions,le.operator));return ie.length>1&&Oe!=="or"?xae(ie,ug(ve)):ie}a(U,"orderConditions");function w(ie,Oe){return Array.isArray(ie)?ie.map(le=>cS(le,Oe)):cS(ie,Oe)}a(w,"coerceTypedValues");let L=_.operator;(P.length>0||L)&&(P=A(P,L));let q=typeof _.sort=="object"&&_.sort,W;if(q&&L!=="or"){let ie=q.attribute;if(ie==null)throw new ut.ClientError("Sort requires an attribute");if(x=P.find(Oe=>Qu(Oe.attribute)===Qu(ie)),!x){let Oe=zi(S,ie);if(!Oe)throw(0,ut.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not a defined attribute`,404);if(Oe.indexed)x={...q,comparator:"sort"},P.push(x);else if(P.length===0&&!_.allowFullScan)throw(0,ut.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not indexed and not combined with any other conditions`,404)}x&&(x.descending=!!q.descending)}P=U(P,L),q&&(x&&P[0]===x?q.next&&(W={dbOrderedAttribute:q.attribute,attribute:q.next.attribute,descending:q.next.descending,next:q.next.next}):(x&&P.splice(P.indexOf(x),1),W=q));let Q=_.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:P,operator:L,postOrdering:W,selectApplied:!!Q};let B=C.useReadTxn(),Ee=QA(P,L,ve,B,_,T,(ie,Oe)=>fm(ie,Q,T,B,Oe),D),fe=_.ensureLoaded!==!1,pe=ve.transformEntryForSelect(Q,T,B,D,fe,!0),se=ve.transformToOrderedSelect(Ee,Q,W,T,B,pe);return(_.offset||_.limit!==void 0)&&(se=se.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),se.onDone=()=>{se.onDone=null,C.doneReadTxn()},se.selectApplied=!0,se.getColumns=()=>{if(Q){let ie=[];for(let Oe of Q)Oe==="*"?ie.push(...S.map(le=>le.name)):ie.push(Oe.name||Oe);return ie}return S.filter(ie=>!ie.computed&&!ie.relationship).map(ie=>ie.name)},se}static transformToOrderedSelect(_,T,C,P,O,x){let D=new ZE;if(C){_=fm(_,T,P,O,null);let A;D.iterate=function(){let w,L=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),q,W=C.dbOrderedAttribute,Q,B,Ee=!0;function fe(se){let ie=se.next&&fe(se.next),Oe=se.descending;return P.sort=se,(le,ae)=>{let xe=Cu(le,se.attribute,P),Ce=Cu(ae,se.attribute,P),Le=Oe?(0,xl.compareKeys)(Ce,xe):(0,xl.compareKeys)(xe,Ce);return Le===0?ie?.(le,ae)||0:Le}}a(fe,"createComparator");let pe=fe(C);return{async next(){let se;if(w)if(se=w.next(),se.done){if(q)return D.onDone&&D.onDone(),se}else return{value:await x.call(this,se.value)};A=[],Q&&A.push(Q);do if(se=await L.next(),se.done){if(q=!0,A.length)break;return D.onDone&&D.onDone(),se}else{let ie=se.value;if(ie?.then&&(ie=await ie),W){let Oe=Cu(ie,W,P);if(Ee)Ee=!1,B=Oe;else if(Oe!==B){B=Oe,Q=ie;break}}A.push(ie)}while(!0);return C.isGrouped,A.sort(pe),w=A[Symbol.iterator](),se=w.next(),se.done?(D.onDone&&D.onDone(),se):{value:await x.call(this,se.value)}},return(){return D.onDone&&D.onDone(),L.return()},throw(){return D.onDone&&D.onDone(),L.throw()}}};let U=a(w=>{if(typeof T=="object"&&Array.isArray(w.attribute))for(let L=0;L<T.length;L++){let q=T[L],W;if(q.name===w.attribute[0]){for(W=q.sort||(q.sort={});W.next;)W=W.next;W.attribute=w.attribute.slice(1),W.descending=w.descending}else q===w.attribute[0]&&(T[L]=W={name:q,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&U(w.next)},"applySortingOnSelect");U(C)}else D.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),D=D.map(function(A){try{let U=x.call(this,A);return typeof U?.catch=="function"?U.catch(w=>{throw w.partialObject={[t]:A.key},w}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return D}static transformEntryForSelect(_,T,C,P,O,x){let D;O&&I&&!(typeof _=="string"?[_]:_)?.every(w=>{let L;return typeof w=="object"?L=w.name:L=w,r[L]||L===t})&&(D=!0);let A,U=a(function(w){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),w!=null){if(L=w.deref?w.deref():w.value,!L&&(w.key===void 0||w.deref)||w.metadataFlags&Fn){if(w.metadataFlags&Fn&&T.replicateFrom===!1&&x&&w.residencyId)return ac.SKIP;if(w=Lo(w.key??w,T,{transaction:C,lazy:_?.length<4,ensureLoaded:O},this?.isSync,q=>q),w?.then)return w.then(U.bind(this));L=w?.value}if(D&&w?.metadataFlags&(Fn|dl)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:w.key,message:"This entry has expired"};let q=pn(w.key??w,w,T);if(q?.then)return q.then(U)}}if(L==null)return x?ac.SKIP:L;if(_&&!(_[0]==="*"&&_.length===1)){let q,W=a((B,Ee)=>{let fe;typeof B=="object"?fe=B.name:fe=B;let pe=xr?.[fe],se;if(pe){let ie=P?.[fe];if(ie)if(ie.hasMappings){let le=pe.from?L[pe.from]:Qu(w.key);se=ie.get(le),se||(se=[])}else se=ie.fromRecord?.(L);else se=pe(L,T,w,!0);let Oe=a(le=>{if(pe.directReturn)return Ee(le,fe);if(le&&typeof le=="object"){let ae=pe.definition?.tableClass||ve;A||(A={});let xe=A[fe]||(A[fe]=ae.transformEntryForSelect(fe===B?null:B.select||(Array.isArray(B)?B:null),T,C,ie,O));if(Array.isArray(le)){let Ce=[],Le=ae.transformToOrderedSelect(le,B.select,typeof B.sort=="object"&&B.sort,T,C,xe)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),De=a(wt=>{for(;!wt.done;){if(wt?.then)return wt.then(De);Ce.push(wt.value),wt=Le.next()}Ee(Ce,fe)},"nextValue"),pt=De(Le.next());pt&&(q||(q=[]),q.push(pt));return}else if(le=xe.call(this,le),le?.then){q||(q=[]),q.push(le.then(Ce=>Ee(Ce,fe)));return}}Ee(le,fe)},"handleResolvedValue");se?.then?(q||(q=[]),q.push(se.then(Oe))):Oe(se);return}else se=L[fe],se&&typeof se=="object"&&fe!==B&&(se=ve.transformEntryForSelect(B.select||B,T,C,null)({value:se}));Ee(se,fe)},"selectAttribute"),Q;if(typeof _=="string")W(_,B=>{Q=B});else if(Array.isArray(_))if(_.asArray)Q=[],_.forEach((B,Ee)=>{B==="*"?_[Ee]=L:W(B,fe=>Q[Ee]=fe)});else{Q={};let B=_.forceNulls;for(let Ee of _)if(Ee==="*")for(let fe in L)Q[fe]=L[fe];else W(Ee,(fe,pe)=>{fe===void 0&&B&&(fe=null),Q[pe]=fe})}else throw new ut.ClientError("Invalid select"+_);return q?Promise.all(q).then(()=>Q):Q}return L},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],P=nI(ve,this.getId()??null,function(D,A,U,w){try{let L=A.getValue?.(i,T),q=A.type;if(!L&&q==="patch"&&T){let Q=i.getEntry(D);Q?.version===A.version?L=Q.value:L=A.getValue?.(i,!0,U),q="put"}let W={id:D,localTime:U,value:L,version:A.version,type:q,beginTxn:w};C?C.push(W):(c!=="system"&&Ve(A.size??1,"db-message",s,null),this.send(W))}catch(L){ke.default.error?.(L)}},_.startTime||0,_),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,_.onlyChildren&&(P.onlyChildren=!0)),_.supportsTransactions&&(P.supportsTransactions=!0);let D=this.getId(),A=_.previousCount;A>1e3&&(A=1e3);let U=_.startTime;if(this.isCollection){if(U){if(A)throw new ut.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let q=At(L);if(q.tableId!==n)continue;let W=q.recordId;if(D==null||XG(D,W)){let Q=q.getValue(i,T,w);if(x({id:W,localTime:w,value:Q,version:q.version,type:q.type,size:q.size}),P.queue?.length>QG&&await P.waitForDrain()===!1)return}P.startTime=w}}else if(A){let w=[];for(let{key:L,value:q}of l.getRange({start:"z",end:!1,reverse:!0}))try{let W=At(q);if(W.tableId!==n)continue;let Q=W.recordId;if(D==null||XG(D,Q)){let B=W.getValue(i,T,L);if(w.push({id:Q,localTime:L,value:B,version:W.version,type:W.type}),--A<=0)break}}catch(W){ke.default.error("Error getting history entry",L,W)}for(let L=w.length;L>0;)x(w[--L]);w[0]&&(P.startTime=w[0].localTime)}else if(!_.omitCurrent){for(let{key:w,value:L,version:q,localTime:W,size:Q}of i.getRange({start:D??!1,end:D==null?void 0:[D,xl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(x({id:w,localTime:W,value:L,version:q,type:"put",size:Q}),P.queue?.length>QG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===YA&&(i.cache?.delete(D),this.#n=i.getEntry(D),ke.default.trace?.("re-retrieved record",w,this.#n?.localTime),w=this.#n?.localTime),ke.default.trace?.("Subscription from",U,"from",D,w),U<w){let L=[],q=w;do{let W=l.get(q);if(W){_.omitCurrent=!0;let Q=At(W),B=Q.getValue(i,T,q);T&&(Q.type="put"),L.push({id:D,value:B,localTime:q,...Q}),q=Q.previousLocalTime}else break;A&&A--}while(q>U&&A!==0);for(let W=L.length;W>0;)x(L[--W]);P.startTime=w}!_.omitCurrent&&this.doesExist()&&x({id:D,localTime:w,value:this.#e,version:this.#r,type:"put"})}for(let w of C)x(w);C=null})();function x(D){c!=="system"&&Ve(D.size??1,"db-message",s,null),P.send(D)}return a(x,"send"),_.listener&&P.on("data",_.listener),P}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let P=!0,O=this.getContext();return _.checkPermission&&(P=this.allowCreate(O.user,_,O)),qs(P,x=>{if(!x)throw new ut.AccessViolation(O.user);let D=Ds(_);this._writePublish(D,T,C)})}}_writePublish(_,T,C){let P=Br(this.getContext());_??=null,_!==null&&Hi(_);let O=this.getContext();P.addWrite({key:_,store:i,entry:this.#n,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:be.publish?.bind(this,O,_,T),beforeIntermediate:Pu(T,Ye.publish?.bind(this,O,_,T)),commit:a((x,D,A)=>{D===void 0&&R&&!g&&xa(),ke.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,D?.value??null,D,D?.version||x,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,P=a((O,x,D)=>{if(x.type&&O!=null)if(T&&O.__op__&&(O=O.value),x.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an object${x.type?" ("+x.type+")":""}`);let A=x.properties;for(let U=0,w=A.length;U<w;U++){let L=A[U];if(L.relationship||L.computed){_.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${D}.${L.name} may not be directly assigned a value`);continue}let q=P(O[L.name],L,D+"."+L.name);q&&(O[L.name]=q)}if(x.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(w=>w.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${D}`)}else switch(x.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof Ms)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(x.elements)for(let A=0,U=O.length;A<U;A++){let w=O[A],L=P(w,x.elements,D+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an Array`);break}x.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${D} is required (and not does not allow null values)`)},"validateValue");for(let O=0,x=S.length;O<x;O++){let D=S[O];if(D.relationship||D.computed){Object.hasOwn(_,D.name)&&(C||(C=[])).push(`Computed property ${D.name} may not be directly assigned a value`);continue}if(!T||D.name in _){let A=P(_[D.name],D,D.name);A!==void 0&&(_[D.name]=A)}}if(f)for(let O in _)S.find(x=>x.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new ut.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new ut.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new ut.ClientError("Attribute names cannot include backticks or forward slashes");Bae(C.name),T.push(C)}return Xe({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Xe({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=SN.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),x=_?.exactCount,D=0,A=0,U;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&D++,A++,await oc(),!x&&A<O&&performance.now()-P>C){U=A;break}if(U){let w=D;D=0;for(let{value:se}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))se!=null&&D++,await oc();let L=U*2,q=(D+w)/L,W=Math.pow((D-w+1)/U/2,2)+q*(1-q)/L,Q=Math.max(Math.sqrt(W)*T,1),B=Math.round(q*T),Ee=Math.max(B-1.96*Q,D+w),fe=Math.min(B+1.96*Q,T),pe=Math.pow(10,Math.round(Math.log10(Q)));return pe>B&&(pe=pe/10),D=Math.round(B/pe)*pe,{recordCount:D,estimatedRange:[Math.round(Ee),Math.round(fe)]}}return{recordCount:D}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((_,T,C)=>({value:C.key}),"$id"),$updatedtime:a((_,T,C)=>C.version,"$updatedtime"),$updatedTime:a((_,T,C)=>C.version,"$updatedTime"),$expiresAt:a((_,T,C)=>C.expiresAt,"$expiresAt"),$record:a((_,T,C)=>C?{value:_}:_,"$record"),$distance:a((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&($=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),wu=!0,T.to)_.elements?.definition?(xr[_.name]=_.resolve=(P,O,x,D)=>{let A=P[T.from?T.from:t],U=_.elements.definition.tableClass;return D?ju({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(w=>w&&w.key!==void 0?w:U.primaryStore.getEntry(w,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=_.definition||_.elements?.definition;P?(xr[_.name]=_.resolve=(O,x,D,A)=>{let U=O[T.from];if(U===void 0)return;if(_.elements){let L,q=U?.map(W=>{let Q=P.tableClass.primaryStore[A?"getEntry":"get"](W,{transaction:Br(x).getReadTxn()});return Q?.then&&(L=!0),ve.loadAsInstance===!1&&Object.freeze(A?Q?.value:Q),Q});return T.filterMissing?L?Promise.all(q).then(W=>W.filter(ZG)):q.filter(ZG):L?Promise.all(q):q}let w=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(x).getReadTxn()});return ve.loadAsInstance===!1&&Object.freeze(A?w?.value:w),w},_.set=(O,x)=>{if(Array.isArray(x)){let D=x.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=D}else{let D=x.getId?.()||x[P.tableClass.primaryKey];O[T.from]=D}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),xr[_.name]=_.resolve=(P,O,x)=>{let D=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[_.name];if(A)return A(D,O,x);ke.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let P=r[_.name].customIndex;xr[_.name]=(O,x,D)=>{let A=O[_.name];return P.propertyResolver(A,x,D)},xr[_.name].directReturn=!0}}Tp(this,this),Tp(lm,this,!0);for(let _ of S){let T=_.name;_.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,Xu.getStore())},set(C){return _.set(this,C)},configurable:!0,enumerable:_.enumerable}),_.enumerable&&!i.encoder.structPrototype.toJSON&&Object.defineProperty(i.encoder.structPrototype,"toJSON",{configurable:!0,value(){let C={};for(let P in this)C[P]=this[P];return C}}))}}static setComputedAttribute(_,T){let C=zi(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:_}))await oc(),At(O).tableId===n&&(C=z_(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:x,localTime:D}=P;await oc(),x===null&&D<_&&(C=ul(i,P))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:_||1,end:T})){await oc();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:C,version:O.version,type:O.type,value:O.getValue(i,!0,C),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let P=C.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await oc();let x=l.get(P);if(x){let D=At(x);T.push({id:D.recordId,localTime:P,version:D.version,type:D.type,value:D.getValue(i,!0,P),user:D.user}),P=D.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let t_=oS(async(K,_,T)=>{for(let C of ve.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let P=await C.get(K,_);if(P)return P}},()=>{throw new ut.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});ve.updatedAttributes();let wb=ve.prototype;return h&&ve.setTTLExpiration(h/1e3),j&&r_(),ve;function Nu(K,_,T){let C;for(let P in r){let O=r[P],x=O.isIndexing,D=xr[P],A=T&&(D?D(T):T[P]),U=_&&(D?D(_):_[P]);if(A===U&&!x)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let w=O.indexNulls,L=(0,Hp.getIndexedValues)(A,w),q=(0,Hp.getIndexedValues)(U,w);if(q?.length>0){let W=new Set(q);if(L=L?L.filter(Q=>{if(W.has(Q))W.delete(Q);else return!0}):[],q=Array.from(W),(q.length>0||L.length>0)&&WG){let Q=q.concat(L).map(B=>({key:B,value:K}));O.prefetch(Q,JG)}for(let Q=0,B=q.length;Q<B;Q++)O.remove(q[Q],K)}else L?.length>0&&WG&&O.prefetch(L.map(W=>({key:W,value:K})),JG);if(L)for(let W=0,Q=L.length;W<Q;W++)O.put(L[W],K)}return C}a(Nu,"updateIndices");function Hi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>jG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,xl.writeKey)(K,Vae,0)>jG)throw new Error("Primary key size is too large: "+K.length);return!0}a(Hi,"checkValidId");function Ds(K){return typeof K=="object"&&K?K.id:K}a(Ds,"requestTargetToId");function um(K){return typeof K=="object"&&K&&K.isCollection}a(um,"isSearchTarget");function dm(K){}a(dm,"isRequestTarget");function Lo(K,_,T,C,P){if(ve.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=Ba(ve.getResidencyById(K));if(x&&!x.includes(server.hostname)&&N)return N({key:K,residency:x}).then(P)}let O=a(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let x=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(rq.default.trace?.("Recording db-read action for",`${c}.${s}`),Ve(x?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(x?.value),x?.residencyId&&x.metadataFlags&Fn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(x).then(D=>P(D,K),D=>(ke.default.error?.("Error loading remote record",K,x,T,D),P(null,K))):(x&&_&&(x?.version>(_.lastModified||0)&&(_.lastModified=x.version),x?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=x.localTime)),P(x,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((x,D)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ce.push(K),de.push(U),ce.length>e_&&(te--,A()));function A(){if(ce.length>0){let w=de;i.prefetch(ce,()=>{te===-1?A():te++;for(let L of w)L()}),ce=[],de=[],ge>2&&ge--}else te=ge,ge<cm&&ge++}a(A,"prefetch");function U(){try{x(O())}catch(w){D(w)}}a(U,"load")})}a(Lo,"loadLocalRecord");function Dn(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return Kae;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Dn,"getTablePermissions");function pn(K,_,T,C){if(I){let P=!1;if(T.noCache?P=!0:(_?(!_.value||_.metadataFlags&(Fn|dl)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,tn(!P,"cache-hit",s)),P){let O=Ou(K,_,T).then(x=>(x?.value&&x?.value.getRecord?.()&&ke.default.error?.("Can not assign a record that is already a resource"),T&&(x?.version>(T.lastModified||0)&&(T.lastModified=x.version),T.lastRefreshed=Date.now()),x));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(O.catch(x=>ke.default.warn?.(x)),T?.onlyIfCached&&!C.doesExist())throw new ut.ServerError("Entry is not cached",504);return}else return O}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return ve.evict(_.key,_.value,_.version),_.value=null,{then(P){return P(_)}}}a(pn,"ensureLoadedFromSource");function Br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new vo,_.lmdbDb=i,_;_=T}while(!0)}else return new A_}a(Br,"txnForContext");function Cu(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let O=xr,x=C;for(let D=0,A=_.length;D<A;D++){let U=_[D],w=O?.[U];x=w&&x?w(x,T,K):x?.[U],K=null,O=w?.definition?.tableClass?.propertyResolvers}return x}let P=xr[_];return P?P(C,T,K):C[_]}a(Cu,"getAttributeValue");function fm(K,_,T,C,P){let O=P?.length,x={transaction:C,lazy:O>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},D;function A(U,w){let L=U?.value;if(!L)return ac.SKIP;for(let q=0;q<O;q++)if(!D?.includes(q)&&!P[q](L,U))return ac.SKIP;return w!==void 0&&(U.key=w),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(w=>{if(D=null,typeof w=="object"&&w?.key!==void 0)return O>0?A(w):w;if(w==null)return ac.SKIP;for(let L=0;L<O;L++){let W=P[L].idFilter;if(W){if(!W(w))return ac.SKIP;D||(D=[]),D.push(L)}}return Lo(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==ac.SKIP)),U.hasEntries=!0,U}return K}a(fm,"transformToEntries");function Fr(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=_.localTime,O=P&&l.get(P);if(O){let x,D,A=At(O);for(let U in C)C[U]===T&&(x=U),C[U]===A.nodeId&&(D=U);if(x>D)return 1;if(x===D)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function Ou(K,_,T){let C=_?.metadataFlags,P=_?.version,O,x;if(!i.attemptLock(K,P,()=>{clearTimeout(x);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(Fn|dl)?O(Ou(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},qae)});let D=_?.value,A={requestContext:T,replacingRecord:D,replacingEntry:_,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((w,L)=>{let q;qs(bt(A,async W=>{let Q=performance.now(),B,Ee,fe;try{B=await t_(K,A,_),fe=C&Fn;let se=A.lastModified||fe&&P;Ee=fe||se>P||!D,se||(se=(0,Hp.getNextMonotonicTime)());let ie=performance.now()-Q;if(Ve(ie,"cache-resolution",s,null,"success"),U&&Fp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),W.timestamp=se,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=D,se=P;else throw new ut.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==K&&(B[t]=K)}q=!0,w({key:K,version:se,value:B})}catch(se){se.message+=` while resolving record ${K} for ${s}`,D&&((se.code==="ECONNRESET"||se.code==="ECONNREFUSED"||se.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(se.statusCode===500||se.statusCode===502||se.statusCode===503||se.statusCode===504))?(w({key:K,version:P,value:D}),ke.default.trace?.(se.message,"(returned stale record)")):L(se);let ie=performance.now()-Q;Ve(ie,"cache-resolution",s,null,"fail"),U&&Fp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:_,nodeName:"source",before:Pu(B),commit:a((se,ie)=>{if(ie?.version!==P)return;let Oe=Nu(K,D,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=ve.getResidencyRecord(ie.residencyId));let le,ae=!1,xe,Ce=Ba(ve.getResidency(B,T));if(Ce){if(!Ce.includes(server.hostname))if(le=B,ae=!0,ve.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=le[Le]}xe=Yc(Ce)}ke.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(se).toISOString()}`),y(K,B,ie,se,ae?Fn:0,g&&(Ee||ae)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:xe,tableToTrack:s},"put",!!fe,le)}else ie&&(Ye.delete?.(A,K),ke.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(se).toISOString()}`),g||R?y(K,null,ie,se,0,g&&Ee||null,{user:A?.user,tableToTrack:s},"delete",!!fe):ul(i,ie,P))},"commit")})}),()=>{i.unlock(K,P)},W=>{i.unlock(K,P),q&&ke.default.error?.("Error committing cache update",W)})})}a(Ou,"getFromSource");function Ua(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new ut.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new ut.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Ua,"checkContextPermissions");function xa(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(qe===er&&!_)&&(er=qe,(0,Ml.getWorkerIndex)()===(0,Ml.getWorkerCount)()-1))return Qr&&clearTimeout(Qr),qe?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=qe/(1+Ar),O=_?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),x=a(D=>{ke.default.trace?.(`Scheduled next cleanup scan at ${new Date(D)}`),Qr=setTimeout(()=>ee=ee.then(async()=>{if(x(Math.max(D+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qr);return}let A=50,U=new Array(A),w=0,L=Math.pow(Ar,8)*(Ul.get(F.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),q=E/Math.pow(Math.max(Ar,1),4);ke.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${q}ms`);function W(Q,B,Ee,fe){let pe=Q+q-Date.now();if(pe<0)return!0;if(Ar){let se=i.lastSize;return Ee&Zr&&el(fe,ie=>{ie.size&&(se+=ie.size)}),ke.default.trace?.(`shouldEvict adjusted ${pe} ${se}, ${pe*(Q-B)/se} < ${L}`),pe*(Q-B)/se<L}return!1}a(W,"shouldEvict");try{let Q=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:fe,version:pe,expiresAt:se,metadataFlags:ie}=B,Oe;fe===null&&!g&&pe+Gae<Date.now()?Oe=ul(i,B,pe):se!=null&&W(se,pe,ie,fe)&&(Oe=ve.evict(Ee,fe,pe),Q++),Oe&&(await U[w],U[w]=Oe.catch(le=>{ke.default.error?.("Cleanup error",le)}),++w>=A&&(w=0)),await oc()}ke.default.debug?.(`Finished cleanup scan for ${s}, evicted ${Q} entries`)}catch(Q){ke.default.warn?.(`Error in cleanup scan for ${s}:`,Q)}T(void 0),Ar=0}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");x(O)}):void 0}a(xa,"scheduleCleanup");function mm(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}a(mm,"addDeleteRemoval");function r_(){(0,Ml.getWorkerIndex)()===0&&setInterval(async()=>{if(!Kc){Kc=!0;try{let K=j.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&ve.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>_.remove(T,C))}await oc()}}catch(K){ke.default.error?.("Error in evicting old records",K)}finally{Kc=!1}}},Hae).unref()}a(r_,"runRecordExpirationEviction");function Ba(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return ke.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(Ba,"residencyFromFunction");function Yc(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Yc,"getResidencyId");function Pu(K,_){let T=_A(K,i.rootStore);if(T){let C=_;return C?async()=>{await C(),await T}:()=>T}return _}a(Pu,"preCommitBlobsForRecordBefore")}function gN(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 JG(){}function cS(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 aS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return aS(+e);case"Float":return e==="null"?null:aS(+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;Yae.test(e)||(e+="Z");let n=new Date(e);return aS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,lS.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function aS(e){if(isNaN(e))throw new SyntaxError;return e}function XG(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 qs(e,t,r){return e?.then?e.then(t,r):t(e)}function ZG(e){return e!=null}function $s(e){try{return JSON.stringify(e)}catch{return e}}function Wae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var ac,Hp,eq,tq,Ul,ut,Gp,qp,ke,xl,Ml,lS,SN,rq,xae,Bae,Fae,kae,Hae,Gae,WG,qae,zG,$ae,Fn,dl,Vae,jG,QG,Kae,LMe,Yae,oc,mg=ne(()=>{H();ac=require("lmdb"),Hp=b(Un()),eq=b(require("lodash")),tq=b(Cm());Vo();Pm();Ul=b(me());sI();ut=b(_e()),Gp=b(Wo()),qp=b(ls());we();fg();ke=b(wr());fw();Ga();xl=require("ordered-binary"),Ml=b(nt());$i();lS=b(oe());al();is();N_();kp();SN=b(require("node:fs"));ss();V_();rq=b(J());_N();({sortBy:xae}=eq.default),{validateAttribute:Bae}=tq.default,Fae=new Uint8Array(9);Fae[8]=192;kae=1/0,Hae=6e4,Gae=864e5;Ul.initSync();WG=Ul.get(F.STORAGE_PREFETCHWRITES),qae=1e4,zG=1,$ae=2,Fn=1,dl=8,Vae=Buffer.allocUnsafeSlow(8192),jG=1978,QG=100,Kae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},LMe=(0,lS.convertToMS)(Ul.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(uS,"makeTable");a(gN,"attributesAsObject");a(JG,"noop");Yae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(cS,"coerceType");a(aS,"rejectNaN");a(XG,"isDescendantId");oc=a(()=>new Promise(setImmediate),"rest");a(qs,"when");a(ZG,"exists");a($s,"stringify");a(Wae,"hasOtherProcesses")});function dS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,o=t[s]||0,c=i-o;r+=c*c}return r}function fS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let o=0;o<i;o++){let c=e[o]||0,l=t[o]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var sq=ne(()=>{a(dS,"euclideanDistance");a(fS,"cosineDistance")});var iq,oq,Ad,co,bd,zae,jae,mS,aq=ne(()=>{sq();iq=require("msgpackr"),oq=b(wr()),Ad=b(_e()),co=(0,oq.loggerWithTag)("HNSW"),bd=Symbol.for("entryPoint"),zae=Symbol.for("key"),jae=10,mS=class{static{a(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=iq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?dS:fS,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[zae,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let o=new Map,c,l=this.indexStore.get(bd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);co.debug?.("setting entry point to",i),this.indexStore.put(bd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),jae),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);co.debug?.("setting entry point to",i),this.indexStore.put(bd,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&co.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<g.length;S++){let{id:y,distance:N,node:I}=g[S];if(y===i)continue;let $=[];if(this.optimizeRouting){let k=!1,j=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let ce=0;ce<j.length;ce++){let{id:de,distance:te}=j[ce],ge=1+this.optimizeRouting*(1+.5*ce/this.M);for(let be=0;be<R.length;be++){let{id:Ye,distance:qe}=R[be];if(Ye===de){N*Y>qe+te?k=!0:te*ge>N+qe&&($.push({fromId:Ye,toId:y}),$.push({fromId:y,toId:Ye}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:N});for(let{fromId:k,toId:j}of $){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let ce=0;ce<Y[E].length;ce++)if(Y[E][ce].id===j){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(ce,1);break}}let ee=c[E],G=ee?.find(({id:k})=>k===y);if(G){let k=ee?.indexOf(G);ee.copied||(ee=[...ee],ee.copied=!0,c[E]=ee),ee.splice(k,1)}else this.addConnection(y,d(y,I),i,E,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(bd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);co.debug?.("setting entry point to",l),this.indexStore.put(bd,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(co.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=o.get(f);return!p&&m&&(p={...m},o.set(f,p)),p}a(d,"updateNode");for(let[f,m]of o)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(bd);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,o=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=o(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let o=0;switch(i){case"lt":case"le":o=r;case"sort":break;default:throw new Ad.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Ad.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=fS;else if(s==="euclidean")c=dS;else{if(s)throw new Ad.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Ad.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Ad.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return o&&(d=d.filter(f=>f.distance<o)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let o=this.indexStore.get(i);if(!o){co.info?.("could not find neighbor node",o);continue}o[n]?.find(({id:l})=>l==t)||co.info?.("asymmetry detected",o[n])}n++}}addConnection(t,r,n,s,i,o){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){co.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=o(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=o(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&co.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?co.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let o=s.shift(),c=this.indexStore.get(o);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let o=this.distance;s.type&&(o=s.distance==="euclidean"?dS:fS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var TN,cq=ne(()=>{aq();TN={HNSW:mS}});var ft={};ye(ft,{NON_REPLICATING_SYSTEM_TABLES:()=>pS,database:()=>ud,databaseEnvs:()=>Xo,databases:()=>Me,dropDatabase:()=>_w,dropTableMeta:()=>tce,getDatabases:()=>ct,getDefaultCompression:()=>yS,getTables:()=>Jae,onRemovedDB:()=>jp,onUpdatedTable:()=>Bl,readMetaDb:()=>$p,resetDatabases:()=>Od,table:()=>Xe,tables:()=>Rn});function zp(e,t){let r=SS.OpenDBIObject??SS.default.OpenDBIObject;return new r(e,t)}function Jae(){return gS||ct(),Rn||{}}function ct(){if(gS)return Me;gS=!0,Nd=new Map;let e=(0,zt.getHdbBasePath)()&&(0,kt.join)((0,zt.getHdbBasePath)(),jc),t=(0,zt.get)(F.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(F.STORAGE_PATH)||e&&((0,gs.existsSync)(e)?e:(0,kt.join)((0,zt.getHdbBasePath)(),l_)),!!e){if((0,gs.existsSync)(e))for(let r of(0,gs.readdirSync)(e,{withFileTypes:!0})){let n=(0,kt.basename)(r.name,".mdb");r.isFile()&&(0,kt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&$p((0,kt.join)(e,r.name),null,n)}if((0,gs.existsSync)((0,wd.getBaseSchemaPath)())){for(let r of(0,gs.readdirSync)((0,wd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,kt.join)((0,wd.getBaseSchemaPath)(),r.name),s=(0,kt.join)((0,wd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,gs.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,kt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,kt.join)(s,i.name);$p((0,kt.join)(n,i.name),(0,kt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,gs.existsSync)(s))for(let o of(0,gs.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,kt.extname)(o.name).toLowerCase()===".mdb"&&$p((0,kt.join)(s,o.name),(0,kt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,kt.join)(c.path,(0,kt.basename)(o+".mdb"));(0,gs.existsSync)(l)&&$p(l,o,r,null,!0)}}for(let r in Me){let n=Nd.get(r);if(n){let s=Me[r];r.includes("delete")&&Or.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Or.trace(`delete table class ${i}`),delete s[i])}else if(delete Me[r],r==="data"){for(let s in Rn)delete Rn[s];delete Rn[TS]}}if((0,zt.get)(F.ANALYTICS_REPLICATE)===!1?pS.includes("hdb_analytics")||pS.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let r of pS)Me.system[r]&&(Me.system[r].replicate=!1);return Nd=null,Me}}function Od(){gS=!1;for(let[,e]of Xo)e.needsDeletion=!0;ct();for(let[e,t]of Xo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Xo.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Kp.forEach(i=>i(t.databaseName));break}}return Me}function $p(e,t,r=bN,n,s){let i=new yN.default(e,!1);try{let o=Xo.get(e);o?o.needsDeletion=!1:(o=(0,Cd.open)(i),Xo.set(e,o));let c=new zp(!1),l=o.dbisDb||(o.dbisDb=o.openDB(hS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,gs.existsSync)(n)&&(i.path=n,u=(0,Cd.open)(i),u.isLegacy=!0):u=W_(o));let d=mq(r),f=d[TS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(g==null||h.is_hash_attribute)&&(R.primary=h),g!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){g=te;break}if(!g){Or.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],N,I,$=typeof g.audit=="boolean"?g.audit:(0,zt.get)(F.LOGGING_AUDITLOG),ee=g.trackDeletes,G=g.expiration,k=g.eviction,j=g.sealed,Y=g.splitSegments,ce=g.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{N=g.tableId,N?N>=(l.get(Id)||0)&&(l.putSync(Id,N+1),Or.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(Id),N||(N=1),Or.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Id,N+1),l.putSync(g.key,g));let te=new zp(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ge=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||fq;te.compression.threshold=ge}I=cg(o.openDB(g.key,te),o),o.databaseName=r,I.tableId=N}let de;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let be=hq(te.key,o,te);S[te.name]=be,S[te.name].indexNulls=te.indexNulls}let ge=y.find(be=>be.name===te.name);ge?y.splice(y.indexOf(ge),1,te):y.push(te),de=!0}}catch(ge){Or.error("Error trying to update attribute",te,y,S,ge)}}for(let te of y)if(!E.find(be=>be.name===te.name)){if(te.is_hash_attribute){Or.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),de=!0)}if(R)de&&(R.schemaVersion++,R.updatedAttributes());else{R=pq(d,p,uS({primaryStore:I,auditStore:u,audit:$,sealed:j,splitSegments:Y,replicate:ce,expirationMS:G&&G*1e3,evictionMS:k&&k*1e3,trackDeletes:ee,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of Vp)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function mq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=Rn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),Nd&&!Nd.has(e)){let r=new Set;t[TS]=r,Nd.set(e,r)}return t}function pq(e,t,r){return e[t]=r,r}function ud({database:e,table:t}){e||(e=bN),ct();let r=mq(e),n=(0,kt.join)((0,zt.getHdbBasePath)(),jc),s=(0,zt.get)(F.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,zt.get)(F.STORAGE_PATH)||((0,gs.existsSync)(n)?n:(0,kt.join)((0,zt.getHdbBasePath)(),l_));let o=(0,kt.join)(n,(i?t:e)+".mdb"),c=Xo.get(o);if(!c||c.status==="closed"){let l=new yN.default(o,!1);c=(0,Cd.open)(l),Xo.set(o,c)}return c.auditStore||(c.auditStore=W_(c)),c}async function _w(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Xo.delete(r.path),r.status==="open"&&(await r.close(),await Yp.remove(r.path));if(r||(r=ud({database:e,table:null}),r.status==="open"&&(await r.close(),await Yp.remove(r.path))),e==="data"){for(let n in Rn)delete Rn[n];delete Rn[TS]}delete Me[e],Kp.forEach(n=>n(e)),await EA(r)}function hq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&TN[r.indexed.type]?.useObjectStore,s=new zp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=TN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Or.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=bN);let h=ud({database:r,table:t}),E=Me[r];Or.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let N=new zp(!1);for(let Y of o)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let I,$;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(ge=>ge.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=yS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,zt.get)(F.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Or.trace(`${t} table loading, opening primary store`);let ce=new zp(!1,!0);ce.compression=S.compression;let de=t+"/";if(y=h.dbisDb=h.openDB(hS.INTERNAL_DBIS_NAME,N),j(),y.get(de))return $&&$(),Od(),Xe(e);let te=cg(h.openDB(de,ce),h);h.databaseName=r,te.tableId=y.get(Id),Or.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Id,te.tableId+1),S.tableId=te.tableId,g=pq(E,t,uS({primaryStore:te,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,I=!0,y.put(de,S)}let ee=g.indices;y=y||(h.dbisDb=h.openDB(hS.INTERNAL_DBIS_NAME,N)),g.dbisDB=y;let G=[];for(let{key:Y,value:ce}of y.getRange({start:!0})){let[de,te]=Y.toString().split("/");if(te===""&&(te=ce.name),te){if(de!==t)continue}else continue;let ge=o.find(Ye=>Ye.name===te),be=!ge?.indexed&&ce.indexed&&!ce.isPrimaryKey;if((!ge||be)&&(j(),I=!0,ge||y.remove(Y),be)){let Ye=g.indices[de];Ye&&G.push(Ye)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let ce=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:ce,configurable:!0});let de=y.get(ce);if(Y.isPrimaryKey){if(de=de||y.get(ce=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+de.expiration||void 0)||(+s||void 0)!==(+de.eviction||void 0)||Y.type!==de.type){let ge={...de};typeof c=="boolean"&&(c&&g.enableAuditing(c),ge.audit=c),n&&(ge.expiration=+n),s&&(ge.eviction=+s),l!==void 0&&(ge.sealed=l),d!==void 0&&(ge.replicate=d),Y.type&&(ge.type=Y.type),I=!0,j(),y.put(ce,ge)}continue}de?.attribute&&!de.name&&(de.indexed=!0);let te=!de||de.type!==Y.type||JSON.stringify(de.indexed)!==JSON.stringify(Y.indexed)||de.nullable!==Y.nullable||de.version!==Y.version||de.enumerable!==Y.enumerable||JSON.stringify(de.properties)!==JSON.stringify(Y.properties)||JSON.stringify(de.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let ge=hq(ce,h,Y);(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<Wp.workerData?.restartNumber)&&(I=!0,j(),de=y.get(ce),(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<Wp.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=de?.lastIndexedKey??void 0,Y.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:ge}),k.push(Y))),y.put(ce,Y)),de?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),ge.indexNulls=Y.indexNulls,ee[Y.name]=ge}else te&&(I=!0,j(),y.put(ce,Y))}}finally{$&&$()}if(I&&(g.schemaVersion++,g.updatedAttributes()),Or.trace(`${t} table loading, running index`),k.length>0||G.length>0?g.indexingOperation=ece(g,k,G):I&&ES.signalSchemaChange(new _S.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let Y of Vp)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Or.trace(`${t} table loaded`),g;function j(){$||h.transactionSync(()=>({then(Y){$=Y}}))}a(j,"startTxn")}async function ece(e,t,r){try{Or.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await ES.signalSchemaChange(new _S.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 f of t)(0,Cd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let N=(0,lq.getIndexedValues)(y);if(N)for(let I=0,$=N.length;I<$;I++)R.put(N[I],f)}catch(S){o[g]||(o[g]=!0,Or.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Or.error(h)}),Wp.workerData&&Wp.workerData.restartNumber!==dq.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>Xae?await s:d>Zae&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await ES.signalSchemaChange(new _S.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Or.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Or.error("Error in indexing",n)}}function tce({table:e,database:t}){let r=ud({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 Bl(e){return Vp.push(e),{remove(){let t=Vp.indexOf(e);t>-1&&Vp.splice(t,1)}}}function jp(e){return Kp.push(e),{remove(){let t=Kp.indexOf(e);t>-1&&Kp.splice(t,1)}}}function yS(){let e=(0,zt.get)(F.STORAGE_COMPRESSION),t=(0,zt.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||fq,n={startingOffset:32};return t&&(n.dictionary=Yp.readFileSync(t)),r&&(n.threshold=r),e&&n}var zt,hS,Cd,kt,gs,wd,yN,Yp,RN,lq,ES,_S,Wp,uq,dq,SS,Qae,Or,bN,TS,fq,pS,Rn,Me,Id,Vp,Kp,gS,Xo,Nd,Xae,Zae,we=ne(()=>{zt=b(me()),hS=b(Yt()),Cd=require("lmdb"),kt=require("path"),gs=require("fs"),wd=b(Rt());mg();yN=b(rp());H();Yp=b(require("fs-extra")),RN=b(ci()),lq=b(Un()),ES=b(Wo()),_S=b(ls()),Wp=require("worker_threads"),uq=b(J()),dq=b(nt());$i();al();ss();cq();SS=b(tp()),{forComponent:Qae}=uq.default;a(zp,"OpenDBIObject");Or=Qae("storage"),bN="data",TS=Symbol("defined-tables"),fq=((0,zt.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,zt.initSync)();pS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],Rn=Object.create(null),Me=Object.create(null);(0,RN._assignPackageExport)("databases",Me);(0,RN._assignPackageExport)("tables",Rn);Id=Symbol.for("next-table-id"),Vp=[],Kp=[],Xo=new Map;a(Jae,"getTables");a(ct,"getDatabases");a(Od,"resetDatabases");a($p,"readMetaDb");a(mq,"ensureDB");a(pq,"setTable");a(ud,"database");a(_w,"dropDatabase");a(hq,"openIndex");a(Xe,"table");Xae=1e3,Zae=10;a(ece,"runIndexing");a(tce,"dropTableMeta");a(Bl,"onUpdatedTable");a(jp,"onRemovedDB");a(yS,"getDefaultCompression")});var wN={};ye(wN,{loadGQLSchema:()=>sce,start:()=>IN,startOnMainThread:()=>nce});function IN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=o(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let $=function(G){if(G.kind==="NonNullType"){let Y=$(G.type);return Y.nullable=!1,Y}if(G.kind==="ListType")return{type:"array",elements:$(G.type)};let j={type:G.name?.value};return Object.defineProperty(j,"location",{value:G.loc.startToken}),j};a($,"getProperty");let S=R.name.value,y=[],N={table:null,database:null,properties:y};m.set(S,N),i.allTypes.set(S,N);for(let G of R.directives){if(G.name.value==="table"){for(let j of G.arguments)N[j.name.value]=j.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(G.name.value==="sealed"&&(N.sealed=!0),G.name.value==="splitSegments"&&(N.splitSegments=!0),G.name.value==="replicate"&&(N.replicate=!0),G.name.value==="export"){N.export=!0;for(let j of G.arguments)typeof N.export!="object"&&(N.export={}),N.export[j.name.value]=j.value.value}}let I=!1,ee={};for(let G of R.fields){let k=$(G.type);k.name=G.name.value,y.push(k),ee[k.name]=void 0;for(let j of G.directives){let Y=j.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",j.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let ce={};for(let de of j.arguments||[])ce[de.name.value]=de.value.value;k.indexed=ce}else if(Y==="computed"){for(let ce of j.arguments||[])if(ce.name.value==="from"){let de=ce.value.value;k.computed={from:g(de,ce,ee)},k.version==null&&(k.version=de)}else ce.name.value==="version"&&(k.version=ce.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let ce={};for(let de of j.arguments)ce[de.name.value]=de.value.value;k.relationship=ce}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="enumerable")k.enumerable=!0;else if(Y==="allow"){let ce=k.authorizedRoles=[];for(let de of j.arguments)de.name.value==="role"&&ce.push(de.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,j.loc)}}N.type=S,S==="Query"&&(h=N)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):rce.includes(R.type)||(0,_q.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,AN.dirname)(n),R.tableClass):i.set((0,AN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new Eq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(g,"createComputedFrom")}}var AN,Eq,_q,rce,nce,sce,gq=ne(()=>{AN=require("path"),Eq=require("node:vm");we();_q=b(nt());za();rce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable"]);a(IN,"start");nce=IN,sce=a(e=>IN({ensureTable:Xe}).handleFile(e,null,null,new ed),"loadGQLSchema")});var CN={};ye(CN,{start:()=>mce});function ice(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new Kr(`Unexpected non-executable definition type ${e.kind}.`)}function Sq(e){if(typeof e!="object"||e===null)throw new lo("Request body must be an object.");if(!("query"in e))throw new lo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new lo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new lo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new lo("Request body `operationName` field must be a string.")}function NN(e){return parseInt(e.value,10)}function yq(e){return parseFloat(e.value)}function Rq(e,t,r){let n=r.get(e.name.value);return bq(n)?Aq(n,t):{attribute:t,value:n}}function bq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Aq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],bq(n)?Aq(n,t):{attribute:t,value:n}))}function oce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:NN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:yq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return Rq(e.value,t,r);case He.Kind.OBJECT:return Iq(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.value.kind}, is not supported.`)}}function Iq(e,t,r){return e.fields.flatMap(n=>oce(n,t,r))}function ace(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:NN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:yq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return Rq(e.value,e.name.value,t);case He.Kind.OBJECT:return Iq(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Argument type, ${e.value.kind}, is not supported.`)}}function cce(e,t){return e.flatMap(r=>ace(r,t))}function RS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Kr(`Fragment \`${n}\` not found.`);return RS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return RS(r.selectionSet,t)}})}function wq(e,t){return RS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:wq(r.selectionSet,t)}:r.name.value)}async function lce(e,t,r,n){let s=Bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Kr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:wq(e.selectionSet,r),conditions:cce(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 Nq(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return NN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:Nq(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.kind}, is not supported.`)}}function uce(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=Nq(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Kr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function dce(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new Kr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new Kr("Mutations are not supported yet.");let s=uce(e.variableDefinitions,t),i=await Promise.all(RS(e.selectionSet,r).map(c=>lce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function Tq({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(ice(u),u.kind===He.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Kr("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 Kr(`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 Kr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Kr(`Operation \`${r}\` not found.`);let l=await dce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function fce(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 Sq(r),Tq(r,e)}case"POST":{let r=await Bo(e.headers.get("content-type"),!0)(e._nodeRequest);return Sq(r),Tq(r,e)}default:throw new lo("Method Not Allowed",405,{Allow:"GET, POST"})}}function mce(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await fce(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof lo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Kr)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 lo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Kr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,Kr,lo,Cq=ne(()=>{He=b(require("graphql"));Fo();za();a(ice,"assertExecutableDefinitionNode");a(Sq,"assertRequestParams");a(NN,"processIntValueNode");a(yq,"processFloatValueNode");a(Rq,"processVariableNode");a(bq,"isObject");a(Aq,"transformObjectIntoQueryCondition");a(oce,"processObjectFieldNode");a(Iq,"processObjectValueNode");a(ace,"processArgumentNode");a(cce,"buildConditionsQuery");a(RS,"fillInFragments");a(wq,"buildSelectQuery");a(lce,"processFieldNode");a(Nq,"processConstValueNode");a(uce,"resolveVariables");a(dce,"executeOperation");a(Tq,"resolver");Kr=class extends Error{static{a(this,"GraphQLQueryingError")}},lo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(fce,"graphqlQueryingHandler");a(mce,"start")});var Mq=M((ZMe,vq)=>{var Pd=require("validate.js"),Pq=mt(),Ld=(H(),v(z)),{handleHDBError:pce,hdbErrors:hce}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:Ece}=hce,ON=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),_ce={STRUCTURE_USER:"structure_user"},Oq=Object.values(Ld.ROLE_TYPES_ENUM),gce="attribute_permissions",Sce="attribute_name",{PERMS_CRUD_ENUM:Dd}=Ld,Tce=[gce,...Object.values(Dd)],Lq=[Dd.READ,Dd.INSERT,Dd.UPDATE],yce=[Sce,...Lq];function Rce(e){let t=ON();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Dq(e,t)}a(Rce,"addRoleValidation");function bce(e){let t=ON();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Dq(e,t)}a(bce,"alterRoleValidation");function Ace(e){let t=ON();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Pq.validateObject(e,t)}a(Ace,"dropRoleValidation");var Ice=["operation","role","id","permission","hdb_user","access"];function Dq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Ice.includes(n[o])||s.push(n[o]);s.length>0&&pr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=Pq.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{pr(o,r)}),e.permission){let o=wce(e);o&&pr(o,r),Oq.forEach(c=>{e.permission[c]&&!Pd.isBoolean(e.permission[c])&&pr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Oq.indexOf(o)<0){if(o===_ce.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||pr(sr.SCHEMA_NOT_FOUND(f),r)}continue}pr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){pr(sr.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){pr(sr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Tce.includes(d)||pr(sr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Dd).forEach(d=>{Pd.isDefined(u[d])?Pd.isBoolean(u[d])||pr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):pr(sr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){pr(sr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){pr(sr.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!yce.includes(E)&&E!==Dd.DELETE&&pr(sr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Pd.isDefined(p.attribute_name)){pr(sr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){pr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}Lq.forEach(E=>{Pd.isDefined(p[E])?Pd.isBoolean(p[E])||pr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):pr(sr.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;pr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return Nce(r)}a(Dq,"customValidate");vq.exports={addRoleValidation:Rce,alterRoleValidation:bce,dropRoleValidation:Ace};function wce(e){let{operation:t,permission:r}=e;if(t===Ld.OPERATIONS_ENUM.ADD_ROLE||t===Ld.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 sr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ld.ROLE_TYPES_ENUM.SUPER_USER:Ld.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(wce,"validateNoSUPerms");function Nce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:sr.ROLE_PERMS_ERROR,...e};return pce(new Error,n,Ece.BAD_REQUEST)}else return null}a(Nce,"generateRolePermResponse");function pr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(pr,"addPermError")});var Jp=M((rUe,Fq)=>{"use strict";var Uq=Vn(),xq=gn(),Cce=Nl(),LN=Mq(),DN=Wo(),tUe=require("uuid").v4,Oce=require("util"),bS=(H(),v(z)),Pce=oe(),vN=xq.searchByValue,Lce=xq.searchByHash,Dce=Oce.promisify(Cce.delete),vce=mi(),Mce=cd(),{hdbErrors:Uce,handleHDBError:Fl}=_e(),{HDB_ERROR_MSGS:Bq,HTTP_STATUS_CODES:Qp}=Uce,{UserEventMsg:MN}=ls();Fq.exports={addRole:xce,alterRole:Bce,dropRole:Fce,listRoles:kce};function PN(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(PN,"scrubRoleDetails");async function xce(e){let t=LN.addRoleValidation(e);if(t)throw t;e=PN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await vN(r)||[])}catch(i){throw Fl(i)}if(n&&n.length>0)throw Fl(new Error,Bq.ROLE_ALREADY_EXISTS(e.role),Qp.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 Uq.insert(s),DN.signalUserChange(new MN(process.pid)),e=PN(e),e}a(xce,"addRole");async function Bce(e){let t=LN.alterRoleValidation(e);if(t)throw t;e=PN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Uq.update(r)}catch(s){throw Fl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Fl(new Error,"Invalid role id",Qp.BAD_REQUEST,void 0,void 0,!0);return await DN.signalUserChange(new MN(process.pid)),e}a(Bce,"alterRole");async function Fce(e){let t=LN.dropRoleValidation(e);if(t)throw Fl(new Error,t,Qp.BAD_REQUEST,void 0,void 0,!0);let r=new Mce(bS.SYSTEM_SCHEMA_NAME,bS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Lce(r));if(n.length===0)throw Fl(new Error,Bq.ROLE_NOT_FOUND,Qp.NOT_FOUND,void 0,void 0,!0);let s=new vce(bS.SYSTEM_SCHEMA_NAME,bS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await vN(s)),o=!1;if(Pce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Fl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Qp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Dce(c),DN.signalUserChange(new MN(process.pid)),`${n[0].role} successfully deleted`}a(Fce,"dropRole");async function kce(){return vN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(kce,"listRoles")});var UN={};ye(UN,{start:()=>Gq,startOnMainThread:()=>qce});function Gq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,kq.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(Hce.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Gce(i)}}}async function Gce(e){let t=ct().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Hq.isEqual)(i,e)?void 0:(e.id=r.id,(0,AS.alterRole)(e))}return(0,AS.addRole)(e)}var AS,kq,Hq,Hce,qce,qq=ne(()=>{we();AS=b(Jp()),kq=require("yaml"),Hq=require("lodash"),Hce=["super_user","cluster_user","structure_user"];a(Gq,"start");a(Gce,"ensureRole");qce=Gq});async function IS(e){let t=(0,Kq.pathToFileURL)(e).toString();if($ce)return Xp||(Xp=Vce(Yce)),(await(await Xp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Vce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Xp=new Compartment({console,Math,Date,fetch:Kce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Vq.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=lr,s.tables=Rn,s.databases=Me}};let n=await(0,$q.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Xp}function Kce(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 Yce(){return{Resource:lr,tables:Rn}}var $q,Vq,Kq,$ce,Xp,xN=ne(()=>{Vo();we();$q=require("fs/promises"),Vq=require("path"),Kq=require("url"),$ce=!1;a(IS,"secureImport");a(Vce,"getCompartment");a(Kce,"secureOnlyFetch");a(Yce,"getGlobalVars")});var BN={};ye(BN,{handleApplication:()=>Wce,suppressHandleApplicationWarning:()=>zce});function Yq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Wce(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}IS(t.absolutePath).then(r=>{let n=(0,wS.dirname)(t.urlPath);Yq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),Wq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function Wq(e,t,r){for(let n in t){let s=t[n],i=(0,wS.join)(r,n);Yq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&Wq(e,s,i)}}var wS,zce,zq=ne(()=>{xN();wS=require("path");a(Yq,"isResource");a(Wce,"handleApplication");a(Wq,"recurseForResources");zce=!0});var kN={};ye(kN,{start:()=>jce});function jce({resources:e}){e.set("login",FN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var FN,jq=ne(()=>{Vo();a(jce,"start");FN=class extends lr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});function CS(e,t){let r={openapi:Qce,info:{title:"HarperDB HTTP REST interface",version:t$.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)NS[l.type]?o[l.name]=new GN(NS[l.type],l.type):l.properties?(o[l.name]=new n$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new ele(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new e$(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let k=e.allTypes.get(i.path);u=k.sealed,l=k.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:k,name:j,elements:Y,relationship:ce,definition:de,nullable:te}of l){let ge=de??Y?.definition;ge&&s(ge),te===!1&&h.push(j),ce?k==="array"?m[j]={type:"array",items:{$ref:Vs+Y.type}}:m[j]={$ref:Vs+k}:ge?k==="array"?m[j]={type:"array",items:{$ref:Vs+ge.type}}:m[j]={$ref:Vs+ge.type}:k==="array"?Y.type==="Any"?m[j]={type:"array",items:{format:Y.type}}:m[j]={type:"array",items:new GN(NS[Y.type],Y.type)}:k==="Any"?m[j]={format:k}:m[j]=new GN(NS[k],k),p.push(new qN(j,"query",m[j]))}let E=Object.keys(m),g=new qN(f,"path",{type:"string",format:"ID"});g.required=!0,g.description="primary key of record";let R=new qN("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new e$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",N=typeof d.get=="function",I=typeof d.delete=="function",$=typeof d.patch=="function",ee=`/${o}/`;r.paths[ee]||(r.paths[ee]={}),S&&(r.paths[ee].post=new Jce(c,n,{200:new vd({$ref:Vs+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[ee].options=new Qq(p,n,{200:new Jq},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[ee].get=new HN(p,n,{200:new vd({type:"array",items:{$ref:Vs+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[ee].delete=new Zq(p,n,"delete all the records that match the provided query",{204:new Xq}));let G="/"+o+"/{"+f+"}";if(r.paths[G]||(r.paths[G]={}),r.paths[G].options=new Qq(p,n,{200:new Jq},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[G].get=new HN([g],n,{200:new vd({$ref:Vs+c})},"retrieve a record by its primary key")),y&&(r.paths[G].put=new Xce([g],n,c,{200:new vd({$ref:Vs+c})},"create or update the record with the URL path that maps to the record's primary key")),$&&(r.paths[G].patch=new Zce([g],n,c,{200:new vd({$ref:Vs+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[G].delete=new Zq([g],n,"delete a record with the given primary key",{204:new Xq})),N&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new HN([g,R],n,{200:new vd({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function Jce(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Vs+e}}}},this.security=t,this.responses=r}function HN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Qq(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Jq(){this.description=r$,this.headers={},this.content={}}function vd(e,t){this.description=r$,this.content={"application/json":{schema:e}},this.headers=t}function Xq(){this.description="successfully processed request, no content returned to client"}function Xce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function Zce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function Zq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function e$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function GN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function n$(e){this.$ref=`#/components/schemas/${e}`}function ele(e){this.type="array",this.items=new n$(e)}function qN(e,t,r){this.name=e,this.in=t,this.schema=r}var t$,Qce,NS,Vs,r$,$N=ne(()=>{t$=b(yt()),Qce="3.0.3",NS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Vs="#/components/schemas/",r$="successful operation";a(CS,"generateJsonApi");a(Jce,"Post");a(HN,"Get");a(Qq,"Options");a(Jq,"ResponseOptions200");a(vd,"Response200");a(Xq,"Response204");a(Xce,"Put");a(Zce,"Patch");a(Zq,"Delete");a(e$,"ResourceSchema");a(GN,"Type");a(n$,"Ref");a(ele,"ArrayRef");a(qN,"Parameter")});var i$={};ye(i$,{Request:()=>cc,createReuseportFd:()=>OS});var s$,cc,VN,KN,OS,Zp=ne(()=>{s$=require("os"),cc=class{static{a(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new KN(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new VN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},VN=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)}},KN=class{static{a(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,s$.platform)()!="win32"&&(OS=require("node-unix-socket").createReuseportFd)});var LS={};ye(LS,{parseHeaderValue:()=>WN,start:()=>nle});async function rle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&dg(e);let i=new Gs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==o$){let g=PS.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ui(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=WN(g);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=WN(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Bo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Md.ClientError(g,400)}if(e.authorize=!0,o===o$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return CS(PS,`${e.protocol}://${e.hostname}`);throw new Md.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Md.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Md.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,YN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=$G(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=xm(f.data,e,f)),f}else if(isFinite(p)){tle[0]=p;let g=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),YN.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=xm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?gi.warn(o):gi.info(o):gi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=xm(o.contentType?o:l$(o),e,c),c}}function nle(e){YN=e,e.includeExpensiveRecordCountEstimates&&(cc.prototype.includeExpensiveRecordCountEstimates=!0),!a$&&(a$=!0,PS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return rle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{eh++;let s=new ns;c$||(c$=!0,Qm(l=>{eh>0&&l.push({metric:"ws-connections",connections:eh,byThread:!0})}));let i;t.on("error",l=>{i=!0,gi.warn(l)});let o;t.on("message",a(function(u){o||(o=Bo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);Ve(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{eh--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=PS.getMatch(l,"ws");if(tn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ve(h=>({count:h.count,total:eh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ui(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await xo(p.value,r);t.send(h),Ve(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?gi.warn(l):gi.info(l):gi.error(l),t.close(sle[l.statusCode]||1011,l$(l))}t.close()},e))}function WN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var gi,Md,l$,sn,tle,YN,o$,a$,PS,c$,eh,sle,u$=ne(()=>{Fo();is();gi=b(J()),Md=b(_e());fg();Uu();Ga();kp();$N();Zp();pg();({errorToString:l$}=gi),sn=new Uint8Array(8),tle=new Float64Array(sn.buffer,0,1),YN={},o$="openapi";a(rle,"http");eh=0;a(nle,"start");sle={401:3e3,403:3003};a(WN,"parseHeaderValue")});var zN=M((CUe,f$)=>{var{recordAction:DS,recordActionBinary:d$}=(is(),v(ng)),ile=require("fastify-plugin"),ole=200;f$.exports=ile(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),DS(o,"duration",u,f,d),d$(s.raw.statusCode<400,"success",u,f,d),d$(1,"response_"+s.raw.statusCode,u,f,d);let m=ole;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{DS(performance.now()-c,"transfer",u,f,d),DS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,DS(m,"bytes-sent",u,f,d));let p=o.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var p$=M((OUe,m$)=>{var ale=mt(),cle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};m$.exports=function(e){return ale.validateObject(e,cle)}});var vS=M((PUe,h$)=>{"use strict";var lle=(H(),v(z)).OPERATIONS_ENUM,jN=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=lle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};h$.exports=jN});var nh={};ye(nh,{createTokens:()=>XN,getJWTRSAKeys:()=>FS,refreshOperationToken:()=>ZN,validateOperationToken:()=>eC,validateRefreshToken:()=>kS});async function FS(){if(MS)return MS;try{let e=th.default.join(rh.default.getHdbBasePath(),xb),t=await US.default.readFile(th.default.join(e,Sm.JWT_PASSPHRASE_NAME),"utf8"),r=await US.default.readFile(th.default.join(e,Sm.JWT_PRIVATE_KEY_NAME),"utf8");return MS={publicKey:await US.default.readFile(th.default.join(e,Sm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},MS}catch(e){throw BS.default.error(e),new Si.ClientError(xd.NO_ENCRYPTION_KEYS,Ud.INTERNAL_SERVER_ERROR)}}async function XN(e){let t=(0,QN.validateBySchema)(e,uo.default.object({username:uo.default.string().optional(),password:uo.default.string().optional(),role:uo.default.string().optional(),expires_in:uo.default.alternatives(uo.default.string(),uo.default.number()).optional()}));if(t)throw new Si.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,JN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw BS.default.error(f),new Si.ClientError(xd.INVALID_CREDENTIALS,Ud.UNAUTHORIZED)}if(!r)throw new Si.ClientError(xd.INVALID_CREDENTIALS,Ud.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await FS(),c=await Bd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??T$,algorithm:xS,subject:Fd.OPERATION}),l=await Bd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:ule,algorithm:xS,subject:Fd.REFRESH}),u=Ow(l,$r.SHA256);if((await(0,E$.update)(new _$.default(_m,Du.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Si.ClientError(xd.REFRESH_TOKEN_SAVE_FAILED,Ud.INTERNAL_SERVER_ERROR);return g$.default.signalUserChange(new S$.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function ZN(e){let t=(0,QN.validateBySchema)(e,uo.default.object({refresh_token:uo.default.string().required()}).required());if(t)throw new Si.ClientError(t.message);let{refresh_token:r}=e;await kS(r);let n=await FS(),s=await Bd.default.decode(r);return{operation_token:await Bd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:T$,algorithm:xS,subject:Fd.OPERATION})}}async function eC(e){return y$(e,Fd.OPERATION)}async function kS(e){return y$(e,Fd.REFRESH)}async function y$(e,t){try{let r=await FS(),n=await Bd.default.verify(e,r.publicKey,{algorithms:xS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,JN.findAndValidateUser)(n.username,void 0,!1);if(t===Fd.REFRESH&&!Pw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw BS.default.warn(r),r?.name==="TokenExpiredError"?new Si.ClientError(xd.TOKEN_EXPIRED,Ud.FORBIDDEN):new Si.ClientError(xd.INVALID_TOKEN,Ud.UNAUTHORIZED)}}var Bd,US,th,uo,QN,Si,BS,JN,E$,_$,g$,S$,rh,Ud,xd,T$,ule,xS,Fd,MS,kd=ne(()=>{Bd=b(require("jsonwebtoken")),US=b(require("fs-extra")),th=b(require("node:path")),uo=b(require("joi")),QN=b(mt());H();Si=b(_e()),BS=b(J());Dw();JN=b(Es()),E$=b(Vn()),_$=b(vS()),g$=b(Wo()),S$=b(ls()),rh=b(me()),{HTTP_STATUS_CODES:Ud,AUTHENTICATION_ERROR_MSGS:xd}=Si.hdbErrors;rh.default.initSync();T$=rh.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",ule=rh.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",xS="RS256",Fd={OPERATION:"operation",REFRESH:"refresh"};a(FS,"getJWTRSAKeys");a(XN,"createTokens");a(ZN,"refreshOperationToken");a(eC,"validateOperationToken");a(kS,"validateRefreshToken");a(y$,"validateToken")});var tC=M((UUe,A$)=>{"use strict";var dle=p$(),Hd=require("passport"),fle=require("passport-local").Strategy,mle=require("passport-http").BasicStrategy,ple=require("util"),hle=Es(),b$=ple.callbackify(hle.findAndValidateUser),MUe=Jr(),Ele=(H(),v(z)),R$=(kd(),v(nh));Hd.use(new fle(function(e,t,r){b$(e,t,r)}));Hd.use(new mle(function(e,t,r){b$(e,t,r)}));Hd.serializeUser(function(e,t){t(null,e)});Hd.deserializeUser(function(e,t){t(null,e)});function _le(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":Hd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Ele.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?R$.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):R$.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Hd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(_le,"authorize");function gle(e,t){let r=dle(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(gle,"checkPermissions");A$.exports={authorize:_le,checkPermissions:gle}});var aC=M((kUe,C$)=>{var $S=require("clone"),VS=mt(),Sle=oe(),GS=(H(),v(z)),BUe=J(),rC=require("fs"),sC=require("joi"),{string:qS}=sC.types(),{hdbErrors:Tle,handleHDBError:HS}=_e(),{HDB_ERROR_MSGS:FUe,HTTP_STATUS_CODES:nC}=Tle,{commonValidators:Gd}=Qi(),I$=" is required",yle=["insert","update","upsert"],iC={database:{presence:!1,format:Gd.schema_format,length:Gd.schema_length},schema:{presence:!1,format:Gd.schema_format,length:Gd.schema_length},table:{presence:!0,format:Gd.schema_format,length:Gd.schema_length},action:{inclusion:{within:yle,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Rle={schema:qS.required(),table:qS.required(),action:qS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:ble,AWS_SECRET:Ale,AWS_BUCKET:Ile,AWS_FILE_KEY:wle,REGION:Nle}=GS.S3_BUCKET_AUTH_KEYS,Cle={s3:{presence:!0},[`s3.${ble}`]:{presence:!0,type:"String"},[`s3.${Ale}`]:{presence:!0,type:"String"},[`s3.${Ile}`]:{presence:!0,type:"String"},[`s3.${wle}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Nle}`]:{presence:!0,type:"String"}},w$=$S(iC);w$.data.presence={message:I$};var N$=$S(iC);N$.file_path.presence={message:I$};var Ole=Object.assign($S(iC),Cle),oC=$S(Rle);oC.csv_url=qS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();oC.passthrough_headers=sC.object();function Ple(e){let t=VS.validateObject(e,w$);return KS(e,t)}a(Ple,"dataObject");function Lle(e){let t=VS.validateBySchema(e,sC.object(oC));return KS(e,t)}a(Lle,"urlObject");function Dle(e){let t=VS.validateObject(e,N$);return KS(e,t)}a(Dle,"fileObject");function vle(e){let t=VS.validateObject(e,Ole);return KS(e,t)}a(vle,"s3FileObject");function KS(e,t){if(!t){let r=Sle.checkGlobalSchemaTable(e.schema,e.table);if(r)return HS(new Error,r,nC.BAD_REQUEST);if(e.operation===GS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{rC.accessSync(e.file_path,rC.constants.R_OK|rC.constants.F_OK)}catch(n){return n.code===GS.NODE_ERROR_CODES.ENOENT?HS(n,`No such file or directory ${n.path}`,nC.BAD_REQUEST):n.code===GS.NODE_ERROR_CODES.EACCES?HS(n,`Permission denied ${n.path}`,nC.BAD_REQUEST):HS(n)}}return t}a(KS,"postValidateChecks");C$.exports={dataObject:Ple,urlObject:Lle,fileObject:Dle,s3FileObject:vle}});var cC=M((GUe,O$)=>{"use strict";var sh=J(),YS=(H(),v(z));async function Mle(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===YS.OPERATIONS_ENUM.INSERT||t.operation===YS.OPERATIONS_ENUM.UPDATE||t.operation===YS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===YS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(sh.info(i.message),i):i.http_resp_msg?(sh.error(`Error calling operation: ${e.name}`),sh.error(i.http_resp_msg),i):(sh.error(`Error calling operation: ${e.name}`),sh.error(i),i)}}a(Mle,"callOperationFunctionAsAwait");O$.exports={callOperationFunctionAsAwait:Mle}});var lC=M(($Ue,L$)=>{"use strict";var{S3:Ule,GetObjectCommand:xle}=require("@aws-sdk/client-s3");L$.exports={getFileStreamFromS3:Ble,getS3AuthObj:P$};async function Ble(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await P$(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new xle(r))).Body}a(Ble,"getFileStreamFromS3");function P$(e,t,r){return new Ule({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(P$,"getS3AuthObj")});var v$=M((KUe,D$)=>{"use strict";var uC=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}},dC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};D$.exports={BulkLoadFileObject:uC,BulkLoadDataObject:dC}});var U$=M((WUe,M$)=>{"use strict";var fC=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}};M$.exports=fC});var B$=M((jUe,x$)=>{"use strict";var mC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};x$.exports=mC});var hC=M((JUe,k$)=>{"use strict";var F$=U$(),Fle=B$(),{HDB_ERROR_MSGS:kle}=Jr(),pC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=kle.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 F$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Fle(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 F$(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}};k$.exports=pC});var kl=M((exe,$$)=>{"use strict";var ZUe=gn(),ih=J(),{validateBySchema:H$}=mt(),Zo=require("joi"),Hle=no(),WS=oe(),{handleHDBError:zS,hdbErrors:Gle,ClientError:G$}=_e(),{HDB_ERROR_MSGS:jS,HTTP_STATUS_CODES:EC}=Gle,q$=me();q$.initSync();var{getDatabases:_C}=(we(),v(ft)),qle=require("fs-extra"),$le=(H(),v(z));$$.exports={describeAll:Vle,describeTable:QS,describeSchema:Kle};async function Vle(e={}){try{let t=WS.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=_C(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await QS({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await QS({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){ih.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return ih.error("Got an error in describeAll"),ih.error(t),zS(new Error,jS.DESCRIBE_ALL_ERR)}}a(Vle,"describeAll");async function QS(e,t){WS.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=H$(e,Zo.object({database:Zo.string(),table:Zo.string().required(),exact_count:Zo.boolean().strict(),include_computed:Zo.boolean().strict()}));if(i)throw new G$(i.message);let c=_C()[r];if(!c)throw zS(new Error,jS.SCHEMA_NOT_FOUND(e.schema),EC.NOT_FOUND);let l=c[n];if(!l)throw zS(new Error,jS.TABLE_NOT_FOUND(e.schema,e.table),EC.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await qle.stat(l.primaryStore.env.path)).size}catch(p){ih.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),q$.get($le.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Hle.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){ih.warn(`unable to stat table dbi due to ${p}`)}return m}a(QS,"descTable");async function Kle(e){WS.transformReq(e);let t=H$(e,Zo.object({database:Zo.string(),exact_count:Zo.boolean().strict(),include_computed:Zo.boolean().strict()}));if(t)throw new G$(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=_C()[n];if(!i)throw zS(new Error,jS.SCHEMA_NOT_FOUND(e.schema),EC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),WS.isEmpty(l)||l.describe){let u=await QS({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(Kle,"describeSchema")});var z$=M((rxe,W$)=>{"use strict";var Yle=kl(),{hdbErrors:V$}=_e(),{getDatabases:K$}=(we(),v(ft));W$.exports={checkSchemaExists:Y$,checkSchemaTableExists:Wle,schemaDescribe:Yle};async function Y$(e){if(!K$()[e])return V$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Y$,"checkSchemaExists");async function Wle(e,t){let r=await Y$(e);if(r)return r;if(!K$()[e][t])return V$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Wle,"checkSchemaTableExists")});function gC(e){let t=e.get(JS),r=t?(0,qd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=it(),s=!1;r.nodeName=it();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:ah(e)??1,nodes:[]})})}i[n]=0,e.putSync(JS,(0,qd.pack)(r))}return r}function oh(e){return gC(e).remoteNameToId}function Q$(e,t){let r=gC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(JS,(0,qd.pack)(r)),s}function XS(e,t){let r=gC(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(JS,(0,qd.pack)(r))}return j$.trace?.("The remote node name map",e,n,s),s}var j$,qd,JS,SC=ne(()=>{j$=b(wr());Ss();qd=require("msgpackr"),JS=Symbol.for("remote-ids");a(gC,"getIdMappingRecord");a(oh,"exportIdMapping");a(Q$,"remoteToLocalNodeId");a(XS,"getIdOfRemoteNode")});var rV={};ye(rV,{commitsAwaitingReplication:()=>Vd,getHDBNodeTable:()=>Ht,getReplicationSharedStatus:()=>Kd,iterateRoutes:()=>lh,shouldReplicateToNode:()=>ch,subscribeToNodeUpdates:()=>Yd});function Ht(){return J$||(J$=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Kd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function Yd(e){Ht().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;tV.debug?.("adding node",n,"on node",it()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==it()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Ht().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function ch(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Ht().primaryStore.get(it())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function zle(){Yd(e=>{lc({},(t,r)=>{let n=e.name,s=X$.get(n);if(s||X$.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=Kd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of Vd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*lh(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=$d.default.get(F.REPLICATION_SECUREPORT)??(!$d.default.get(F.REPLICATION_PORT)&&$d.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||$d.default.get(F.REPLICATION_PORT)||$d.default.get(F.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){Z$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var Z$,eV,$d,tV,J$,X$,Vd,Wd=ne(()=>{we();Ss();Pm();Z$=require("worker_threads"),eV=b(_e()),$d=b(me());H();tV=b(wr());server.nodes=[];a(Ht,"getHDBNodeTable");a(Kd,"getReplicationSharedStatus");a(Yd,"subscribeToNodeUpdates");a(ch,"shouldReplicateToNode");X$=new Map;BU((e,t,r)=>{if(r>server.nodes.length)throw new eV.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Vd||(Vd=new Map,zle());let n=Vd.get(e);return n||(n=[],Vd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(zle,"startSubscriptionToReplications");a(lh,"iterateRoutes")});var lV={};ye(lV,{connectedToNode:()=>Hl,disconnectedFromNode:()=>jd,ensureNode:()=>ea,requestClusterStatus:()=>cV,startOnMainThread:()=>TC});async function TC(e){let t=0,r=ct();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){ZS.set(o,ah(u.auditStore));break}}}Ti.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=it();function l(){let u=Ht().primaryStore.get(c);if(u!==null){let d=e.url??uc();if(u===void 0||u.url!==d||u.shard!==e.shard)return ea(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Ht().primaryStore.get(c)&&l();for(let u of lh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),nV.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}Yd(s)});let n;function s(o,c=o?.name){let l=it()&&c===it()||uc()&&o?.url===uc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Ht().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of fo){let h;for(let[E,{worker:g,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:N}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),N?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){fo.get(m).iterator.remove(),fo.delete(m);return}}return}if(l)return;if(!o.url){ot.info(`Node ${o.name} is missing url`);return}let u=fo.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(ot.info(`Added node ${o.name} at ${o.url} for process ${it()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of zd)if(o.url===p.url){zd.delete(m);break}zd.set(o.name,o)}let d=ct();if(u||(u=new Map,fo.set(o.url,u)),u.iterator=lc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,g=[{replicateByDefault:p,...o}];ZS.has(m)&&uh.default.get(F.REPLICATION_FAILOVER)&&(g.push({replicateByDefault:p,name:it(),startTime:ZS.get(m),endTime:Date.now(),replicates:!0}),ZS.delete(m));let R=ch(o,m),S=Ti.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=g,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:g,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=jle.HDB_LEADER_URL??process.env.HDB_LEADER_URL??nV[0]?.url??Array.from(Ht().primaryStore.getRange({}))[0]?.url;g[0].isLeader=!y||g[0].url===y,setTimeout(()=>{let N={...g[0],type:"subscribe-to-node",database:m,nodes:g};E?E.postMessage(N):dh(N)},Qle)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Ht().primaryStore.get(it())?.replicates}),Ht().primaryStore.get(it())?.replicates||(n=!1,ot.info("Disabling replication, this node name",it(),Ht().primaryStore.get(it()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:g};E?E.postMessage(y):tT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),jd=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(zd.keys()),l=c.sort(),u=l.indexOf(o.name||yi(o.url));if(u===-1){ot.warn("Disconnected node not found in node map",o.name,c);return}let d=fo.get(o.url),f=d?.get(o.database);if(!f){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!uh.default.get(F.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],g=zd.get(E);d=fo.get(g.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let N of f.nodes){if(S.some(I=>I.name===N.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}N.endTime<Date.now()||(S.push(N),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(N,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Hl=a(function(o){let c=fo.get(o.url),l=c?.get(o.database);if(!l){ot.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!uh.default.get(F.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of fo.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let g of h)i(g,o.database);else{let g=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});g.length<h.length&&(m.nodes=g)}}},"connectedToNode");function i(o,c,l=o){let u=Ti.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):dh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,Ti.onMessageByType)("disconnected-from-node",jd),(0,Ti.onMessageByType)("connected-to-node",Hl),(0,Ti.onMessageByType)("request-cluster-status",cV)}function cV(e,t){let r=[];for(let[n,s]of zd)try{let i=fo.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=iV(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function ea(e,t){let r=Ht();e=e??yi(t.url),t.name=e;try{if(t.ca){let s=new oV.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!uh.default.get(F.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=iV(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Ti,eT,ot,sV,uh,oV,aV,iV,jle,Qle,fo,jd,Hl,zd,ZS,nV,fh=ne(()=>{we();Ti=b(nt());Ss();eT=require("worker_threads");Wd();ot=b(J()),sV=b(require("lodash")),uh=b(me());H();oV=require("crypto"),aV=b(require("minimist")),{cloneDeep:iV}=sV.default,jle=(0,aV.default)(process.argv),Qle=200,fo=new Map,zd=new Map,ZS=new Map,nV=[];a(TC,"startOnMainThread");a(cV,"requestClusterStatus");eT.parentPort&&(jd=a(e=>{eT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Hl=a(e=>{eT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ti.onMessageByType)("subscribe-to-node",e=>{dh(e)}),(0,Ti.onMessageByType)("unsubscribe-from-node",e=>{tT(e)}));a(ea,"ensureNode")});var ys=M(Gt=>{"use strict";var hr=require("path"),{watch:Jle}=require("chokidar"),Wn=require("fs-extra"),Qd=require("node-forge"),hV=require("net"),{generateKeyPair:yC,X509Certificate:ta,createPrivateKey:EV,randomBytes:Xle}=require("node:crypto"),Zle=require("util");yC=Zle.promisify(yC);var Pt=Qd.pki,Ri=require("joi"),{v4:_V}=require("uuid"),{validateBySchema:IC}=mt(),{forComponent:eue}=J(),Ts=me(),Ks=(H(),v(z)),{CONFIG_PARAMS:ql}=Ks,bi=Kw(),{ClientError:dc}=_e(),nT=require("node:tls"),{relative:gV,join:tue}=require("node:path"),{CERTIFICATE_VALUES:uV}=bi,rue=Qc(),RC=gt(),{table:nue,getDatabases:sue,databases:rT}=(we(),v(ft)),{getJWTRSAKeys:dV}=(kd(),v(nh)),Je=eue("tls").conditional;Gt.generateKeys=CC;Gt.updateConfigCert=wV;Gt.createCsr=due;Gt.signCertificate=fue;Gt.setCertTable=Jd;Gt.loadCertificates=bV;Gt.reviewSelfSignedCert=PC;Gt.createTLSSelector=CV;Gt.listCertificates=PV;Gt.addCertificate=gue;Gt.removeCertificate=Tue;Gt.createNatsCerts=hue;Gt.generateCertsKeys=pue;Gt.getReplicationCert=ph;Gt.getReplicationCertAuth=uue;Gt.renewSelfSigned=Eue;Gt.hostnamesFromCert=DC;Gt.getKey=yue;Gt.getHostnamesFromCertificate=Rue;Gt.getPrimaryHostName=LC;Gt.generateSerialNumber=oT;var{urlToNodeName:SV,getThisNodeUrl:iue,getThisNodeName:iT,clearThisNodeName:oue}=(Ss(),v(ra)),{readFileSync:aue,statSync:TV}=require("node:fs"),_xe=me(),{getTicketKeys:cue,onMessageFromWorkers:lue}=nt(),{isMainThread:yV}=require("worker_threads"),{TLSSocket:RV,createSecureContext:gxe}=require("node:tls"),wC=3650,mh=["127.0.0.1","localhost","::1"],NC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function oT(){let e=Xle(8);return e[0]=e[0]&127|1,e.toString("hex")}a(oT,"generateSerialNumber");lue(async e=>{e.type===Ks.ITC_EVENT_TYPES.RESTART&&(Ts.initSync(!0),await PC())});var on;function mc(){return on||(on=sue().system.hdb_certificate,on||(on=nue({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__"}]}))),on}a(mc,"getCertTable");async function ph(){let e=CV("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(iT());if(!r)return;let n=new ta(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(ph,"getReplicationCert");async function uue(){mc();let e=(await ph()).options.cert,r=new ta(e).issuer.match(/CN=(.*)/)?.[1];return on.get(r)}a(uue,"getReplicationCertAuth");var fV,fc=new Map;function bV(){if(fV)return;fV=!0;let e=[{configKey:ql.TLS},{configKey:ql.OPERATIONSAPI_TLS}];mc();let t=hr.dirname(RC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=RC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&gV(tue(t,"keys"),o);c&&mV(o,l=>{fc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&yV){let d;mV(u,f=>{if(uV.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=NV(u),h=new ta(p),E;try{E=LC(h)}catch(y){Je.error?.("error extracting host name from certificate",y);return}if(E==null){Je.error?.("No host name found on certificate");return}if(h.checkIssued(new ta(uV.cert)))return;let g=on.primaryStore.get(E),R=TV(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=S){R<S&&Je.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=on.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(bV,"loadCertificates");function mV(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&yV&&Je.warn?.(`Reloading ${r}:`,i),n=c,t(NV(i)))}catch(c){Je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Wn.existsSync(e)?s(e,TV(e)):Je.error?.(`${r} file not found:`,e),Jle(e,{persistent:!1}).on("change",s)}a(mV,"loadAndWatch");function bC(){let e=iue();if(e==null){let t=mh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return SV(e)}a(bC,"getHost");function sT(){let e=iT();if(e==null){let t=mh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(sT,"getCommonName");async function due(){let e=await ph(),t=Pt.certificateFromPem(e.options.cert),r=Pt.privateKeyFromPem(e.options.key);Je.info?.("Creating CSR with cert named:",e.name);let n=Pt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:sT()},...NC];Je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:AV()}];return Je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Qd.pki.certificationRequestToPem(n)}a(due,"createCsr");function AV(){let e=mh.includes(sT())?mh:[...mh,sT()];return e.includes(bC())||e.push(bC()),[{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=>hV.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(AV,"certExtensions");async function fue(e){let t={},r=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;mc();for await(let d of on.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(fc.has(d.private_key_name)){n=fc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Wn.exists(hr.join(r,d.private_key_name))){n=Wn.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await AC();s=d.ca,n=d.private_key}n=Pt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Pt.certificateFromPem(s.certificate);Je.info?.("Signing CSR with cert named",s.name);let o=Pt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Qd.pki.createCertificate();c.serialNumber=oT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+wC),Je.info?.("sign cert setting validity:",c.validity),Je.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Qd.md.sha256.create()),t.certificate=Pt.certificateToPem(c)}else Je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(fue,"signCertificate");async function mue(e,t){await Jd({name:iT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Jd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Pt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(mue,"createCertificateTable");async function Jd(e){let t;try{t=new ta(e.certificate)}catch(r){Je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},mc(),await on.patch(e)}a(Jd,"setCertTable");async function CC(){let e=await yC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Pt.publicKeyFromPem(e.publicKey),privateKey:Pt.privateKeyFromPem(e.privateKey)}}a(CC,"generateKeys");async function OC(e,t,r){let n=Pt.createCertificate();if(!t){let o=await ph();t=Pt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=oT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+wC);let i=[{name:"commonName",value:sT()},...NC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(AV()),n.sign(e,Qd.md.sha256.create()),Pt.certificateToPem(n)}a(OC,"generateCertificates");async function AC(){let e=await PV(),t;for(let r of e){if(!r.is_authority)continue;let n=await OV(r.private_key_name);if(r.private_key_name&&n&&new ta(r.certificate).checkPrivateKey(EV(n))){Je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Je.trace?.("No CA found with matching private key")}a(AC,"getCertAuthority");async function IV(e,t,r=!0){let n=Pt.createCertificate();n.publicKey=t,n.serialNumber=oT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+wC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ts.get(ql.REPLICATION_HOSTNAME)??SV(Ts.get(ql.REPLICATION_URL))??_V().split("-")[0]}`},...NC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,Qd.md.sha256.create());let o=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=hr.join(o,bi.PRIVATEKEY_PEM_NAME);return r&&await Wn.writeFile(c,Pt.privateKeyToPem(e)),n}a(IV,"generateCertAuthority");async function pue(){let{privateKey:e,publicKey:t}=await CC(),r=await IV(e,t),n=await OC(e,t,r);await mue(n,r),wV()}a(pue,"generateCertsKeys");async function hue(){let e=await OC(Pt.privateKeyFromPem(bi.CERTIFICATE_VALUES.key),void 0,Pt.certificateFromPem(bi.CERTIFICATE_VALUES.cert)),t=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=hr.join(t,bi.NATS_CERTIFICATE_PEM_NAME);await Wn.exists(r)||await Wn.writeFile(r,e);let n=hr.join(t,bi.NATS_CA_PEM_NAME);await Wn.exists(n)||await Wn.writeFile(n,bi.CERTIFICATE_VALUES.cert)}a(hue,"createNatsCerts");async function Eue(){mc();for await(let e of on.search([{attribute:"is_self_signed",value:!0}]))await on.delete(e.name);await PC()}a(Eue,"renewSelfSigned");async function PC(){oue(),await bV(),mc();let e=await AC();if(!e){Je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:Pt.privateKeyFromPem(Wn.readFileSync(u)),keyPath:u}}catch(d){return Je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ts.get(ql.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=Ts.get(ql.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=gV(o,i);s||(Je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await CC(),Wn.existsSync(hr.join(o,bi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${_V().split("-")[0]}.pem`),await Wn.writeFile(hr.join(o,c),Pt.privateKeyToPem(s)));let l=await IV(s,Pt.setRsaPublicKey(s.n,s.e),!1);await Jd({name:l.subject.getField("CN").value,uses:["https"],certificate:Pt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await ph()){let r=iT();Je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await AC();let n=Pt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await OC(Pt.privateKeyFromPem(e.private_key),s,n);await Jd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(PC,"reviewSelfSignedCert");function wV(){let e=rue(Object.keys(Ks.CONFIG_PARAM_MAP),!0),t=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=hr.join(t,bi.PRIVATEKEY_PEM_NAME),n=hr.join(t,bi.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,bi.NATS_CA_PEM_NAME),i=Ks.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),RC.updateConfigValue(void 0,void 0,o,!1,!0)}a(wV,"updateConfigCert");function NV(e){return e.startsWith("-----BEGIN")?e:aue(e,"utf8")}a(NV,"readPEM");var pV=nT.createSecureContext;nT.createSecureContext=function(e){if(!e.cert||!e.key)return pV(e);let t={...e};delete t.key,delete t.cert;let r=pV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var _ue=RV.prototype._init;RV.prototype._init=function(e,t){_ue.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 Gl=new Map;function CV(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(),Gl.clear();let d=0;if(rT===void 0){c();return}for await(let f of rT.system.hdb_certificate.search([])){let m=f.certificate,p=new ta(m);f.is_authority&&(p.asString=m,Gl.set(p.subject,m))}for await(let f of rT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await OV(f.private_key_name),E=f.certificate,g=new ta(E);if(Gl.has(g.issuer)&&(E+=`
16
- `+Gl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:cue(),availableCAs:Gl,ca:t&&Array.from(Gl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let S=f.hostnames??DC(g);Array.isArray(S)||(S=[S]);for(let I of S)I===bC()&&(p+=1);let y=nT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Gl),y.certStart=E.toString().slice(0,100);let N;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),hV.isIP(I)&&(N=!0);let $=r.get(I)?.quality??0;Je.trace?.("Assigning TLS for hostname",I,"if",p,">",$),p>$&&r.set(I,y)}else Je.error?.("No hostname found for certificate at",nT.certificate);Je.trace?.("Adding TLS",y.name,"for",o.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,o&&(o.defaultContext=y))}catch(m){Je.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),rT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Je.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Je.debug?.("Found certificate for",o,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}o?Je.debug?.("No certificate found to match",o,"using the default certificate"):Je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Je.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(CV,"createTLSSelector");async function OV(e){let t=fc.get(e);return!t&&e?await Wn.readFile(hr.join(Ts.get(ql.ROOTPATH),Ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(OV,"getPrivateKeyByName");async function PV(){mc();let e=[];for await(let t of on.search([]))e.push(t);return e}a(PV,"listCertificates");async function gue(e){let t=IC(e,Ri.object({name:Ri.string().required(),certificate:Ri.string().required(),is_authority:Ri.boolean().required(),private_key:Ri.string(),hosts:Ri.array(),uses:Ri.array()}));if(t)throw new dc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new ta(n),c=!1,l=!1,u;for(let[p,h]of fc)!s&&!c&&o.checkPrivateKey(EV(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new dc("A suitable private key was not found for this certificate");let d;if(!r){try{d=LC(o)}catch(p){Je.error?.(p)}if(d==null)throw new dc("Error extracting certificate host name, please provide a name parameter")}let f=Sue(r??d);s&&!c&&!l&&(await Wn.writeFile(hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),fc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Jd(m),"Successfully added certificate: "+f}a(gue,"addCertificate");function Sue(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Sue,"sanitizeName");async function Tue(e){let t=IC(e,Ri.object({name:Ri.string().required()}));if(t)throw new dc(t.message);let{name:r}=e;mc();let n=await on.get(r);if(!n)throw new dc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await on.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Je.info?.("Removing private key named",s),await Wn.remove(hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,s)))}return await on.delete(r),"Successfully removed "+r}a(Tue,"removeCertificate");function LC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||DC(e)[0]}a(LC,"getPrimaryHostName");function DC(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(DC,"hostnamesFromCert");async function yue(e){if(e.bypass_auth!==!0)throw new dc("Unauthorized","401");let t=IC(e,Ri.object({name:Ri.string().required()}));if(t)throw new dc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await dV()).privateKey;if(r===".jwtPublic")return(await dV()).publicKey;if(fc.get(r))return fc.get(e.name);throw new dc("Key not found")}a(yue,"getKey");function Rue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(Rue,"getHostnamesFromCertificate")});var e1={};ye(e1,{BACK_PRESSURE_RATIO_POSITION:()=>JV,CONFIRMATION_STATUS_POSITION:()=>QV,LATENCY_POSITION:()=>dT,NodeReplicationConnection:()=>Zd,OPERATION_REQUEST:()=>BC,RECEIVED_TIME_POSITION:()=>kC,RECEIVED_VERSION_POSITION:()=>FC,RECEIVING_STATUS_POSITION:()=>HC,RECEIVING_STATUS_RECEIVING:()=>ZV,RECEIVING_STATUS_WAITING:()=>XV,SENDING_TIME_POSITION:()=>Eh,createWebSocket:()=>fT,databaseSubscriptions:()=>hc,replicateOverWS:()=>_h,tableUpdateListeners:()=>$C});async function fT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=it(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!UC){let l=(0,YV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),UC=u.secureContexts}if(i=UC.get(s),i&&ue.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,zV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((Xd?.caCount!==na.size||Xd?.derivedFromContext!==i)&&(Xd=WV.createSecureContext({...i.options,ca:[...na,...i.options.availableCAs.values()]}),Xd.caCount=na.size,Xd.derivedFromContext=i),c.secureContext=Xd),new $V.WebSocket(e,"harperdb-replication-v1",c)}function _h(e,t,r){let n=t.port||t.securePort,s=qC.pid%1e3+"-"+VV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ue.debug?.(s,"Initializing replication connection",r);let i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||hc,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&ct()[u],g,R=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,N,I,$,ee,G,k,j=6e4,Y,ce=0,de=0,te=0,ge=qV.default.get(F.REPLICATION_BLOBTIMEOUT)??12e4,be=new Map,Ye=[],qe=0,Ar;if(t.url){let A=a(()=>{ee&&de===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(ee=performance.now(),e.ping(),de=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,HV).unref(),A()}else er();e._socket?.setMaxListeners(200);function er(){clearTimeout($),de=e._socket?.bytesRead,te=e._socket?.bytesWritten,$=setTimeout(()=>{de===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},HV*2).unref()}a(er,"resetPingTimer");let Qr=0,xr=0,wu=!1,Kc=3e4;function Ut(){if(pn?.length>0){let A=performance.now(),U=A-xr;Qr=(Qr*Kc+(wu?U:0))/(Kc+U),m&&(m[JV]=Qr),xr=A}}a(Ut,"updateBackPressureRatio"),setInterval(Ut,Kc).unref();function ii(){if(!(!g||!u))return m||(m=Kd(f,u,g)),m}a(ii,"getSharedStatus"),u&&Yc(u);let Ma,ZE,cm=[],e_=[],lm,ve=[],t_=[],wb=[],Nu=150,Hi=25,Ds=0,um=0,dm=!1,Lo,Dn,pn,Br;e.on("message",Cu);async function Cu(A){if(r=await r,!r){ue.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}fm(A),e.off("message",Cu),e.on("message",fm)}a(Cu,"onWSMessageWhenAuthorized");function fm(A){ce=performance.now();try{let U=A.dataView=new nl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let W=(0,at.decode)(A),[Q,B,Ee]=W;switch(Q){case DV:{if(B){if(g){if(g!==B){ue.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${B}, disconnecting`),e.send((0,at.encode)([hh])),Fr(1008,"Node name mismatch");return}}else if(g=B,t.connection?.tentativeNode){let le=t.connection.tentativeNode;le.name=g,t.connection.tentativeNode=null,ea(g,le)}if(t.connection&&(t.connection.nodeName=g),ue.debug?.(s,"received node name:",g,"db:",u??W[2]),!u)try{Yc(u=W[2]),u==="system"&&(Ma=lc(t,(le,ae)=>{Ba(ae)&&K(ae)}),e.on("close",()=>{Ma?.remove()}))}catch(le){ue.warn?.(s,"Error setting database",le),e.send((0,at.encode)([hh])),Fr(1008,le.message);return}mm()}break}case FV:{ue.debug?.(s,"Received table definitions for",B.map(le=>le.table));for(let le of B){let ae=W[2];le.database=ae;let xe;if(Ba(ae)){if(u==="system")Me[ae]?.[le.table]||(xe=D(le,Me[ae]?.[le.table]));else{if(ae!=="data"&&!Me[ae]){ue.warn?.("Database not found",ae);return}xe=D(le,Me[ae]?.[le.table])}f||(f=xe?.auditStore),E||(E=ct()?.[ae])}}break}case hh:Fr();break;case BC:try{let le=r?.replicates||r?.subscribers||r?.name;ue.debug?.("Received operation request",B,"from",g),server.operation(B,{user:r},!le).then(ae=>{ue.debug?.("Requested request from finished",g,ae),Array.isArray(ae)&&(ae={results:ae}),ae.requestId=B.requestId,e.send((0,at.encode)([cT,ae]))},ae=>{ue.debug?.("Failed requested operation from",g,ae),e.send((0,at.encode)([cT,{requestId:B.requestId,error:vC(ae)}]))})}catch(le){e.send((0,at.encode)([cT,{requestId:B.requestId,error:vC(le)}]))}break;case cT:let{resolve:fe,reject:pe}=R.get(B.requestId);ue.debug?.("Received completed operation request",g,B),B.error?pe(new Error(B.error)):fe(B),R.delete(B.requestId);break;case MC:let se=W[3];if(!E){u?ue.error?.(s,"No database found for",u):ue.error?.(s,"Database name never received"),Fr();return}let ie=E[se];ie=D({table:se,database:u,attributes:B.attributes,schemaDefined:B.schemaDefined},ie),cm[Ee]={name:se,decoder:new at.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:B.typedStructs,structures:B.structures}),getEntry(le){return ie.primaryStore.getEntry(le)},rootStore:ie.primaryStore.rootStore};break;case vV:Br=f?Q$(B,f):new Map,lm=W[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${lm}`);break;case MV:let Oe=Ee;wb[Oe]=B;break;case BV:ii()[QV]=B,ue.trace?.(s,"received and broadcasting committed update",B),ii().buffer.notify();break;case xV:y=B,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case lT:{let le=W[1],{fileId:ae,size:xe,finished:Ce,error:Le}=le,De=be.get(ae);ue.debug?.("Received blob",ae,"has stream",!!De,"connectedToBlob",!!De?.connectedToBlob,"length",W[2].length,"finished",Ce),De||(De=new xC.PassThrough,De.expectedSize=xe,be.set(ae,De)),De.lastChunk=Date.now();let pt=W[2];Ve(pt.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Ce?(Le?(De.on("error",()=>{}),De.destroy(new Error("Blob error: "+Le+" for record "+(De.recordId??"unknown")+" from "+g))):De.end(pt),De.connectedToBlob&&be.delete(ae)):De.write(pt)}catch(wt){ue.error?.(`Error receiving blob for ${De.recordId} from ${g} and streaming to storage`,wt),be.delete(ae)}break}case UV:{let le=B,ae;try{let xe=W[3],Ce=e_[Ee]||(e_[Ee]=E[W[4]]);if(!Ce)return ue.warn?.("Unknown table id trying to handle record request",Ee);let Le=Ce.primaryStore.getBinaryFast(Symbol.for("structures")),De=Le?.length??0;if(De>0&&De!==um){um=De;let wt=(0,at.decode)(Le);e.send((0,at.encode)([MC,{typedStructs:wt.typed,structures:wt.named},Ee,Ce.tableName]))}let pt=Ce.primaryStore.getBinaryFast(xe);if(pt){let wt=Ce.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),xt=lt||{};xt.version=(0,jV.getLastVersion)(),lt&&lt[Ku]&Zr&&(wt=Buffer.from(wt),km(()=>Ce.primaryStore.decoder.decode(pt),n_=>Ua(n_,xe),Ce.primaryStore.rootStore)),ae=(0,at.encode)([aT,le,{value:wt,expiresAt:xt.expiresAt,version:xt.version,residencyId:xt.residencyId,nodeId:xt.nodeId,user:xt.user}])}else ae=(0,at.encode)([aT,le])}catch(xe){ae=(0,at.encode)([aT,le,{error:xe.message}])}e.send(ae);break}case aT:{let{resolve:le,reject:ae,tableId:xe,key:Ce}=R.get(W[1]),Le=W[2];if(Le?.error)ae(new Error(Le.error));else if(Le){let De;k_(()=>{let pt=cm[xe].decoder.decode(Le.value);Le.value=pt,Le.key=Ce,le(Le)||De&&setTimeout(()=>De.forEach(x_),6e4).unref()},f?.rootStore,pt=>{let wt=xa(pt,Ce);return De||(De=[]),De.push(wt),wt})}else le();R.delete(W[1]);break}case LV:{pn=B;let le,ae,xe=!1;if(h){if(u!==h.databaseName&&!h.then){ue.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",pn),!h){let Pe;h=new Promise(tr=>{ue.debug?.("Waiting for subscription to database "+u),Pe=tr}),h.ready=Pe,hc.set(u,h)}if(r.name)ae=Ht().subscribe(r.name),ae.then(async Pe=>{le=Pe;for await(let tr of le){let ht=tr.value;if(!(ht?.replicates===!0||ht?.replicates?.receives||ht?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){xe=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},Pe=>{ue.error?.(s,"Error subscribing to HDB nodes",Pe)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,at.encode)([hh])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Dn&&(ue.debug?.(s,"stopping previous subscription",u),Dn.emit("close")),pn.length===0)return;let Ce=pn[0],Le=a(Pe=>{if(Pe&&(Ce.replicateByDefault?!Ce.tables.includes(Pe.tableName):Ce.tables.includes(Pe.tableName)))return{table:Pe}},"tableToTableEntry"),De={txnTime:0},pt,wt,xt=1/0,n_,s_=a((Pe,tr)=>{if(Pe.type==="end_txn"){De.txnTime&&(o[i]!==66&&ue.error?.("Invalid encoding of message"),C(9),C(Q_),O(n_=tr),AM()),i=c,De.txnTime=0;return}let ht=Pe.nodeId,kr=Pe.tableId,Nt=wt[kr];if(!Nt&&(Nt=wt[kr]=Le(h.tableById[kr]),!Nt))return ue.debug?.("Not subscribed to table",kr);let vs=Nt.table,Kt=vs.primaryStore,oi=Kt.encoder;(Pe.extendedType&ag||!oi.typedStructs)&&(oi._mergeStructures(oi.getStructures()),oi.typedStructs&&(oi.lastTypedStructuresLength=oi.typedStructs.length));let Lu=pt[ht];if(!(Lu&&Lu.startTime<tr&&(!Lu.endTime||Lu.endTime>tr)))return uT&&ue.trace?.(s,"skipping replication update",Pe.recordId,"to:",g,"from:",ht,"subscribed:",pt),IM();uT&&ue.trace?.(s,"sending replication update",Pe.recordId,"to:",g,"from:",ht,"subscribed:",pt);let Nb=Pe.version;De.txnTime!==Nb&&(De.txnTime&&(uT&&ue.trace?.(s,"new txn time, sending queued txn",De.txnTime),o[i]!==66&&ue.error?.("Invalid encoding of message"),AM()),De.txnTime=Nb,i=c,O(Nb));let Wc=Pe.residencyId,Cb=r_(Wc,vs),i_;if(Cb&&!Cb.includes(g)){let Gi=r_(Pe.previousResidencyId,vs);if(Gi&&!Gi.includes(g)&&(Pe.type==="put"||Pe.type==="patch")||vs.getResidencyById)return IM();let zc=Pe.recordId;ue.trace?.(s,"sending invalidation",zc,g,"from",ht);let pm=0;Wc&&(pm|=sl),Pe.previousResidencyId&&(pm|=il);let Lb,o_=null;for(let wM in vs.indices){if(!o_){if(Lb=Pe.getValue(Kt,!0),!Lb)break;o_={}}o_[wM]=Lb[wM]}i_=ol(Pe.version,kr,zc,null,ht,Pe.user,Pe.type==="put"||Pe.type==="patch"?"invalidate":Pe.type,oi.encode(o_),pm,Wc,Pe.previousResidencyId,Pe.expiresAt)}function IM(){return ue.trace?.(s,"skipping audit record",Pe.recordId),G||(G=setTimeout(()=>{G=null,(n_||0)+kV/2<xt&&(uT&&ue.trace?.(s,"sending skipped sequence update",xt),e.send((0,at.encode)([xV,xt])))},kV).unref()),new Promise(setImmediate)}a(IM,"skipAuditRecord");let Ob=oi.typedStructs,Pb=oi.structures;if((Ob?.length!=Nt.typed_length||Pb?.length!=Nt.structure_length)&&(Nt.typed_length=Ob?.length,Nt.structure_length=Pb.length,ue.debug?.(s,"send table struct",Nt.typed_length,Nt.structure_length),Nt.sentName||(Nt.sentName=!0),e.send((0,at.encode)([MC,{typedStructs:Ob,structures:Pb,attributes:vs.attributes,schemaDefined:vs.schemaDefined},kr,Nt.table.tableName]))),Wc&&!t_[Wc]&&(e.send((0,at.encode)([MV,Cb,Wc])),t_[Wc]=!0),i_)C(i_.length),P(i_);else{let Gi=Pe.encoded;Pe.extendedType&Zr&&km(()=>Pe.getValue(Kt),pm=>Ua(pm,Pe.recordId),Kt.rootStore);let zc=Gi[0]===66?8:0;C(Gi.length-zc),P(Gi,zc),ue.trace?.("wrote record",Pe.recordId,"length:",Gi.length)}if(e._socket.writableNeedDrain){let Gi=performance.now();return wu=!0,Ut(),new Promise(zc=>{ue.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{zc(),wu=!1,Ut()})})}else return qe>Hi?new Promise(Gi=>{Ar=Gi}):new Promise(setImmediate)},"sendAuditRecord"),AM=a(()=>{c-i>8?(e.send(o.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ve(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");Dn=new GC.EventEmitter,Dn.once("close",()=>{xe=!0,le?.end()});for(let{startTime:Pe}of pn)Pe<xt&&(xt=Pe);(ae||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,wt=h.tableById.map(Le),pt=[];for(let{name:tr,startTime:ht,endTime:kr}of pn){let Nt=XS(tr,f);ue.debug?.("subscription to",tr,"using local id",Nt,"starting",ht),pt[Nt]={startTime:ht,endTime:kr}}K(u),Ma||(Ma=Bl(tr=>{tr.databaseName===u&&K(u)}),ZE=jp(tr=>{tr===u&&(e.send((0,at.encode)([hh])),Fr())}),e.on("close",()=>{Ma?.remove(),ZE?.remove()})),e.send((0,at.encode)([vV,oh(h.auditStore),pn.map(({name:tr})=>tr)]));let Pe=!0;do{isFinite(xt)||(ue.warn?.("Invalid sequence id "+xt),Fr(1008,"Invalid sequence id"+xt));let tr;if(Pe&&!xe&&(Pe=!1,xt===0)){ue.info?.("Replicating all tables to",g);let ht=Date.now(),kr=mT(f);for(let Nt in E){if(!Le(Nt))continue;let vs=E[Nt];for(let Kt of vs.primaryStore.getRange({snapshot:!1,versions:!0})){if(xe)return;ue.trace?.(s,"Copying record from",u,Nt,Kt.key,Kt.localTime),ht=Math.max(Kt.localTime??1,ht),tr=!0,ii()[Eh]=1;let oi=ol(Kt.version,vs.tableId,Kt.key,null,kr,null,"put",km(()=>vs.primaryStore.encoder.encode(Kt.value),Lu=>Ua(Lu,Kt.key)),Kt.metadataFlags&-256,Kt.residencyId,null,Kt.expiresAt);await s_({recordId:Kt.key,tableId:vs.tableId,type:"put",getValue(){return Kt.value},encoded:oi,version:Kt.version,residencyId:Kt.residencyId,nodeId:kr,extendedType:Kt.metadataFlags},Kt.localTime)}}De.txnTime||(De.txnTime=ht,O(ht)),s_({type:"end_txn"},ht),ii()[Eh]=0,xt=ht}for(let{key:ht,value:kr}of f.getRange({start:xt||1,exclusiveStart:!0,snapshot:!1})){if(xe)return;let Nt=At(kr);ue.debug?.("sending audit record",ht,Nt.recordId),ii()[Eh]=ht,xt=ht,await s_(Nt,ht),Dn.startTime=ht,tr=!0}tr&&s_({type:"end_txn"},xt),ii()[Eh]=0,await U0(f)}while(!xe)}).catch(Pe=>{ue.error?.(s,"Error handling subscription to node",Pe),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let w=!0,L,q;do{ii();let W=U.readInt();if(W===9&&U.getUint8(U.position)==Q_){U.position++,y=q=U.readFloat64(),m[FC]=y,m[kC]=Date.now(),m[HC]=XV,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),ue.trace?.("received remote sequence update",y,u);break}let Q=U.position,B=At(A,Q,Q+W),Ee=cm[B.tableId];Ee||ue.error?.(`No table found with an id of ${B.tableId}`);let fe;B.residencyId&&(fe=wb[B.residencyId],ue.trace?.(s,"received residency list",fe,B.type,B.recordId));try{let pe=B.recordId;k_(()=>{L={table:Ee.name,id:B.recordId,type:B.type,nodeId:Br.get(B.nodeId),residencyList:fe,timestamp:B.version,value:B.getValue(Ee),user:B.user,beginTxn:w,expiresAt:B.expiresAt}},f?.rootStore,se=>xa(se,pe))}catch(pe){throw pe.message+="typed structures for current decoder"+JSON.stringify(Ee.decoder.typedStructs),pe}w=!1,ue.debug?.(s,"received replication message",B.type,"id",L.id,"version",new Date(B.version),"nodeId",L.nodeId),m[FC]=B.version,m[kC]=Date.now(),m[HC]=ZV,h.send(L),U.position=Q+W}while(U.position<A.byteLength);Ds++,u!=="system"&&Ve(A.byteLength,"bytes-received",`${g}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ds>Nu&&!dm&&(dm=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let W=Date.now()-L.timestamp;u!=="system"&&Ve(W,"replication-latency",g+"."+u+"."+L.table,L.type,"ingest")}Ds--,dm&&(dm=!1,e.resume(),ue.debug?.(`Replication resuming ${g}`)),Ye.length>0&&await Promise.all(Ye),ue.trace?.("All blobs finished"),!N&&q&&(ue.trace?.(s,"queuing confirmation of a commit at",q),setTimeout(()=>{e.send((0,at.encode)([BV,N])),ue.trace?.(s,"sent confirmation of a commit at",N),N=null},Aue)),N=q,ue.debug?.("last sequence committed",new Date(q),u)}})}catch(U){ue.error?.(s,"Error handling incoming replication message",U)}}a(fm,"onWSMessage"),e.on("ping",er),e.on("pong",()=>{if(t.connection){let A=performance.now()-ee;t.connection.latency=A,ii()&&(m[dT]=A),t.isSubscriptionConnection&&Hl({name:g,database:u,url:t.url,latency:A})}ee=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout($),clearInterval(k),Dn&&Dn.emit("close"),Lo&&Lo.end();for(let[w,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));ue.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,ue.debug?.(s,"closing",g,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(w){ue.error?.(s,"Error closing connection",w)}}a(Fr,"close");let Ou=new Set;async function Ua(A,U){let w=B_(A);if(Ou.has(w)){ue.debug?.("Blob already being sent",w);return}Ou.add(w);try{let L;qe++;for await(let q of A.stream())L&&(ue.debug?.("Sending blob chunk",w,"length",L.length),e.send((0,at.encode)([lT,{fileId:w,size:A.size},L]))),L=q,e._socket.writableNeedDrain&&(ue.debug?.("draining",w),await new Promise(W=>e._socket.once("drain",W)),ue.debug?.("drained",w)),Ve(q.length,"bytes-sent",`${g}.${u}`,"replication","blob");ue.debug?.("Sending final blob chunk",w,"length",L.length),e.send((0,at.encode)([lT,{fileId:w,size:A.size,finished:!0},L]))}catch(L){ue.warn?.("Error sending blob",L,"blob id",w,"for record",U),e.send((0,at.encode)([lT,{fileId:w,finished:!0,error:vC(L)},Buffer.alloc(0)]))}finally{Ou.delete(w),qe--,qe<Hi&&Ar?.()}}a(Ua,"sendBlobs");function xa(A,U){let w=B_(A),L=be.get(w);ue.debug?.("Received transaction with blob",w,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&be.delete(w):(L=new xC.PassThrough,be.set(w,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let q=L.blob??createBlob(L,A);L.blob=q;let W=Ho(()=>Fm(q).saving,h.auditStore?.rootStore);return W&&(W.blobId=w,Ye.push(W),W.finally(()=>{ue.debug?.(`Finished receiving blob stream ${w}`),Ye.splice(Ye.indexOf(W),1)})),q}a(xa,"receiveBlobs");function mm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",mm)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let L of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let q of L.value.nodes||[])q.lastTxnTime>(A.get(q.id)??0)&&A.set(q.id,q.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let w=t.connection?.nodeSubscriptions.map((L,q)=>{let W=[],{replicateByDefault:Q}=L;if(L.subscriptions){for(let pe of L.subscriptions)if(pe.subscribe&&(pe.schema||pe.database)===u){let se=pe.table;E?.[se]?.replicate!==!1&&W.push(se)}Q=!1}else for(let pe in E)(Q?E[pe].replicate===!1:E[pe].replicate)&&W.push(pe);let B=f&&XS(L.name,f),Ee=h?.dbisDB?.get([Symbol.for("seq"),B])??1,fe=Math.max(Ee?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(ue.debug?.("Starting time recorded in db",L.name,B,u,Ee?.seqId,"start time:",fe,new Date(fe)),U!==L){let pe=f&&XS(U.name,f),se=h?.dbisDB?.get([Symbol.for("seq"),pe])??1;for(let ie of se?.nodes||[])ie.name===L.name&&(fe=ie.seqId,ue.debug?.("Using sequence id from proxy node",U.name,fe))}return B===void 0?ue.warn("Starting subscription request from node",L,"but no node id found"):S.push(B),A.get(B)>fe&&(fe=A.get(B),ue.debug?.("Updating start time from more recent txn recorded",U.name,fe)),fe===1&&(L.isLeader?(ue.warn?.(`Requesting full copy of database ${u} from ${L.url}`),fe=0):fe=Date.now()-6e4),ue.trace?.(s,"defining subscription request",L.name,u,new Date(fe)),{name:L.name,replicateByDefault:Q,tables:W,startTime:fe,isLeader:L.isLeader,endTime:L.endTime}});if(w)if(ue.debug?.(s,"sending subscription request",w,h?.dbisDB?.path),clearTimeout(Y),w.length>0)e.send((0,at.encode)([LV,w]));else{let L=a(()=>{let q=performance.now();Y=setTimeout(()=>{ce<=q?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},j).unref()},"scheduleClose");L()}}a(mm,"sendSubscriptionRequestUpdate");function r_(A,U){if(!A)return;let w=ve[A];return w||(w=U.getResidencyRecord(A),ve[A]=w),w}a(r_,"getResidence");function Ba(A){return!(pc&&pc!="*"&&!pc[A]&&!pc.includes?.(A)&&!pc.some?.(U=>U.name===A))}a(Ba,"checkDatabaseAccess");function Yc(A){if(h=h||d.get(A),!Ba(A))throw new Error(`Access to database "${A}" is not permitted`);h||ue.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=ct()?.[A]);let U=it();if(U===g)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return Pu(U,A),!0}a(Yc,"setDatabase");function Pu(A,U){let w=ct()?.[U],L=[];for(let q in w){let W=w[q];L.push({table:q,schemaDefined:W.schemaDefined,attributes:W.attributes.map(Q=>({name:Q.name,type:Q.type,isPrimaryKey:Q.isPrimaryKey}))})}ue.trace?.("Sending database info for node",A,"database name",U),e.send((0,at.encode)([DV,A,U,L]))}a(Pu,"sendNodeDBName");function K(A){let U=ct()?.[A],w=[];for(let L in U){if(pn&&!pn.some(W=>W.replicateByDefault?!W.tables.includes(L):W.tables.includes(L)))continue;let q=U[L];w.push({table:L,schemaDefined:q.schemaDefined,attributes:q.attributes.map(W=>({name:W.name,type:W.type,isPrimaryKey:W.isPrimaryKey}))})}e.send((0,at.encode)([FV,w,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of be)U.lastChunk+ge<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${g}`),be.delete(A),U.end())},ge).unref();let _=1,T=[];return{end(){Lo&&Lo.end(),Dn&&Dn.emit("close")},getRecord(A){let U=_++;return new Promise((w,L)=>{let q=[UV,U,A.table.tableId,A.id];T[A.table.tableId]||(q.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,at.encode)(q)),ce=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(W){let{table:Q,entry:B}=A;if(w(W),W)return Q._recordRelocate(B,W)},reject:L})})},sendOperation(A){let U=_++;return A.requestId=U,e.send((0,at.encode)([BC,A])),new Promise((w,L)=>{R.set(U,{resolve:w,reject:L})})}};function C(A){x(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,w=A.length){let L=w-U;x(L),A.copy(o,c,U,w),c+=L}function O(A){x(8),l.setFloat64(c,A),c+=8}function x(A){if(A+16>o.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(U,0,i,c),c=c-i,i=0,o=U,l=new DataView(o.buffer,0,o.length)}}function D(A,U){let w=A.database??"data";U||(U={});let L=U.schemaDefined,q=!1,W=A.schemaDefined,Q=U.attributes||[];for(let B=0;B<A.attributes?.length;B++){let Ee=A.attributes[B],fe=Q.find(pe=>pe.name===Ee.name);(!fe||fe.type!==Ee.type)&&(L?ue.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${Ee.name}: ${Ee.type}' from '${g}' does not match local attribute ${fe?"'"+fe.name+": "+fe.type+"'":"which does not exist"}`):(q=!0,W||(Ee.indexed=!0),fe?Q[Q.indexOf(fe)]=Ee:Q.push(Ee)))}return q?(ue.debug?.("(Re)creating",A),Xe({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:Q,...U})):U}}var qV,at,$V,VV,KV,GC,YV,WV,qC,zV,xC,jV,bue,vC,ue,LV,DV,vV,hh,MV,MC,UV,aT,BC,cT,xV,BV,FV,lT,QV,FC,kC,Eh,dT,HC,JV,XV,ZV,$C,hc,uT,kV,Aue,HV,UC,Xd,GV,Zd,VC=ne(()=>{we();$i();SC();sI();Ss();qV=b(me());H();al();at=require("msgpackr"),$V=require("ws"),VV=require("worker_threads"),KV=b(J());fh();GC=require("events"),YV=b(ys()),WV=b(require("node:tls"));Wd();qC=b(require("node:process")),zV=require("node:net");is();ss();xC=require("node:stream"),jV=require("lmdb"),{forComponent:bue,errorToString:vC}=KV.default,ue=bue("replication").conditional,LV=129,DV=140,vV=141,hh=142,MV=130,MC=132,UV=133,aT=134,BC=136,cT=137,xV=143,BV=144,FV=145,lT=146,QV=0,FC=1,kC=2,Eh=3,dT=4,HC=5,JV=6,XV=0,ZV=1,$C=new Map,hc=new Map,uT=!0,kV=300,Aue=2,HV=3e4;a(fT,"createWebSocket");GV=500,Zd=class extends GC.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=GV;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??yi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await fT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${qC.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=GV,this.nodeSubscriptions&&Hl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=_h(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ue.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ue.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ue.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&jd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ue.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};a(_h,"replicateOverWS")});function Ec(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
17
- `)}function r1(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}function WC(e){try{let t=$l(e),n=mo.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return sa.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=ia.fromBER(n.extnValue.valueBlock.valueHexView);if(s.offset===-1)throw new Error("Failed to parse ASN.1 structure in CRL Distribution Points extension");let i=new mo.CRLDistributionPoints({schema:s.result}),o=[];for(let c of i.distributionPoints)if(c.distributionPoint&&Array.isArray(c.distributionPoint)){for(let l of c.distributionPoint)if(l.type===6&&typeof l.value=="string"){let u=l.value;(u.startsWith("http://")||u.startsWith("https://"))&&o.push(u)}}return sa.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return sa.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function n1(e){try{let t=$l(e),r=mo.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=ia.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1){let c=new mo.CRLDistributionPoints({schema:o.result});for(let l of c.distributionPoints)if(l.distributionPoint&&Array.isArray(l.distributionPoint)){for(let u of l.distributionPoint)if(u.type===6&&typeof u.value=="string"){let d=u.value;(d.startsWith("http://")||d.startsWith("https://"))&&n.push(d)}}}}catch(o){sa.warn?.(`Failed to parse CRL Distribution Points extension: ${o}`)}else if(i.extnID==="1.3.6.1.5.5.7.1.1")try{let o=ia.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof ia.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof ia.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof ia.ObjectIdentifier&&l.valueBlock.toString()==="1.3.6.1.5.5.7.48.1"&&u.idBlock.tagNumber===6){let d=String.fromCharCode(...Array.from(u.valueBlock.valueHexView));(d.startsWith("http://")||d.startsWith("https://"))&&s.push(d)}}}}catch(o){sa.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return sa.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return sa.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function $l(e){let t=e.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s/g,""),r=atob(t),n=new ArrayBuffer(r.length),s=new Uint8Array(n);for(let i=0;i<r.length;i++)s[i]=r.charCodeAt(i);return n}function pT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,YC.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function zC(e,t){return`${e}:${t}`}function s1(e){try{let t=$l(e),n=mo.Certificate.fromBER(t).serialNumber.valueBlock.valueHexView;return Array.from(n).map(s=>s.toString(16).padStart(2,"0")).join("")}catch(t){throw sa.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function jC(e){try{let t=$l(e),r=mo.Certificate.fromBER(t),n=r.extensions?.find(i=>i.extnID==="2.5.29.35");if(n){let i=new mo.AuthorityKeyIdentifier({schema:n.parsedValue});if(i.keyIdentifier){let o=i.keyIdentifier.valueBlock.valueHexView;return Array.from(o).map(c=>c.toString(16).padStart(2,"0")).join("")}}let s=r.issuer.typesAndValues.map(i=>`${i.type}=${i.value.valueBlock.value}`).join(",");return(0,YC.createHash)("sha256").update(s).digest("hex")}catch(t){throw sa.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function hT(){return KC||(KC=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]})),KC}var YC,mo,ia,t1,sa,KC,ET=ne(()=>{YC=require("node:crypto"),mo=b(require("pkijs")),ia=b(require("asn1js")),t1=b(wr());we();sa=(0,t1.loggerWithTag)("cert-verification-utils");a(Ec,"bufferToPem");a(r1,"extractCertificateChain");a(WC,"extractCRLDistributionPoints");a(n1,"extractRevocationUrls");a($l,"pemToBuffer");a(pT,"createCacheKey");a(zC,"createRevokedCertificateId");a(s1,"extractSerialNumber");a(jC,"extractIssuerKeyId");KC=null;a(hT,"getCertificateCacheTable")});function i1(e){let{error:t,value:r}=Cue.validate(e,{abortEarly:!1,allowUnknown:!1});if(t){let n=t.details.map(s=>s.message).join("; ");throw new Error(`Invalid certificate verification configuration: ${n}`)}return r}var Yr,Iue,ef,tf,QC,wue,Nue,Cue,o1=ne(()=>{Yr=b(require("joi")),Iue="fail-closed",ef={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},tf={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},QC=Yr.default.string().valid("fail-open","fail-closed"),wue=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...tf}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(tf.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(tf.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:QC.default(tf.failureMode),gracePeriod:Yr.default.number().min(0).default(tf.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),Nue=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...ef}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(ef.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(ef.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Yr.default.number().min(1e3).default(ef.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:QC.default(ef.failureMode)})),Cue=Yr.default.object({failureMode:QC.default(Iue),crl:wue.default({enabled:!0,...tf}),ocsp:Nue.default({enabled:!0,...ef})});a(i1,"validateAndParseCertificateVerificationConfig")});function h1(e){if(typeof e=="boolean"||e==null){if(e===JC&&XC)return po.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===JC&&_T!==null)return po.trace?.("Using cached certificate verification config (primitive)"),_T;po.trace?.("Parsing and caching certificate verification config (primitive)"),JC=e;try{return _T=l1(e),XC=null,_T}catch(n){return XC=n,po.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(c1.get(e))return po.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=a1.get(e);if(r!==void 0)return po.trace?.("Using cached certificate verification config (object)"),r;po.trace?.("Parsing and caching certificate verification config (object)");try{let n=l1(e);return a1.set(e,n),n}catch(n){return c1.set(e,n),po.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function l1(e){if(po.trace?.(`getCertificateVerificationConfig called with: ${JSON.stringify({mtlsConfig:e})}`),!e)return!1;let t=e===!0?void 0:e.certificateVerification;return po.trace?.(`Certificate verification config: ${JSON.stringify({verificationConfig:t})}`),t==null||t===!1?!1:i1(t===!0?{}:t)}var u1,d1,po,f1,m1,p1,a1,JC,_T,c1,XC,ZC=ne(()=>{u1=b(wr()),d1=b(yt());o1();po=(0,u1.loggerWithTag)("cert-verification-config"),f1=10080*60*1e3,m1=3e5,p1=`Harper/${d1.packageJson.version} CRL-Client`,a1=new WeakMap,JC=null,_T=null,c1=new WeakMap,XC=null;a(h1,"getCachedCertificateVerificationConfig");a(l1,"getCertificateVerificationConfig")});function gh(e){return e===_1||e===Oue}function Pue(e){return e===g1||e===S1}function eO(e){return e===_1?g1:S1}function Lue(){if(E1)return;E1=!0;let e=Vl.CryptoEngine.prototype,t=Vl.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return gh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return gh(s)?{name:eO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Pue(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Vl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(gh(i)){let o=eO(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),o,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(gh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new Sh.X509Certificate(Buffer.from(i)),l=new Sh.X509Certificate(Buffer.from(o));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,o]=n,c=o.algorithm.algorithmId;if(gh(c)){let l=eO(c);try{let u=this.crypto?.subtle||this.subtle||Vl.getCrypto(!0)?.subtle||Sh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",o.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return"unusedBits"in i.valueBlock&&i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Vl,Sh,_1,Oue,g1,S1,E1,T1=ne(()=>{Vl=b(require("pkijs")),Sh=require("node:crypto"),_1="1.3.101.112",Oue="1.3.101.113",g1="Ed25519",S1="Ed448",E1=!1;a(gh,"isEd25519OrEd448");a(Pue,"isEdDSAAlgorithmName");a(eO,"getEdDSAAlgorithmName");a(Lue,"applyEd25519Patch");Lue()});var A1={};ye(A1,{CRLSignatureVerificationError:()=>Th,performCRLCheck:()=>Mue,verifyCRL:()=>nO});function Due(){return gT||(gT=hT(),gT.sourcedFrom(rf)),gT}function vue(){return ST||(ST=Xe({table:"hdb_crl_cache",database:"system",attributes:[{name:"distribution_point",isPrimaryKey:!0},{name:"issuer_dn"},{name:"crl_blob"},{name:"this_update"},{name:"next_update"},{name:"signature_valid"},{name:"expiresAt",expiresAt:!0,indexed:!0}]}),ST.sourcedFrom(rO)),ST}function R1(){return tO||(tO=Xe({table:"hdb_revoked_certificates",database:"system",attributes:[{name:"composite_id",isPrimaryKey:!0},{name:"serial_number",indexed:!0},{name:"issuer_key_id",indexed:!0},{name:"revocation_date"},{name:"revocation_reason"},{name:"crl_source",indexed:!0},{name:"crl_next_update"},{name:"expiresAt",expiresAt:!0,indexed:!0}]})),tO}async function nO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ec(e,"CERTIFICATE"),i=Ec(t,"CERTIFICATE"),o=n??WC(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=pT(s,i,"crl"),l=await Due().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Pr.error?.("Cache fetch returned null - this indicates a source configuration issue"),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"crl"}:(Pr.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Pr.trace?.(`CRL ${d?"source fetch":"cache hit"} for certificate`),{valid:u.status==="good",status:u.status,cached:!d,method:u.method||"crl"}}catch(s){return Pr.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Pr.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function Mue(e,t,r,n){let s=n??WC(e);if(s.length===0)return{status:"good"};let i=s1(e),o=jC(t),c=zC(o,i);try{let u=await R1().get(c);if(u){let f=Date.now(),m=u;return m.crl_next_update>f?{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}:m.crl_next_update+r.gracePeriod>f?(Pr.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Pr.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await Uue(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Pr.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Pr.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function Uue(e,t,r){let n=Date.now();for(let s of e)try{let i=vue(),o=null,c=null;try{c=await i.get(s),(c&&c.next_update>n||c&&c.next_update+r.gracePeriod>n)&&(o=c)}catch{}o||(o=await b1(s,t,r.timeout));let l=o.next_update;if(l>n){if(!c)try{await i.put(s,o)}catch{}return{upToDate:!0,source:s}}else return l+r.gracePeriod>n?{upToDate:!0,source:s}:{upToDate:!1,reason:"crl-expired"}}catch(i){if(i instanceof Th)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function b1(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":p1}});if(clearTimeout(s),!i.ok)throw new Error(`CRL download failed: ${i.status}`);let o=Buffer.from(await i.arrayBuffer()),c,l=o.toString("utf8");l.includes("-----BEGIN X509 CRL-----")?c=Buffer.from($l(l)):c=o;let u=TT.CertificateRevocationList.fromBER(c),d=TT.Certificate.fromBER($l(t)),f=await u.verify({issuerCertificate:d});if(!f){let g=`CRL signature verification failed for: ${e}`;throw Pr.error?.(g),new Th(g)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+f1,h=d.issuer.typesAndValues.map(g=>`${g.type}=${g.value.valueBlock.value}`).join(","),E={distribution_point:e,issuer_dn:h,crl_blob:o,this_update:m,next_update:p,signature_valid:f,expiresAt:p};return xue(u,t,e,p).catch(g=>{Pr.error?.(`Error processing revoked certificates: ${g}`)}),E}finally{clearTimeout(s)}}async function xue(e,t,r,n){let s=R1(),i=jC(t),o=r;try{await Bue(s,o)}catch(c){Pr.warn?.(`Failed to clear existing CRL entries: ${c}`)}if(e.revokedCertificates)for(let c of e.revokedCertificates)try{let l=c.userCertificate.valueBlock.valueHexView;if(!l){Pr.warn?.("Could not extract serial number from revoked certificate");continue}let u=Array.from(l).map(h=>h.toString(16).padStart(2,"0")).join(""),d=zC(i,u),f=c.revocationDate.value.getTime(),p={composite_id:d,serial_number:u,issuer_key_id:i,revocation_date:f,revocation_reason:"unspecified",crl_source:o,crl_next_update:n,expiresAt:n};await s.create(p.composite_id,p)}catch(l){Pr.warn?.(`Failed to process revoked certificate: ${l}`)}}async function Bue(e,t){try{let r=e.search([{attribute:"crl_source",value:t}]);for await(let n of r)try{await e.delete(n.composite_id)}catch(s){Pr.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Pr.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var TT,y1,Th,Pr,gT,rO,ST,tO,sO=ne(()=>{TT=b(require("pkijs")),y1=b(wr());we();Vo();ET();ZC();iO();Th=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Pr=(0,y1.loggerWithTag)("crl-verification");a(Due,"getCertificateCacheTable");rO=class extends lr{static{a(this,"CertificateRevocationListSource")}async get(t){let n=this.getContext()?.requestContext;if(!n?.distributionPoint||!n?.issuerPem)throw new Error(`No CRL data provided for cache key: ${t}`);let{distributionPoint:s,issuerPem:i,config:o}=n;try{let c=await b1(s,i,o.timeout),l=c.next_update,u=Date.now()+o.cacheTtl,d=Math.min(l,u);return{...c,expiresAt:d}}catch(c){if(Pr.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+m1;return{crl_id:t,distribution_point:s,issuer_dn:"unknown",crl_blob:Buffer.alloc(0),this_update:Date.now(),next_update:l,signature_valid:!1,expiresAt:l}}return Pr.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(vue,"getCRLCacheTable");a(R1,"getRevokedCertificateTable");a(nO,"verifyCRL");a(Mue,"performCRLCheck");a(Uue,"checkCRLFreshness");a(b1,"downloadAndParseCRL");a(xue,"processRevokedCertificates");a(Bue,"clearExistingCRLEntries")});async function Fue(){oO||(oO=(await Promise.resolve().then(()=>(sO(),A1))).performCRLCheck),aO||(aO=(await Promise.resolve().then(()=>(cO(),w1))).performOCSPCheck)}var I1,Qxe,oO,aO,rf,iO=ne(()=>{Vo();I1=b(wr()),Qxe=(0,I1.loggerWithTag)("cert-verification-source");a(Fue,"loadVerificationFunctions");rf=class extends lr{static{a(this,"CertificateVerificationSource")}async get(t){let r=t.id,s=this.getContext()?.requestContext;if(!s||!s.certPem||!s.issuerPem)return null;let{certPem:i,issuerPem:o,ocspUrls:c,config:l}=s,u;r.startsWith("crl:")?u="crl":r.startsWith("ocsp:")?u="ocsp":u="unknown",await Fue();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await oO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await aO(i,o,f,c);else throw new Error(`Unsupported verification method: ${u} for ID: ${r}`);let m=Date.now()+f.cacheTtl;return{certificate_id:r,status:d.status,reason:d.reason,checked_at:Date.now(),expiresAt:m,method:u}}}});var w1={};ye(w1,{performOCSPCheck:()=>Hue,verifyOCSP:()=>lO});function kue(){return RT||(RT=hT(),RT.sourcedFrom(rf)),RT}async function lO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ec(e,"CERTIFICATE"),i=Ec(t,"CERTIFICATE"),o=pT(s,i,"ocsp"),c=await kue().get(o,{certPem:s,issuerPem:i,ocspUrls:n,config:{ocsp:r??{}}});if(!c)return r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(yT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return yT.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(s){return yT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(yT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Hue(e,t,r,n){try{let s=await(0,N1.getCertStatus)(e,{ca:t,timeout:r.timeout,...n?.length&&{ocspUrl:n[0]}});switch(s.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:s.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(s){return{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}var N1,C1,yT,RT,cO=ne(()=>{T1();N1=require("easy-ocsp"),C1=b(wr());ET();iO();yT=(0,C1.loggerWithTag)("ocsp-verification");a(kue,"getCertificateCacheTable");a(lO,"verifyOCSP");a(Hue,"performOCSPCheck")});async function nf(e,t){an.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=h1(t);if(r===!1)return an.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=r1(e);if(an.trace?.(`Certificate chain length: ${n.length}`),n.length<2||!n[0].issuer)return an.debug?.("Certificate chain insufficient for revocation checking - need certificate and issuer"),{valid:!0,status:"no-issuer-cert",method:"disabled"};let s=Ec(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=n1(s);if(an.debug?.(`Certificate extensions: CRL distribution points=${i.length}, OCSP URLs=${o.length}`),i.length>0)if(r.crl.enabled)try{an.debug?.("Attempting CRL verification");let c=await nO(n[0].cert,n[0].issuer,r.crl,i);if(c.status==="good"||c.status==="revoked")return an.debug?.(`CRL verification result: ${c.status}`),c;an.debug?.(`CRL verification inconclusive: ${c.status}, trying OCSP fallback`)}catch(c){an.warn?.(`CRL verification failed: ${c}`)}else an.debug?.("Skipping CRL - disabled in configuration");else an.debug?.("Skipping CRL - no distribution points in certificate");if(o.length>0)if(r.ocsp.enabled)try{an.debug?.("Attempting OCSP verification");let c=await lO(n[0].cert,n[0].issuer,r.ocsp,o);return an.debug?.(`OCSP verification result: ${c.status}`),c}catch(c){an.warn?.(`OCSP verification failed: ${c}`)}else an.debug?.("Skipping OCSP - disabled in configuration");else an.debug?.("Skipping OCSP - no responder URLs in certificate");return r.failureMode==="fail-closed"?{valid:!1,status:"no-verification-available",method:"disabled"}:{valid:!0,status:"verification-unavailable-allowed",method:"disabled"}}var O1,an,bT=ne(()=>{O1=b(wr());ET();ZC();cO();sO();an=(0,O1.loggerWithTag)("cert-verification");a(nf,"verifyCertificate")});var ra={};ye(ra,{buildReplicationMtlsConfig:()=>F1,clearThisNodeName:()=>jue,disableReplication:()=>Vue,enabledDatabases:()=>pc,forEachReplicatedDatabase:()=>lc,getThisNodeId:()=>mT,getThisNodeName:()=>it,getThisNodeUrl:()=>uc,hostnameToUrl:()=>NT,lastTimeInAuditStore:()=>ah,monitorNodeCAs:()=>k1,replicateOperation:()=>Jue,replicationCertificateAuthorities:()=>na,sendOperationToNode:()=>yh,servers:()=>que,setReplicator:()=>G1,start:()=>$ue,startOnMainThread:()=>TC,subscribeToNode:()=>dh,unsubscribeFromNode:()=>tT,urlToNodeName:()=>yi});function F1(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function $ue(e){if(!e.port&&!e.securePort&&(e.port=Ys.default.get(F.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ys.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),!it())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let i of lh(e))t.set(yi(i.url),i);Kue(e);let r=F1(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Be.ws(async(i,o,c,l)=>{if(It.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),_h(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Be.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${i.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,i._nodeRequest.socket.authorizationError);let c=Ht().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,x1.getHostnamesFromCertificate)(i.peerCertificate),u;for(let d of l)if(u=d&&(c.get(d)||t.get(d)),u)break;if(u){let d=await nf(i.peerCertificate,e.mtls);if(!d.valid){It.warn("Certificate verification failed:",d.status,"for node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}if(u?.revoked_certificates?.includes(i.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else It.warn(`No node found for certificate common name/SANs: ${l}, available nodes are ${Array.from(c.getRange({}).filter(({value:d})=>d).map(({key:d})=>d)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let l=c.get(i.ip)||t.get(i.ip);l?i.user=l:It.warn(`No node found for IP address ${i.ip}, available nodes are ${Array.from(new Set([...c.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return o(i)},e);let s=[];for(let i of n)if(i.secureContexts){let o=a(()=>{let c=new Set(i.secureContexts.values());i.defaultContext&&c.add(i.defaultContext);for(let l of c)try{let u=Array.from(na);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=wT.createSecureContext(d)}catch(u){It.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1&&o()}k1(()=>{for(let i of s)i()})}function k1(e){let t=0;Yd(r=>{r?.ca&&(na.add(r.ca),na.size!==t&&(t=na.size,e?.()))})}function Vue(e=!0){B1=e}function Kue(e){B1||(ct(),pc=e.databases,lc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||hc;for(let[s,i]of IT){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];G1(r,s,e),$C.get(s)?.forEach(i=>i(s))}}))}function G1(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 H1 extends lr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||hc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(It.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new ns,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Be.hostname)continue;let E=Wue(h,H1.subscription,e);if(E?.isConnected){let g=Kd(t.auditStore,e,h)[dT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new M1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Gue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",Kl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Yue(e,t,r,n,s,i){let o=t+"-"+e,c=IT.get(o);c||(c=new Map,IT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new Zd(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function Wue(e,t,r){let n=P1.get(Kl);n||(n=new Map,P1.set(Kl,n));let s=n.get(r);if(s)return s;let i=Ht().primaryStore.get(e);return i?.url&&(s=new Zd(i.url,t,r,Kl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function yh(e,t,r){r||(r={}),r.serverName=e.name;let n=await fT(e.url,r),s=_h(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function dh(e){try{U1.isMainThread&&It.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=hc.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,hc.set(e.database,t)}let r=Yue(e.nodes[0].url,e.url,t,e.database,e.name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>ch(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function tT({url:e,nodes:t,database:r}){It.trace("Unsubscribing from node",e,r,"nodes",Array.from(Ht().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=IT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function zue(){if(uO!==void 0)return uO;let e=Ys.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||Ys.default.get(F.TLS_CERTIFICATE);if(e)return uO=new D1.X509Certificate((0,v1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function it(){return Kl||(Kl=Ys.default.get("replication_hostname")??yi(Ys.default.get("replication_url"))??zue()??L1("operationsapi_network_secureport")??L1("operationsapi_network_port")??"127.0.0.1")}function jue(){Kl=void 0}function L1(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function AT(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function mT(e){return oh(e)?.[it()]}function uc(){let e=Ys.default.get("replication_url");return e||NT(it())}function NT(e){let t=AT("replication_port");if(t)return`ws://${e}:${t}`;if(t=AT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=AT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=AT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function yi(e){if(e)return new URL(e).hostname}function lc(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return jp(n=>{r(n)}),Bl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Que(n)&&t(s,n,!1)}a(r,"forDatabase")}function Que(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function ah(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Jue(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Be.nodes.map(n=>n.name));let r=await Promise.allSettled(Be.nodes.map(n=>yh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Be.nodes[s]?.name,i})}return t}var Ys,It,D1,v1,wT,M1,U1,x1,B1,Gue,que,na,pc,IT,P1,uO,Kl,Ss=ne(()=>{we();Vo();Uu();VC();Hr();Ys=b(me()),It=b(J()),D1=require("crypto");bT();v1=require("fs");fh();Wd();H();SC();wT=b(require("node:tls")),M1=b(_e()),U1=require("worker_threads"),x1=b(ys()),Gue=1,que=[],na=Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(wT.rootCertificates):new Set;a(F1,"buildReplicationMtlsConfig");a($ue,"start");a(k1,"monitorNodeCAs");a(Vue,"disableReplication");a(Kue,"assignReplicationSource");a(G1,"setReplicator");IT=new Map;a(Yue,"getSubscriptionConnection");P1=new Map;a(Wue,"getRetrievalConnectionByName");a(yh,"sendOperationToNode");a(dh,"subscribeToNode");a(tT,"unsubscribeFromNode");a(zue,"getCommonNameFromCert");a(it,"getThisNodeName");a(jue,"clearThisNodeName");Object.defineProperty(Be,"hostname",{get(){return it()}});a(L1,"getHostFromListeningPort");a(AT,"getPortFromListeningPort");a(mT,"getThisNodeId");Be.replication={getThisNodeId:mT,exportIdMapping:oh};a(uc,"getThisNodeUrl");a(NT,"hostnameToUrl");a(yi,"urlToNodeName");a(lc,"forEachReplicatedDatabase");a(Que,"hasExplicitlyReplicatedTable");a(ah,"lastTimeInAuditStore");a(Jue,"replicateOperation")});var DT=M((T0e,Y1)=>{"use strict";var sf=z$(),{validateBySchema:Rh}=mt(),{commonValidators:of,schemaRegex:dO}=Qi(),Er=require("joi"),Xue=J(),Zue=require("uuid").v4,PT=Wo(),af=(H(),v(z)),ede=require("util"),_c=fs(),{handleHDBError:oa,hdbErrors:tde,ClientError:Yl}=_e(),{HDB_ERROR_MSGS:CT,HTTP_STATUS_CODES:aa}=tde,{SchemaEventMsg:LT}=ls(),q1=_r(),{getDatabases:rde}=(we(),v(ft)),{transformReq:cf}=oe(),{replicateOperation:$1}=(Ss(),v(ra)),{cleanupOrphans:nde}=(ss(),v(H_)),OT=Er.string().min(1).max(of.schema_length.maximum).pattern(dO).messages({"string.pattern.base":"{:#label} "+of.schema_format.message}),sde=Er.string().min(1).max(of.schema_length.maximum).pattern(dO).messages({"string.pattern.base":"{:#label} "+of.schema_format.message}).required(),ide=Er.string().min(1).max(of.schema_length.maximum).pattern(dO).messages({"string.pattern.base":"{:#label} "+of.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();Y1.exports={createSchema:ode,createSchemaStructure:V1,createTable:ade,createTableStructure:K1,createAttribute:fde,dropSchema:cde,dropTable:lde,dropAttribute:ude,getBackup:mde,cleanupOrphanBlobs:pde};async function ode(e){let t=await V1(e);return PT.signalSchemaChange(new LT(process.pid,e.operation,e.schema)),t}a(ode,"createSchema");async function V1(e){let t=Rh(e,Er.object({database:OT,schema:OT}));if(t)throw new Yl(t.message);if(cf(e),!await sf.checkSchemaExists(e.schema))throw oa(new Error,CT.SCHEMA_EXISTS_ERR(e.schema),aa.BAD_REQUEST,af.LOG_LEVELS.ERROR,CT.SCHEMA_EXISTS_ERR(e.schema),!0);return await _c.createSchema(e),`database '${e.schema}' successfully created`}a(V1,"createSchemaStructure");async function ade(e){return cf(e),e.hash_attribute=e.primary_key??e.hash_attribute,await K1(e)}a(ade,"createTable");async function K1(e){let t=Rh(e,Er.object({database:OT,schema:OT,table:sde,residence:Er.array().items(Er.string().min(1)).optional(),hash_attribute:ide}));if(t)throw new Yl(t.message);if(!await sf.checkSchemaTableExists(e.schema,e.table))throw oa(new Error,CT.TABLE_EXISTS_ERR(e.schema,e.table),aa.BAD_REQUEST,af.LOG_LEVELS.ERROR,CT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Zue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await _c.createTable(n,e);else throw oa(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",aa.BAD_REQUEST);else await _c.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(K1,"createTableStructure");async function cde(e){let t=Rh(e,Er.object({database:Er.string(),schema:Er.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Yl(t.message);cf(e);let r=await sf.checkSchemaExists(e.schema);if(r)throw oa(new Error,r,aa.NOT_FOUND,af.LOG_LEVELS.ERROR,r,!0);let n=await sf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await _c.dropSchema(e),PT.signalSchemaChange(new LT(process.pid,e.operation,e.schema)),await q1.purgeSchemaTableStreams(e.schema,s);let i=await $1(e);return i.message=`successfully deleted '${e.schema}'`,i}a(cde,"dropSchema");async function lde(e){let t=Rh(e,Er.object({database:Er.string(),schema:Er.string(),table:Er.string().required()}));if(t)throw new Yl(t.message);cf(e);let r=await sf.checkSchemaTableExists(e.schema,e.table);if(r)throw oa(new Error,r,aa.NOT_FOUND,af.LOG_LEVELS.ERROR,r,!0);await _c.dropTable(e),await q1.purgeTableStream(e.schema,e.table);let n=await $1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(lde,"dropTable");async function ude(e){let t=Rh(e,Er.object({database:Er.string(),schema:Er.string(),table:Er.string().required(),attribute:Er.string().required()}));if(t)throw new Yl(t.message);cf(e);let r=await sf.checkSchemaTableExists(e.schema,e.table);if(r)throw oa(new Error,r,aa.NOT_FOUND,af.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw oa(new Error,"You cannot drop a hash attribute",aa.BAD_REQUEST,void 0,void 0,!0);if(af.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw oa(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,aa.BAD_REQUEST,void 0,void 0,!0);try{return await _c.dropAttribute(e),dde(e),PT.signalSchemaChange(new LT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Xue.error(`Got an error deleting attribute ${ede.inspect(e)}.`),n}}a(ude,"dropAttribute");function dde(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(dde,"dropAttributeFromGlobal");async function fde(e){cf(e);let t=rde()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw oa(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,aa.BAD_REQUEST,void 0,void 0,!0);return await _c.createAttribute(e),PT.signalSchemaChange(new LT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(fde,"createAttribute");function mde(e){return _c.getBackup(e)}a(mde,"getBackup");function pde(e){if(!e.database)throw new Yl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Yl(`Unknown database '${e.database}'`);return nde(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(pde,"cleanupOrphanBlobs")});var z1=M((R0e,W1)=>{"use strict";var{OPERATIONS_ENUM:hde}=(H(),v(z)),fO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=hde.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};W1.exports=fO});var mO=M((I0e,Z1)=>{"use strict";var Ede=fs(),A0e=z1(),vT=oe(),MT=(H(),v(z)),_de=me(),{handleHDBError:j1,hdbErrors:gde}=_e(),{HDB_ERROR_MSGS:Q1,HTTP_STATUS_CODES:J1}=gde,Sde=Object.values(MT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),X1="To use this operation audit log must be enabled in harperdb-config.yaml";Z1.exports=Tde;async function Tde(e){if(vT.isEmpty(e.schema))throw new Error(Q1.SCHEMA_REQUIRED_ERR);if(vT.isEmpty(e.table))throw new Error(Q1.TABLE_REQUIRED_ERR);if(!_de.get(MT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw j1(new Error,X1,J1.BAD_REQUEST,MT.LOG_LEVELS.ERROR,X1,!0);let t=vT.checkSchemaTableExist(e.schema,e.table);if(t)throw j1(new Error,t,J1.NOT_FOUND,MT.LOG_LEVELS.ERROR,t,!0);if(!vT.isEmpty(e.search_type)&&Sde.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Ede.readAuditLog(e)}a(Tde,"readAuditLog")});var tK=M((N0e,eK)=>{"use strict";var{OPERATIONS_ENUM:yde}=(H(),v(z)),pO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=yde.GET_BACKUP,this.schema=t,this.table=r}};eK.exports=pO});var sK=M((L0e,nK)=>{"use strict";var Rde=fs(),O0e=tK(),hO=oe(),bde=(H(),v(z)),P0e=me(),{handleHDBError:Ade,hdbErrors:Ide}=_e(),{HDB_ERROR_MSGS:rK,HTTP_STATUS_CODES:wde}=Ide;nK.exports=Nde;async function Nde(e){if(hO.isEmpty(e.schema))throw new Error(rK.SCHEMA_REQUIRED_ERR);if(hO.isEmpty(e.table))throw new Error(rK.TABLE_REQUIRED_ERR);let t=hO.checkSchemaTableExist(e.schema,e.table);if(t)throw Ade(new Error,t,wde.NOT_FOUND,bde.LOG_LEVELS.ERROR,t,!0);return await Rde.getBackup(readAuditLogObject)}a(Nde,"getBackup")});var cK=M((v0e,aK)=>{"use strict";var Cde=me(),gc=require("joi"),Ode=mt(),iK=require("moment"),Pde=require("fs-extra"),EO=require("path"),Lde=require("lodash"),bh=(H(),v(z)),{LOG_LEVELS:Wl}=(H(),v(z)),Dde="YYYY-MM-DD hh:mm:ss",vde=EO.resolve(__dirname,"../logs");aK.exports=function(e){return Ode.validateBySchema(e,Mde)};var Mde=gc.object({from:gc.custom(oK),until:gc.custom(oK),level:gc.valid(Wl.NOTIFY,Wl.FATAL,Wl.ERROR,Wl.WARN,Wl.INFO,Wl.DEBUG,Wl.TRACE),order:gc.valid("asc","desc"),limit:gc.number().min(1),start:gc.number().min(0),log_name:gc.custom(Ude)});function oK(e,t){if(iK(e,iK.ISO_8601).format(Dde)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(oK,"validateDatetime");function Ude(e,t){if(Lde.invert(bh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Cde.get(bh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?bh.LOG_NAMES.HDB:e,i=s===bh.LOG_NAMES.INSTALL?EO.join(vde,bh.LOG_NAMES.INSTALL):EO.join(n,s);return Pde.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Ude,"validateReadLogPath")});var gO=M((U0e,uK)=>{"use strict";var UT=(H(),v(z)),xde=J(),Bde=me(),Fde=cK(),_O=require("path"),lK=require("fs-extra"),{once:kde}=require("events"),{handleHDBError:Hde,hdbErrors:Gde}=_e(),{PACKAGE_ROOT:qde}=yt(),{replicateOperation:$de}=(Ss(),v(ra)),Vde=_O.join(qde,"logs"),Kde=1e3,Yde=200;uK.exports=Wde;async function Wde(e){let t=Fde(e);if(t)throw Hde(t,t.message,Gde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=$de(e),n=Bde.get(UT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?UT.LOG_NAMES.HDB:e.log_name,i=s===UT.LOG_NAMES.INSTALL?_O.join(Vde,UT.LOG_NAMES.INSTALL):_O.join(n,s),o=e.level!==void 0,c=o?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?Kde:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(lK.statSync(i).size-(E+5)*Yde,0));let R=lK.createReadStream(i,{start:g});R.on("error",G=>{xde.error(G)});let S=0,y=[],N="",I;R.on("data",G=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=N+G;let j=0,Y;for(;(Y=k.exec(G))&&!R.destroyed;){I&&(I.message=G.slice(j,Y.index),$(I));let[ce,de,te]=Y,ge=te.split("] ["),be=ge[0],Ye=ge[1];ge.splice(0,2),I={timestamp:de,thread:be,level:Ye,tags:ge,message:""},j=Y.index+ce.length}N=G.slice(j)}),R.on("end",G=>{R.destroyed||I&&(I.message=N.trim(),$(I))}),R.resume();function $(G){let k,j,Y;switch(!0){case(o&&l&&d):k=new Date(G.timestamp),j=new Date(u),Y=new Date(f),G.level===c&&k>=j&&k<=Y&&S<h?S++:G.level===c&&k>=j&&k<=Y&&(ho(G,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(G.timestamp),j=new Date(u),G.level===c&&k>=j&&S<h?S++:G.level===c&&k>=j&&(ho(G,p,y),S++,S===E&&R.destroy());break;case(o&&d):k=new Date(G.timestamp),Y=new Date(f),G.level===c&&k<=Y&&S<h?S++:G.level===c&&k<=Y&&(ho(G,p,y),S++,S===E&&R.destroy());break;case(l&&d):k=new Date(G.timestamp),j=new Date(u),Y=new Date(f),k>=j&&k<=Y&&S<h?S++:k>=j&&k<=Y&&(ho(G,p,y),S++,S===E&&R.destroy());break;case o:G.level===c&&S<h?S++:G.level===c&&(ho(G,p,y),S++,S===E&&R.destroy());break;case l:k=new Date(G.timestamp),j=new Date(u),k>=j&&S<h?S++:k>=j&&S>=h&&(ho(G,p,y),S++,S===E&&R.destroy());break;case d:k=new Date(G.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(ho(G,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(ho(G,p,y),S++,S===E&&R.destroy())}}a($,"onLogMessage"),await kde(R,"close");let ee=await r;if(ee.replicated){for(let G of y)G.node=server.hostname;for(let G of ee.replicated){let k=G.node;if(G.status==="failed")ho({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${G.reason}`},p,y);else for(let j of G.results)j.node=k,ho(j,p,y)}}return y}a(Wde,"readLog");function ho(e,t,r){t==="desc"?zde(e,r):t==="asc"?jde(e,r):r.push(e)}a(ho,"pushLineToResult");function zde(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(zde,"insertDescending");function jde(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(jde,"insertAscending")});var xT=M((G0e,pK)=>{"use strict";var SO=require("joi"),{string:lf,boolean:dK,date:Qde}=SO.types(),Jde=mt(),{validateSchemaExists:B0e,validateTableExists:F0e,validateSchemaName:k0e}=Qi(),Xde=(H(),v(z)),Zde=Ct(),fK=me();fK.initSync();var H0e=lf.invalid(fK.get(Xde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Zde.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),mK={operation:lf.valid("add_node","update_node","set_node_replication"),node_name:lf.optional(),subscriptions:SO.array().items({table:lf.optional(),schema:lf.optional(),database:lf.optional(),subscribe:dK.required(),publish:dK.required().custom(tfe),start_time:Qde.iso()})};function efe(e){return Jde.validateBySchema(e,SO.object(mK))}a(efe,"addUpdateNodeValidator");function tfe(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(tfe,"checkForFalsy");pK.exports={addUpdateNodeValidator:efe,validationSchema:mK}});var uf=M(($0e,hK)=>{"use strict";var TO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},yO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};hK.exports={Node:TO,NodeSubscription:yO}});var _K=M((K0e,EK)=>{"use strict";var rfe=(H(),v(z)).OPERATIONS_ENUM,RO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=rfe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EK.exports=RO});var Ah=M((W0e,gK)=>{"use strict";var bO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},AO=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)}};gK.exports={RemotePayloadObject:bO,RemotePayloadSubscription:AO}});var TK=M((j0e,SK)=>{"use strict";var IO=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}};SK.exports=IO});var RK=M((tBe,yK)=>{"use strict";var nfe=TK(),J0e=Yt(),X0e=Et(),sfe=J(),{getSchemaPath:Z0e,getTransactionAuditStorePath:eBe}=Rt(),{getDatabases:ife}=(we(),v(ft));yK.exports=ofe;async function ofe(e){let t=new nfe;try{let r=ife()[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){sfe.warn(`unable to stat table dbi due to ${r}`)}return t}a(ofe,"lmdbGetTableSize")});var AK=M((nBe,bK)=>{"use strict";var wO=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}};bK.exports=wO});var wh=M((lBe,CK)=>{"use strict";var afe=require("fs-extra"),cfe=require("path"),bn=require("systeminformation"),Sc=J(),IK=_r(),iBe=Ct(),df=(H(),v(z)),lfe=RK(),ufe=kl(),{getThreadInfo:wK}=nt(),Ih=me();Ih.initSync();var dfe=AK(),{openEnvironment:oBe}=Et(),{getSchemaPath:aBe}=Rt(),{database:cBe,databases:NO}=(we(),v(ft)),BT;CK.exports={getHDBProcessInfo:LO,getNetworkInfo:vO,getDiskInfo:DO,getMemoryInfo:PO,getCPUInfo:OO,getTimeInfo:CO,getSystemInformation:MO,systemInformation:ffe,getTableSize:UO,getMetrics:xO};function CO(){return bn.time()}a(CO,"getTimeInfo");async function OO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await bn.cpu();d.cpu_speed=await bn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:R,...S}=await bn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:N,rawLoadIdle:I,rawLoadIrq:$,rawLoadNice:ee,rawLoadSystem:G,rawLoadUser:k,...j}=y;S.cpus.push(j)}),d.current_load=S,d}catch(e){return Sc.error(`error in getCPUInfo: ${e}`),{}}}a(OO,"getCPUInfo");async function PO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await bn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Sc.error(`error in getMemoryInfo: ${e}`),{}}}a(PO,"getMemoryInfo");async function LO(){let e={core:[],clustering:[]};try{let t=await bn.processes(),r;try{r=Number.parseInt(await afe.readFile(cfe.join(Ih.get(df.CONFIG_PARAMS.ROOTPATH),df.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===df.NODE_ERROR_CODES.ENOENT)Sc.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 Sc.error(`error in getHDBProcessInfo: ${t}`),e}}a(LO,"getHDBProcessInfo");async function DO(){let e={};try{if(!Ih.get(df.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await bn.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await bn.fsStats();return e.read_write=u,e.size=await bn.fsSize(),e}catch(t){return Sc.error(`error in getDiskInfo: ${t}`),e}}a(DO,"getDiskInfo");async function vO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Ih.get(df.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await bn.networkInterfaceDefault(),e.latency=await bn.inetChecksite("google.com"),(await bn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await bn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Sc.error(`error in getNetworkInfo: ${t}`),e}}a(vO,"getNetworkInfo");async function MO(){if(BT!==void 0)return BT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await bn.osInfo();e=c;let l=await bn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,BT=e,BT}catch(t){return Sc.error(`error in getSystemInformation: ${t}`),e}}a(MO,"getSystemInformation");async function UO(){let e=[],t=await ufe.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await lfe(n));return e}a(UO,"getTableSize");async function xO(){let e={};for(let t in NO){let r=e[t]={},n=r.tables={};for(let s in NO[t])try{let i=NO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Sc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(xO,"getMetrics");async function NK(){if(Ih.get(df.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await IK.getNATSReferences(),t=await IK.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(NK,"getNatsStreamInfo");async function ffe(e){let t=new dfe;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await MO(),t.time=CO(),t.cpu=await OO(),t.memory=await PO(),t.disk=await DO(),t.network=await vO(),t.harperdb_processes=await LO(),t.table_size=await UO(),t.metrics=await xO(),t.threads=await wK(),t.replication=await NK(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await MO();break;case"time":t.time=CO();break;case"cpu":t.cpu=await OO();break;case"memory":t.memory=await PO();break;case"disk":t.disk=await DO();break;case"network":t.network=await vO();break;case"harperdb_processes":t.harperdb_processes=await LO();break;case"table_size":t.table_size=await UO();break;case"database_metrics":case"metrics":t.metrics=await xO();break;case"threads":t.threads=await wK();break;case"replication":t.replication=await NK();break;default:break}return t}a(ffe,"systemInformation")});var ca=M((pBe,DK)=>{"use strict";var mfe=Vn(),BO=oe(),pfe=require("util"),zl=(H(),v(z)),OK=me();OK.initSync();var hfe=tC(),PK=gn(),{Node:dBe,NodeSubscription:fBe}=uf(),Efe=cd(),_fe=_K(),{RemotePayloadObject:gfe,RemotePayloadSubscription:Sfe}=Ah(),{handleHDBError:Tfe,hdbErrors:yfe}=_e(),{HTTP_STATUS_CODES:Rfe,HDB_ERROR_MSGS:bfe}=yfe,Afe=mi(),Ife=wh(),{packageJson:wfe}=yt(),{getDatabases:Nfe}=(we(),v(ft)),mBe=pfe.promisify(hfe.authorize),Cfe=PK.searchByHash,Ofe=PK.searchByValue;DK.exports={isEmpty:Pfe,getNodeRecord:Lfe,upsertNodeRecord:Dfe,buildNodePayloads:vfe,checkClusteringEnabled:Mfe,getAllNodeRecords:Ufe,getSystemInfo:xfe,reverseSubscription:LK};function Pfe(e){return e==null}a(Pfe,"isEmpty");async function Lfe(e){let t=new Efe(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Cfe(t)}a(Lfe,"getNodeRecord");async function Dfe(e){let t=new _fe(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return mfe.upsert(t)}a(Dfe,"upsertNodeRecord");function LK(e){if(BO.isEmpty(e.subscribe)||BO.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(LK,"reverseSubscription");function vfe(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=BO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=LK(c),p=Nfe()[l]?.[u],h=new Sfe(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new gfe(r,t,s,n)}a(vfe,"buildNodePayloads");function Mfe(){if(!OK.get(zl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Tfe(new Error,bfe.CLUSTERING_NOT_ENABLED,Rfe.BAD_REQUEST,void 0,void 0,!0)}a(Mfe,"checkClusteringEnabled");async function Ufe(){let e=new Afe(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Ofe(e))}a(Ufe,"getAllNodeRecords");async function xfe(){let e=await Ife.getSystemInformation();return{hdb_version:wfe.version,node_version:e.node_version,platform:e.platform}}a(xfe,"getSystemInfo")});var FO=M((EBe,HK)=>{"use strict";var FT=_r(),vK=oe(),MK=Ct(),UK=(H(),v(z)),kT=J(),xK=DT(),Bfe=hp(),{RemotePayloadObject:Ffe}=Ah(),{handleHDBError:BK,hdbErrors:kfe}=_e(),{HTTP_STATUS_CODES:FK}=kfe,{NodeSubscription:kK}=uf();HK.exports=Hfe;async function Hfe(e,t){let r;try{r=await FT.request(`${t}.${MK.REQUEST_SUFFIX}`,new Ffe(UK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),kT.trace("Response from remote describe all request:",r)}catch(o){kT.error(`addNode received error from describe all request to remote node: ${o}`);let c=FT.requestErrorHandler(o,"add_node",t);throw BK(new Error,c,FK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===MK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw BK(new Error,o,FK.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===UK.SYSTEM_SCHEMA_NAME){await FT.createLocalTableStream(l,c);let h=new kK(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=vK.doesSchemaExist(l),d=n[l]!==void 0,f=c?vK.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(kT.trace(`addNode creating schema: ${l}`),await xK.createSchema({operation:"create_schema",schema:l})),!f&&m){kT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Bfe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await xK.createTable(h)}await FT.createLocalTableStream(l,c);let p=new kK(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(Hfe,"reviewSubscriptions")});var ff={};ye(ff,{addNodeBack:()=>kO,removeNodeBack:()=>HO,setNode:()=>Vfe});async function Vfe(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=yi(t)):t=NT(r);let n=(0,qK.validateBySchema)(e,$fe);if(n)throw(0,la.handleHDBError)(n,n.message,qfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new la.ClientError("url or hostname is required for remove_node operation");let p=r,h=Ht(),E=await h.get(p);if(!E)throw new la.ClientError(p+" does not exist");try{await yh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?it():p},void 0)}catch(g){Rs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new la.ClientError("url required for this operation");let s=uc();if(s==null)throw new la.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ws.getReplicationCert)();let p=await(0,Ws.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ws.createCsr)(),Rs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,Rs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,yc.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,yc.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,yc.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(GK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=GK(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await yh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,Rs.warn("Error adding node:",t,"to cluster:",p),d=p}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Rs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ws.setCertTable)({name:Gfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ws.setCertTable)({name:it(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,yc.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,yc.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await ea(it(),p)}await ea(u?u.nodeName:f.name??yi(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function kO(e){Rs.trace("addNodeBack received request:",e);let t=await(0,Ws.signCertificate)(e),r;e.csr?(r=t.signingCA,Rs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,Rs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Ws.getReplicationCertAuth)();if(n.replicates){let i={url:uc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,yc.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,yc.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await ea(it(),i)}return await ea(e.hostname,n),t.nodeName=it(),t.usingCA=s?.certificate,Rs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function HO(e){Rs.trace("removeNodeBack received request:",e),await Ht().delete(e.name)}function GK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ws,qK,Tc,yc,Rs,la,Gfe,qfe,$fe,mf=ne(()=>{Ws=b(ys()),qK=b(mt()),Tc=b(require("joi")),yc=b(me());H();fh();Wd();Ss();Rs=b(J()),la=b(_e()),{pki:Gfe}=require("node-forge"),{HTTP_STATUS_CODES:qfe}=la.hdbErrors,$fe=Tc.default.object({hostname:Tc.default.string(),verify_tls:Tc.default.boolean(),replicates:Tc.default.boolean(),subscriptions:Tc.default.array(),revoked_certificates:Tc.default.array(),shard:Tc.default.number()});a(Vfe,"setNode");a(kO,"addNodeBack");a(HO,"removeNodeBack");a(GK,"reverseSubscription")});var VT=M((IBe,VK)=>{"use strict";var{handleHDBError:HT,hdbErrors:Kfe}=_e(),{HTTP_STATUS_CODES:GT}=Kfe,{addUpdateNodeValidator:Yfe}=xT(),qT=J(),$T=(H(),v(z)),$K=Ct(),Wfe=oe(),Nh=_r(),Ch=ca(),GO=me(),zfe=FO(),{Node:jfe,NodeSubscription:Qfe}=uf(),{broadcast:Jfe}=nt(),{setNode:Xfe}=(mf(),v(ff)),bBe=me(),ABe=(H(),v(z)),Zfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",eme="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",tme=GO.get($T.CONFIG_PARAMS.CLUSTERING_NODENAME);VK.exports=rme;async function rme(e,t=!1){if(qT.trace("addNode called with:",e),GO.get($T.CONFIG_PARAMS.REPLICATION_URL)||GO.get($T.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Xfe(e);Ch.checkClusteringEnabled();let r=Yfe(e);if(r)throw HT(r,r.message,GT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Ch.getNodeRecord(n);if(!Wfe.isEmptyOrZeroLength(f))throw HT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,GT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await zfe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Zfe,o;let c=Ch.buildNodePayloads(s,tme,$T.OPERATIONS_ENUM.ADD_NODE,await Ch.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Qfe(p.schema,p.table,p.publish,p.subscribe))}qT.trace("addNode sending remote payload:",c);let u;try{u=await Nh.request(`${n}.${$K.REQUEST_SUFFIX}`,c)}catch(f){qT.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Nh.updateRemoteConsumer(E,n)}let m=Nh.requestErrorHandler(f,"add_node",n);throw HT(new Error,m,GT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===$K.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw HT(new Error,f,GT.INTERNAL_SERVER_ERROR,"error",f)}qT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Nh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Nh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new jfe(n,l,u.system_info);return await Ch.upsertNodeRecord(d),Jfe({type:"nats_update"}),i.length>0?o.message=eme:o.message=`Successfully added '${n}' to manifest`,o}a(rme,"addNode")});var KO=M((CBe,YK)=>{"use strict";var{handleHDBError:qO,hdbErrors:nme}=_e(),{HTTP_STATUS_CODES:$O}=nme,{addUpdateNodeValidator:sme}=xT(),Oh=J(),KT=(H(),v(z)),KK=Ct(),NBe=oe(),Ph=_r(),Lh=ca(),VO=me(),{cloneDeep:ime}=require("lodash"),ome=FO(),{Node:ame,NodeSubscription:cme}=uf(),{broadcast:lme}=nt(),{setNode:ume}=(mf(),v(ff)),dme="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",fme="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mme=VO.get(KT.CONFIG_PARAMS.CLUSTERING_NODENAME);YK.exports=pme;async function pme(e){if(Oh.trace("updateNode called with:",e),VO.get(KT.CONFIG_PARAMS.REPLICATION_URL)??VO.get(KT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ume(e);Lh.checkClusteringEnabled();let t=sme(e);if(t)throw qO(t,t.message,$O.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Lh.getNodeRecord(r);s.length>0&&(n=ime(s));let{added:i,skipped:o}=await ome(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=dme,c;let l=Lh.buildNodePayloads(i,mme,KT.OPERATIONS_ENUM.UPDATE_NODE,await Lh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Oh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Oh.trace("updateNode sending remote payload:",l);let u;try{u=await Ph.request(`${r}.${KK.REQUEST_SUFFIX}`,l)}catch(d){Oh.error(`updateNode received error from request: ${d}`);let f=Ph.requestErrorHandler(d,"update_node",r);throw qO(new Error,f,$O.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===KK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw qO(new Error,d,$O.INTERNAL_SERVER_ERROR,"error",d)}Oh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Ph.updateRemoteConsumer(m,r),m.subscribe===!0?await Ph.updateConsumerIterator(m.schema,m.table,r,"start"):await Ph.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new ame(r,[],u.system_info)]),await hme(n[0],i,u.system_info),o.length>0?c.message=fme:c.message=`Successfully updated '${r}'`,c}a(pme,"updateNode");async function hme(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 cme(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Lh.upsertNodeRecord(n),lme({type:"nats_update"})}a(hme,"updateNodeTable")});var JK=M((PBe,QK)=>{"use strict";var jK=require("joi"),{string:WK}=jK.types(),Eme=mt(),zK=(H(),v(z)),_me=me(),gme=Ct();QK.exports=Sme;function Sme(e){let t=WK.invalid(_me.get(zK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(gme.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=jK.object({operation:WK.valid(zK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Eme.validateBySchema(e,r)}a(Sme,"removeNodeValidator")});var YT=M((DBe,rY)=>{"use strict";var{handleHDBError:XK,hdbErrors:Tme}=_e(),{HTTP_STATUS_CODES:ZK}=Tme,yme=JK(),Dh=J(),eY=ca(),Rme=oe(),pf=(H(),v(z)),tY=Ct(),YO=_r(),WO=me(),{RemotePayloadObject:bme}=Ah(),{NodeSubscription:Ame}=uf(),Ime=pp(),wme=Nl(),{broadcast:Nme}=nt(),{setNode:Cme}=(mf(),v(ff)),Ome=WO.get(pf.CONFIG_PARAMS.CLUSTERING_NODENAME);rY.exports=Pme;async function Pme(e){if(Dh.trace("removeNode called with:",e),WO.get(pf.CONFIG_PARAMS.REPLICATION_URL)??WO.get(pf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Cme(e);eY.checkClusteringEnabled();let t=yme(e);if(t)throw XK(t,t.message,ZK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await eY.getNodeRecord(r);if(Rme.isEmptyOrZeroLength(n))throw XK(new Error,`Node '${r}' was not found.`,ZK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new bme(pf.OPERATIONS_ENUM.REMOVE_NODE,Ome,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await YO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await YO.updateRemoteConsumer(new Ame(d.schema,d.table,!1,!1),r)}catch(f){Dh.error(f)}}try{i=await YO.request(`${r}.${tY.REQUEST_SUFFIX}`,s),Dh.trace("Remove node reply from remote node:",r,i)}catch(l){Dh.error("removeNode received error from request:",l),o=!0}let c=new Ime(pf.SYSTEM_SCHEMA_NAME,pf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await wme.deleteRecord(c),Nme({type:"nats_update"}),i?.status===tY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Dh.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(Pme,"removeNode")});var iY=M((MBe,sY)=>{"use strict";var nY=require("joi"),{string:Lme,array:Dme}=nY.types(),vme=mt(),Mme=xT();sY.exports=Ume;function Ume(e){let t=nY.object({operation:Lme.valid("configure_cluster").required(),connections:Dme.items(Mme.validationSchema).required()});return vme.validateBySchema(e,t)}a(Ume,"configureClusterValidator")});var zO=M((xBe,uY)=>{"use strict";var oY=(H(),v(z)),WT=J(),xme=oe(),Bme=me(),Fme=YT(),kme=VT(),Hme=ca(),Gme=iY(),{handleHDBError:aY,hdbErrors:qme}=_e(),{HTTP_STATUS_CODES:cY}=qme,$me="Configure cluster complete.",Vme="Failed to configure the cluster. Check the logs for more details.",Kme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uY.exports=Yme;async function Yme(e){WT.trace("configure cluster called with:",e);let t=Gme(e);if(t)throw aY(t,t.message,cY.BAD_REQUEST,void 0,void 0,!0);let r=await Hme.getAllNodeRecords(),n=[];if(Bme.get(oY.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await lY(Fme,{operation:oY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}WT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await lY(kme,f,f.node_name);s.push(m)}WT.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(WT.error(m.node_name,m?.error?.message,m?.error?.stack),o.includes(m.node_name)||o.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(xme.isEmptyOrZeroLength(o))return{message:$me,connections:c};if(l)return{message:Kme,failed_nodes:o,connections:c};throw aY(new Error,Vme,cY.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Yme,"configureCluster");async function lY(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(lY,"functionWrapper")});var pY=M((FBe,mY)=>{"use strict";var vh=require("joi"),Wme=mt(),{validateSchemaExists:dY,validateTableExists:zme,validateSchemaName:fY}=Qi(),jme=vh.object({operation:vh.string().valid("purge_stream"),schema:vh.string().custom(dY).custom(fY).optional(),database:vh.string().custom(dY).custom(fY).optional(),table:vh.string().custom(zme).required()});function Qme(e){return Wme.validateBySchema(e,jme)}a(Qme,"purgeStreamValidator");mY.exports=Qme});var jO=M((HBe,hY)=>{"use strict";var{handleHDBError:Jme,hdbErrors:Xme}=_e(),{HTTP_STATUS_CODES:Zme}=Xme,epe=pY(),tpe=_r(),rpe=ca();hY.exports=npe;async function npe(e){e.schema=e.schema??e.database;let t=epe(e);if(t)throw Jme(t,t.message,Zme.BAD_REQUEST,void 0,void 0,!0);rpe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await tpe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(npe,"purgeStream")});var XO=M((qBe,bY)=>{"use strict";var JO=ca(),spe=_r(),jT=me(),hf=(H(),v(z)),jl=Ct(),ipe=oe(),QO=J(),{RemotePayloadObject:ope}=Ah(),{ErrorCode:EY}=require("nats"),{parentPort:_Y}=require("worker_threads"),{onMessageByType:ape}=nt(),{getThisNodeName:cpe}=(Ss(),v(ra)),{requestClusterStatus:lpe}=(fh(),v(lV)),{getReplicationSharedStatus:upe,getHDBNodeTable:dpe}=(Wd(),v(rV)),{CONFIRMATION_STATUS_POSITION:fpe,RECEIVED_VERSION_POSITION:gY,RECEIVED_TIME_POSITION:mpe,SENDING_TIME_POSITION:ppe,RECEIVING_STATUS_POSITION:hpe,RECEIVING_STATUS_RECEIVING:Epe,BACK_PRESSURE_RATIO_POSITION:_pe}=(VC(),v(e1)),SY=jT.get(hf.CONFIG_PARAMS.CLUSTERING_ENABLED),TY=jT.get(hf.CONFIG_PARAMS.CLUSTERING_NODENAME);bY.exports={clusterStatus:gpe,buildNodeStatus:RY};var yY;ape("cluster-status",async e=>{yY(e)});async function gpe(){if(jT.get(hf.CONFIG_PARAMS.REPLICATION_URL)||jT.get(hf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;_Y?(_Y.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{yY=i})):n=lpe();for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=upe(u,l,o);c.lastCommitConfirmed=zT(d[fpe]),c.lastReceivedRemoteTime=zT(d[gY]),c.lastReceivedLocalTime=zT(d[mpe]),c.lastReceivedVersion=d[gY],c.sendingMessage=zT(d[ppe]),c.backPressurePercent=d[_pe]*100,c.lastReceivedStatus=d[hpe]===Epe?"Receiving":"Waiting"}}n.node_name=cpe();let s=dpe().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:TY,is_enabled:SY,connections:[]};if(!SY)return e;let t=await JO.getAllNodeRecords();if(ipe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(RY(t[n],e.connections));return await Promise.allSettled(r),e}a(gpe,"clusterStatus");function zT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(zT,"asDate");async function RY(e,t){let r=e.name,n=new ope(hf.OPERATIONS_ENUM.CLUSTER_STATUS,TY,void 0,await JO.getSystemInfo()),s,i,o=jl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await spe.request(jl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===jl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=jl.CLUSTER_STATUS_STATUSES.CLOSED,QO.error(`Error getting node status from ${r} `,s))}catch(l){QO.warn(`Error getting node status from ${r}`,l),l.code===EY.NoResponders?o=jl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===EY.Timeout?o=jl.CLUSTER_STATUS_STATUSES.TIMEOUT:o=jl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Spe(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!==hf.PRE_4_0_0_VERSION&&await JO.upsertNodeRecord(l)}catch(l){QO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(RY,"buildNodeStatus");function Spe(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(Spe,"NodeStatusObject")});var eP=M((VBe,AY)=>{"use strict";var{handleHDBError:Tpe,hdbErrors:ype}=_e(),{HTTP_STATUS_CODES:Rpe}=ype,bpe=_r(),Ape=ca(),ZO=oe(),QT=require("joi"),Ipe=mt(),wpe=2e3,Npe=QT.object({timeout:QT.number().min(1),connected_nodes:QT.boolean(),routes:QT.boolean()});AY.exports=Cpe;async function Cpe(e){Ape.checkClusteringEnabled();let t=Ipe.validateBySchema(e,Npe);if(t)throw Tpe(t,t.message,Rpe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||ZO.autoCastBoolean(n),o=s===void 0||ZO.autoCastBoolean(s),c={nodes:[]},l=await bpe.getServerList(r??wpe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),o&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:ZO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Cpe,"clusterNetwork")});var CY=M((YBe,NY)=>{"use strict";var tP=require("joi"),IY=mt(),{routeConstraints:wY}=Ww();NY.exports={setRoutesValidator:Ope,deleteRoutesValidator:Ppe};function Ope(e){let t=tP.object({server:tP.valid("hub","leaf"),routes:wY.required()});return IY.validateBySchema(e,t)}a(Ope,"setRoutesValidator");function Ppe(e){let t=tP.object({routes:wY.required()});return IY.validateBySchema(e,t)}a(Ppe,"deleteRoutesValidator")});var JT=M((zBe,UY)=>{"use strict";var ua=gt(),rP=oe(),zs=(H(),v(z)),Ef=me(),OY=CY(),{handleHDBError:PY,hdbErrors:Lpe}=_e(),{HTTP_STATUS_CODES:LY}=Lpe,DY="cluster routes successfully set",vY="cluster routes successfully deleted";UY.exports={setRoutes:vpe,getRoutes:Mpe,deleteRoutes:Upe};function Dpe(e){let t=ua.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=rP.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ua.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ua.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:DY,set:i,skipped:s}}a(Dpe,"setRoutesNats");function vpe(e){let t=OY.setRoutesValidator(e);if(t)throw PY(t,t.message,LY.BAD_REQUEST,void 0,void 0,!0);if(Ef.get(zs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Dpe(e);let r=[],n=[],s=Ef.get(zs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{MY(s,i)?n.push(i):(s.push(i),r.push(i))}),ua.updateConfigValue(zs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:DY,set:r,skipped:n}}a(vpe,"setRoutes");function MY(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(MY,"existsInArray");function Mpe(){if(Ef.get(zs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ua.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Ef.get(zs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(Mpe,"getRoutes");function Upe(e){let t=OY.deleteRoutesValidator(e);if(t)throw PY(t,t.message,LY.BAD_REQUEST,void 0,void 0,!0);if(Ef.get(zs.CONFIG_PARAMS.CLUSTERING_ENABLED))return xpe(e);let r=[],n=[],s=Ef.get(zs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{MY(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),ua.updateConfigValue(zs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:vY,deleted:r,skipped:n}}a(Upe,"deleteRoutes");function xpe(e){let t=ua.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,o=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return o&&(r=rP.isEmptyOrZeroLength(r)?null:r,ua.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=rP.isEmptyOrZeroLength(n)?null:n,ua.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:vY,deleted:s,skipped:i}}a(xpe,"deleteRoutesNats")});var BY=M((QBe,xY)=>{"use strict";var Bpe=Ct(),nP=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f,m,p,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Bpe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};xY.exports=nP});var HY=M((XBe,kY)=>{"use strict";var FY=Ct(),sP=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+FY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+FY.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};kY.exports=sP});var qY=M((eFe,GY)=>{"use strict";var iP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};GY.exports=iP});var VY=M((rFe,$Y)=>{"use strict";var Fpe=Ct(),oP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Fpe.SERVER_SUFFIX.ADMIN,this.password=r}};$Y.exports=oP});var ty=M((sFe,WY)=>{"use strict";var Ql=require("path"),Jl=require("fs-extra"),kpe=BY(),Hpe=HY(),Gpe=qY(),qpe=VY(),aP=Es(),gf=oe(),zn=gt(),ZT=(H(),v(z)),Mh=Ct(),{CONFIG_PARAMS:ir}=ZT,Sf=J(),Uh=me(),KY=no(),cP=_r(),$pe=ys(),_f="clustering",Vpe=1e4,YY=50;WY.exports={generateNatsConfig:Ype,removeNatsConfig:Wpe,getHubConfigPath:Kpe};function Kpe(){let e=Uh.get(ir.ROOTPATH);return Ql.join(e,_f,Mh.NATS_CONFIG_FILES.HUB_SERVER)}a(Kpe,"getHubConfigPath");async function Ype(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Uh.get(ir.ROOTPATH);Jl.ensureDirSync(Ql.join(r,"clustering","leaf")),Uh.initSync();let n=zn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=zn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=zn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await Jl.exists(i)&&!await Jl.exists(!n)&&await $pe.createNatsCerts();let o=Ql.join(r,_f,Mh.PID_FILES.HUB),c=Ql.join(r,_f,Mh.PID_FILES.LEAF),l=zn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Ql.join(r,_f,Mh.NATS_CONFIG_FILES.HUB_SERVER),d=Ql.join(r,_f,Mh.NATS_CONFIG_FILES.LEAF_SERVER),f=zn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=zn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=zn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=zn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cP.checkNATSServerInstalled()||ey("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await aP.listUsers(),g=zn.getConfigFromFile(ir.CLUSTERING_USER),R=await aP.getClusterUser();(gf.isEmpty(R)||R.active!==!0)&&ey(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await XT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await XT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await XT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await XT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[j,Y]of E.entries())Y.role?.role===ZT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new qpe(Y.username,KY.decrypt(Y.hash))),y.push(new Gpe(Y.username,KY.decrypt(Y.hash))));let N=[],{hub_routes:I}=zn.getClusteringRoutes();if(!gf.isEmptyOrZeroLength(I))for(let j of I)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${j.host}:${j.port}`);let $=new kpe(zn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,zn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),zn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,S,y);n==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=gf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ZT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Jl.writeJson(u,$),Sf.trace(`Hub server config written to ${u}`));let ee=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,G=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new Hpe(zn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[ee],[G],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===ZT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Jl.writeJson(d,k),Sf.trace(`Leaf server config written to ${d}`))}a(Ype,"generateNatsConfig");async function XT(e){let t=Uh.get(e);return gf.isEmpty(t)&&ey(`port undefined for '${e}'`),await gf.isPortTaken(t)&&ey(`'${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(XT,"isPortAvailable");function ey(e){let t=`Error generating clustering config: ${e}`;Sf.error(t),console.error(t),process.exit(1)}a(ey,"generateNatsConfigError");async function Wpe(e){let{port:t,config_file:r}=cP.getServerConfig(e),{username:n,decrypt_hash:s}=await aP.getClusterUser(),i=0,o=2e3;for(;i<YY;){try{let d=await cP.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Sf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=YY)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&&Sf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await gf.asyncSetTimeout(u)}let c="0".repeat(Vpe),l=Ql.join(Uh.get(ir.ROOTPATH),_f,r);await Jl.writeFile(l,c),await Jl.remove(l),Sf.notify(e,"started.")}a(Wpe,"removeNatsConfig")});var ZY=M((oFe,XY)=>{"use strict";var bs=me(),et=(H(),v(z)),xh=Ct(),da=require("path"),{PACKAGE_ROOT:ny}=yt(),zY=me(),ry=oe(),Tf="/dev/null",zpe=da.join(ny,"launchServiceScripts"),jY=da.join(ny,"utility/scripts"),jpe=da.join(jY,et.HDB_RESTART_SCRIPT),QY=da.resolve(ny,"dependencies",`${process.platform}-${process.arch}`,xh.NATS_BINARY_NAME);function JY(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return ry.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=ry.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:ny}}a(JY,"generateMainServerConfig");var Qpe=9930;function Jpe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=da.join(e,"clustering",xh.NATS_CONFIG_FILES.HUB_SERVER),r=da.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=zY.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=xh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Qpe?"-"+n:""),binFile:QY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Tf,i.error_file=Tf),i}a(Jpe,"generateNatsHubServerConfig");var Xpe=9940;function Zpe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=da.join(e,"clustering",xh.NATS_CONFIG_FILES.LEAF_SERVER),r=da.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=zY.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=xh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Xpe?"-"+n:""),binFile:QY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Tf,i.error_file=Tf),i}a(Zpe,"generateNatsLeafServerConfig");function ehe(){bs.initSync();let e=da.join(bs.get(et.CONFIG_PARAMS.LOGGING_ROOT),et.LOG_NAMES.HDB),t={name:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:zpe,autorestart:!1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Tf,t.error_file=Tf),t}a(ehe,"generateClusteringUpgradeV4ServiceConfig");function the(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return ry.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=ry.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:jY},script:jpe}}a(the,"generateRestart");function rhe(){return{apps:[JY()]}}a(rhe,"generateAllServiceConfigs");XY.exports={generateAllServiceConfigs:rhe,generateMainServerConfig:JY,generateRestart:the,generateNatsHubServerConfig:Jpe,generateNatsLeafServerConfig:Zpe,generateClusteringUpgradeV4ServiceConfig:ehe}});var yf=M((lFe,oW)=>{"use strict";var Lr=(H(),v(z)),cFe=oe(),ma=ty(),sy=_r(),fa=Ct(),Rc=ZY(),uP=me(),bc=J(),nhe=ca(),{startWorker:eW,onMessageFromWorkers:she}=nt(),tW=require("fs"),ihe=require("node:path"),ohe=(H(),v(z)),{setTimeout:ahe}=require("node:timers/promises"),{execFile:che,fork:lhe}=require("node:child_process");oW.exports={start:Ac,restart:dhe,kill:hhe,startAllServices:Ehe,startService:nW,restartHdb:fhe,startClusteringProcesses:sW,startClusteringThreads:iW,isHdbRestartRunning:mhe,getHdbPid:phe,cleanupChildrenProcesses:Bh,reloadClustering:ghe,expectedRestartOfChildren:rW};she(e=>{e.type==="restart"&&uP.initSync(!0)});var Eo=[],uhe=10,lP;function Ac(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?lhe(e.script,r,e):che(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(o,c)=>{console.error(o,c)}),n.on("exit",async o=>{let c=Eo.indexOf(n);c>-1&&Eo.splice(c,1),!lP&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<uhe&&(tW.existsSync(ma.getHubConfigPath())?Ac(e):(await ma.generateNatsConfig(!0),Ac(e),await new Promise(l=>setTimeout(l,3e3)),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=uP.get(Lr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&fa.LOG_LEVEL_HIERARCHY[c]>=fa.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===fa.LOG_LEVELS.ERR||f===fa.LOG_LEVELS.WRN?bc.OUTPUTS.STDERR:bc.OUTPUTS.STDOUT;bc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=fa.LOG_LEVELS[p]}if(fa.LOG_LEVEL_HIERARCHY[c]>=fa.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===fa.LOG_LEVELS.ERR||f===fa.LOG_LEVELS.WRN?bc.OUTPUTS.STDERR:bc.OUTPUTS.STDOUT;bc.logCustomLevel(f||"info",m,s,o.toString().slice(d).trim())}}a(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),Eo.length===0&&(t||(process.on("exit",Bh),process.on("SIGINT",Bh),process.on("SIGQUIT",Bh),process.on("SIGTERM",Bh))),Eo.push(n)}a(Ac,"start");function Bh(e=!0){if(!lP&&(lP=!0,Eo.length!==0))if(bc.info("Killing child processes..."),Eo.map(t=>t.kill()),e)process.exit(0);else return ahe(2e3)}a(Bh,"cleanupChildrenProcesses");function dhe(e){rW();for(let t of Eo)t.name===e&&t.kill()}a(dhe,"restart");function rW(){for(let e of Eo)e.config&&(e.config.restarts=0)}a(rW,"expectedRestartOfChildren");async function fhe(){await Ac(Rc.generateRestart())}a(fhe,"restartHdb");async function mhe(){let e=await list();for(let t in e)if(e[t].name===Lr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(mhe,"isHdbRestartRunning");function phe(){let e=uP.getHdbBasePath();if(!e)return;let t=ihe.join(e,ohe.HDB_PID_FILE),r=She(t);if(!(!r||r===process.pid)&&The(r))return r}a(phe,"getHdbPid");function hhe(){for(let e of Eo)e.kill();Eo=[]}a(hhe,"kill");async function Ehe(){await sW(),await iW(),await Ac(Rc.generateAllServiceConfigs())}a(Ehe,"startAllServices");async function nW(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Lr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Rc.generateMainServerConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Rc.generateNatsIngestServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Rc.generateNatsReplyServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Rc.generateNatsHubServerConfig(),await Ac(r,t),await ma.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Rc.generateNatsLeafServerConfig(),await Ac(r,t),await ma.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Rc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Ac(r,t)}a(nW,"startService");var _he;async function sW(e=!1){for(let t in Lr.CLUSTERING_PROCESSES){let r=Lr.CLUSTERING_PROCESSES[t];await nW(r,e)}}a(sW,"startClusteringProcesses");async function iW(){_he=eW(Lr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await sy.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await sy.updateLocalStreams();let e=await nhe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Lr.PRE_4_0_0_VERSION){bc.info("Starting clustering upgrade 4.0.0 process"),eW(Lr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(iW,"startClusteringThreads");async function ghe(){await ma.generateNatsConfig(!0),await sy.reloadNATSHub(),await sy.reloadNATSLeaf(),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(ghe,"reloadClustering");function She(e){try{return Number.parseInt(tW.readFileSync(e,"utf8"),10)}catch{return null}}a(She,"readPidFile");function The(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(The,"isProcessRunning")});var mP={};ye(mP,{compactOnStart:()=>yhe,copyDb:()=>fW});async function yhe(){Ic.notify("Running compact on start"),console.log("Running compact on start");let e=(0,dP.get)(F.ROOTPATH),t=new Map,r=ct();(0,fP.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,iy.join)(e,"backup",n+".mdb"),o=(0,iy.join)(e,jc,n+"-copy.mdb"),c=0;try{c=await aW(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Ic.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:o,backupDest:i,recordCount:c}),await fW(n,o),console.log("Backing up",n,"to",i);try{await(0,Xl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Od()}catch(n){Ic.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Xl.move)(i,s,{overwrite:!0}),await(0,Xl.remove)((0,iy.join)(e,jc,`${n}-copy.mdb-lock`));try{Od()}catch(n){Ic.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Ic.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,fP.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,Xl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Od(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=!0,c=await aW(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
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw fr.error(i),new Error(`Error reading HarperDB config file at ${r}`)}Boe(n,r),Qw(n);let s=n.toJSON();if(Coe.config=s,Ft=hd(s),Ft.logging_rotation_rotate)for(let i in iG)Ft[i]&&fr.error(`Config ${iG[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);fr.trace(Poe)}}a(Qg,"initConfig");function Boe(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],hs.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],hs.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(fr.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);Tn.writeFileSync(t,String(e))}}a(Boe,"checkForUpdatedConfig");function Qw(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 pd.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 pd.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=boe(r,t);if(n.error)throw pd.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(Qw,"validateConfig");function Foe(e,t){Ft===void 0&&(Ft={});let r=Ei[e.toLowerCase()];if(r===void 0){fr.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ft[r.toLowerCase()]=t}a(Foe,"updateConfigObject");function fG(e,t,r=void 0,n=!1,s=!1,i=!1){Ft===void 0&&Qg();let o=dG(Ei.hdb_root),c=hs.join(o,Hs.HDB_CONFIG_FILE),l=rc(c),u;if(r&&Ft){let m=!1;for(let p in r)if(r[p]!=Ft[p.toLowerCase()]){m=!0;break}if(!m){fr.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===ps.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=Ei[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let p=m.split("_"),h=jw(m,t);l.setIn([...p],h)}else for(let m in r){let p=Ei[m.toLowerCase()];if(p===ps.HTTP_SECUREPORT&&r[m]===Ft[ps.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),p===ps.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Ft[ps.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),p===ps.DATABASES){u=r[m];continue}if(p?.startsWith("threads_")){let h=l.getIn(["threads"]);h>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],h))}if(!p&&(m.endsWith("_package")||m.endsWith("_port"))&&(p=m),p!==void 0){let h=p.split("_"),E=Hs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];E&&E.startsWith("customFunctions")&&l.hasIn(E.split("_"))&&(p=E,h=E.split("_"));let g=jw(p,r[m]);p==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{h.length>1&&typeof l.getIn(h.slice(0,-1))=="boolean"&&l.deleteIn(h.slice(0,-1)),l.setIn([...h],g)}catch(R){fr.error(R)}}}u&&uG(l,u),Qw(l);let d=l.getIn(["rootPath"]),f=hs.join(d,Hs.HDB_CONFIG_FILE);if(n===!0&&koe(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);Tn.writeFileSync(f,String(l)),s&&(Ft=hd(l.toJSON())),fr.trace(`Config parameter: ${e} updated with value: ${t}`)}a(fG,"updateConfigValue");function koe(e,t){try{let r=hs.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${Hs.HDB_CONFIG_FILE}.bak`);Tn.copySync(e,r),fr.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){fr.error(Loe),fr.error(r)}}a(koe,"backupConfigFile");var Hoe=["databases"];function hd(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}),jg=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])&&!Hoe.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;!ps[l.toUpperCase()]&&Ei[l]&&(s[Ei[l].toLowerCase()]=o[c]),s[l]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(hd,"flattenConfig");function jw(e,t){if(e===ps.CLUSTERING_NODENAME||e===ps.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(Aoe(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Cr.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 Cr.autoCast(t)}a(jw,"castConfigValue");function Goe(){let e=Cr.getPropsFilePath(),t=Pl(e);return rc(t).toJSON()}a(Goe,"getConfiguration");async function qoe(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return fG(void 0,void 0,s,!0),Moe}catch(i){throw typeof i=="string"||i instanceof String?woe(i,i,Noe.BAD_REQUEST,void 0,void 0,!0):i}}a(qoe,"setConfiguration");function Jw(){let e=Cr.getPropsFilePath();try{Tn.accessSync(e,Tn.constants.F_OK|Tn.constants.R_OK)}catch(n){if(!Cr.noBootFile())throw fr.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Pl(e);return rc(t).toJSON()}a(Jw,"readConfigFile");function rc(e){return oG.parseDocument(Tn.readFileSync(e,"utf8"),{simpleKeys:!0})}a(rc,"parseYamlDoc");function $oe(){let e=Jw(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Cr.isEmptyOrZeroLength(t)?[]:t;let r=sG(t);if(r)throw pd.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Cr.isEmptyOrZeroLength(n)?[]:n;let s=sG(n);if(s)throw pd.CONFIG_VALIDATION(s.message);if(!Cr.isEmptyOrZeroLength(n)&&!Cr.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Cr.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw pd.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a($oe,"getClusteringRoutes");function mG(e){let t=aG(e);Ft={};for(let r in Ei){let n=t.get(r.toUpperCase());if(Cr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Ei[r].toLowerCase();s===ps.LOGGING_ROOT?Ft[s]=hs.dirname(n):Ft[s]=n}return Ft}a(mG,"initOldConfig");function Voe(e){let t=Jw();return Ioe.get(t,e.replaceAll("_","."))}a(Voe,"getConfigFromFile");async function Koe(e,t){let r=rc(Pl());if(r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);await Tn.writeFile(Pl(),String(r))}a(Koe,"addConfig");function Yoe(e){let t=Pl(Cr.getPropsFilePath()),r=rc(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=hs.join(n,Hs.HDB_CONFIG_FILE);Tn.writeFileSync(s,String(r))}a(Yoe,"deleteConfigFromFile");function Woe(){return jg||(Qg(),jg)}a(Woe,"getConfigObj");function zoe(){return Ft||Qg(),Ft}a(zoe,"getFlatConfigObj")});var Es=M((Tve,Vr)=>{"use strict";var EG="username is required",_G="nothing to update, must supply active, role or password to update",gG="password cannot be an empty string",SG="If role is specified, it cannot be empty.",TG="active must be true or false";Vr.exports.addUser=nae;Vr.exports.alterUser=sae;Vr.exports.dropUser=oae;Vr.exports.getSuperUser=dae;Vr.exports.userInfo=aae;Vr.exports.listUsers=Zg;Vr.exports.listUsersExternal=cae;Vr.exports.setUsersWithRolesCache=Ll;Vr.exports.findAndValidateUser=iN;Vr.exports.getClusterUser=fae;Vr.exports.getUsersWithRolesCache=uae;Vr.exports.USERNAME_REQUIRED=EG;Vr.exports.ALTERUSER_NOTHING_TO_UPDATE=_G;Vr.exports.EMPTY_PASSWORD=gG;Vr.exports.EMPTY_ROLE=SG;Vr.exports.ACTIVE_BOOLEAN=TG;var yG=Vn(),joe=Nl(),Pp=(Dw(),v(Lw)),RG=EH(),Lp=gn(),tN=Wo(),io=oe(),bG=require("validate.js"),rN=J(),{promisify:Qoe}=require("util"),nN=no(),Zw=(H(),v(z)),pG=Ct(),Joe=gt(),Xoe=me(),Zoe=Xi(),{hdbErrors:eae,ClientError:_i}=_e(),{HTTP_STATUS_CODES:Jo,AUTHENTICATION_ERROR_MSGS:Xw,HDB_ERROR_MSGS:Ed}=eae,{UserEventMsg:sN}=ls(),eN=require("lodash"),{server:Xg}=(Hr(),v(Tm)),tae=J();Xg.getUser=(e,t)=>iN(e,t,t!=null);Xg.authenticateUser=(e,t)=>iN(e,t);var AG={username:!0,active:!0,role:!0,password:!0},hG=new Map,rae=Qoe(joe.delete),Jg=Xoe.get(Zw.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??Pp.HASH_FUNCTION.SHA256,oo;async function nae(e){let t=bG.cleanAttributes(e,AG),r=RG.addUserValidation(t);if(r)throw new _i(r.message);let n=await Lp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new _i(Ed.ROLE_NAME_NOT_FOUND(t.role),Jo.NOT_FOUND);if(n.length>1)throw new _i(Ed.DUP_ROLES_FOUND(t.role),Jo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=nN.encrypt(t.password)),t.password=await Pp.hash(t.password,Jg),t.hash_function=Jg,t.role=n[0].id;let s=await yG.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(rN.debug(s),await Ll(),s.skipped_hashes.length===1)throw new _i(Ed.USER_ALREADY_EXISTS(t.username),Jo.CONFLICT);return tN.signalUserChange(new sN(process.pid)),`${t.username} successfully added`}a(nae,"addUser");async function sae(e){let t=bG.cleanAttributes(e,AG);if(io.isEmptyOrZeroLength(t.username))throw new Error(EG);if(io.isEmptyOrZeroLength(t.password)&&io.isEmptyOrZeroLength(t.role)&&io.isEmptyOrZeroLength(t.active))throw new Error(_G);if(!io.isEmpty(t.password)&&io.isEmptyOrZeroLength(t.password.trim()))throw new Error(gG);if(!io.isEmpty(t.active)&&!io.isBoolean(t.active))throw new Error(TG);if(!io.isEmpty(t.password)&&!io.isEmptyOrZeroLength(t.password.trim())&&(iae(t.username)&&(t.hash=nN.encrypt(t.password)),t.password=await Pp.hash(t.password,Jg),t.hash_function=Jg),t.role==="")throw new Error(SG);if(t.role){let n=await Lp.searchByValue({schema:"system",table:"hdb_role",attribute:"role",value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new _i(Ed.ALTER_USER_ROLE_NOT_FOUND(t.role),Jo.NOT_FOUND);if(n.length>1)throw new _i(Ed.DUP_ROLES_FOUND(t.role),Jo.CONFLICT);t.role=n[0].id}let r=await yG.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await Ll(),tN.signalUserChange(new sN(process.pid)),r}a(sae,"alterUser");function iae(e){let t=!1,r=oo.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(iae,"isClusterUser");async function oae(e){let t=RG.dropUserValidation(e);if(t)throw new _i(t.message);if(oo.get(e.username)===void 0)throw new _i(Ed.USER_NOT_EXIST(e.username),Jo.NOT_FOUND);let r=await rae({table:"hdb_user",schema:"system",hash_values:[e.username]});return rN.debug(r),await Ll(),tN.signalUserChange(new sN(process.pid)),`${e.username} successfully deleted`}a(oae,"dropUser");async function aae(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=eN.cloneDeep(e.hdb_user);let r=await Lp.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}a(aae,"userInfo");async function cae(){let e=await Zg();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}a(cae,"listUsersExternal");async function Zg(){let e=await Lp.searchByValue({schema:"system",table:"hdb_role",value:"*",attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=eN.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await Lp.searchByValue({schema:"system",table:"hdb_user",value:"*",attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=eN.cloneDeep(s),s.role=t[s.role],lae(s.role),n.set(s.username,s);return n}a(Zg,"listUsers");function lae(e){if(!e){rN.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(Zoe)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}a(lae,"appendSystemTablesToRole");async function Ll(e=void 0){e?oo=e:oo=await Zg()}a(Ll,"setUsersWithRolesCache");async function uae(){return oo||await Ll(),oo}a(uae,"getUsersWithRolesCache");async function iN(e,t,r=!0){oo||await Ll();let n=oo.get(e);if(!n){if(!r)return{username:e};throw new _i(Xw.GENERIC_AUTH_FAIL,Jo.UNAUTHORIZED)}if(n&&!n.active)throw new _i(Xw.USER_INACTIVE,Jo.UNAUTHORIZED);let s={active:n.active,username:n.username};if(n.refresh_token&&(s.refresh_token=n.refresh_token),n.role&&(s.role=n.role),r===!0){if(hG.get(t)===n.password)return s;{let i=Pp.validate(n.password,t,n.hash_function||Pp.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)hG.set(t,n.password);else throw new _i(Xw.GENERIC_AUTH_FAIL,Jo.UNAUTHORIZED)}}return s}a(iN,"findAndValidateUser");async function dae(){oo||await Ll();for(let[,e]of oo)if(e.role.role==="super_user")return e}a(dae,"getSuperUser");async function fae(){let e=await Zg(),t=Joe.getConfigFromFile(Zw.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==Zw.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=nN.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+pG.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+pG.SERVER_SUFFIX.ADMIN,r}a(fae,"getClusterUser");var IG=[];Xg.invalidateUser=function(e){for(let t of IG)try{t(e)}catch(r){tae.error("Error invalidating user",r)}};Xg.onInvalidatedUser=function(e){IG.push(e)}});var Ne,_d=se(()=>{Ne={HEALTHY:"healthy",WARNING:"warning",ERROR:"error",UNKNOWN:"unknown",LOADING:"loading"}});var gd,oN=se(()=>{_d();gd=class{static{a(this,"ComponentStatus")}lastChecked;status;message;error;constructor(t,r,n){this.lastChecked=new Date,this.status=t,this.message=r,this.error=n}updateStatus(t,r){this.status=t,this.message=r,this.lastChecked=new Date,t!==Ne.ERROR&&(this.error=void 0)}markHealthy(t){this.updateStatus(Ne.HEALTHY,t||"Component is healthy")}markError(t,r){this.status=Ne.ERROR,this.error=t,this.message=r||(typeof t=="string"?t:t.message),this.lastChecked=new Date}markWarning(t){this.updateStatus(Ne.WARNING,t)}markLoading(t){this.updateStatus(Ne.LOADING,t||"Component is loading")}isHealthy(){return this.status===Ne.HEALTHY}hasError(){return this.status===Ne.ERROR}isLoading(){return this.status===Ne.LOADING}hasWarning(){return this.status===Ne.WARNING}getSummary(){let t=this.status.toUpperCase(),r=this.message?`: ${this.message}`:"";return`${t}${r}`}}});var Dl,nc,aN,Sd,cN,Td,lN,eS=se(()=>{Dl=b(Jr()),nc=class extends Error{static{a(this,"ComponentStatusError")}statusCode;timestamp;constructor(t,r=Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR){super(t),this.name="ComponentStatusError",this.statusCode=r,this.timestamp=new Date,Error.captureStackTrace(this,this.constructor)}},aN=class extends nc{static{a(this,"CrossThreadTimeoutError")}requestId;timeoutMs;collectedCount;constructor(t,r,n){super(`Component status collection timeout after ${r}ms. Collected ${n} responses for request ${t}.`,Dl.HTTP_STATUS_CODES.GATEWAY_TIMEOUT),this.name="CrossThreadTimeoutError",this.requestId=t,this.timeoutMs=r,this.collectedCount=n}},Sd=class extends nc{static{a(this,"ITCError")}operation;cause;constructor(t,r){super(`Inter-thread communication failed during ${t}: ${r?.message||"Unknown error"}`,Dl.HTTP_STATUS_CODES.SERVICE_UNAVAILABLE),this.name="ITCError",this.operation=t,this.cause=r}},cN=class extends nc{static{a(this,"AggregationError")}componentCount;cause;constructor(t,r){super(`Failed to aggregate status for ${t} components: ${r?.message||"Unknown error"}`,Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="AggregationError",this.componentCount=t,this.cause=r}},Td=class extends nc{static{a(this,"ComponentStatusOperationError")}componentName;operation;constructor(t,r,n){super(`Component '${t}' ${r} failed: ${n}`,Dl.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="ComponentStatusOperationError",this.componentName=t,this.operation=r}},lN=class extends nc{static{a(this,"CrossThreadCollectionError")}result;constructor(t){let r=t.success?`Partial collection success: ${t.collectedFromThreads} threads responded`+(t.timedOutThreads.length>0?`, ${t.timedOutThreads.length} timed out`:""):`Collection failed: ${t.errors.map(n=>n.message).join(", ")}`;super(r,Dl.HTTP_STATUS_CODES.OK),this.name="CrossThreadCollectionError",this.result=t}getDiagnostics(){let t=[`Cross-thread collection ${this.result.success?"partially succeeded":"failed"}`,`Threads responded: ${this.result.collectedFromThreads}`];return this.result.expectedThreads&&t.push(`Expected threads: ${this.result.expectedThreads}`),this.result.timedOutThreads.length>0&&t.push(`Timed out threads: ${this.result.timedOutThreads.join(", ")}`),this.result.errors.length>0&&(t.push("Errors:"),this.result.errors.forEach((r,n)=>{t.push(` ${n+1}. ${r.name}: ${r.message}`)})),t.join(`
15
+ `)}}});var wG,vl,NG,sc,Dp,yd,mae,tS,uN=se(()=>{wG=b(ls()),vl=b(st());H();NG=b(wr());_d();eS();sc=(0,NG.loggerWithTag)("componentStatus.crossThread"),Dp=class{static{a(this,"CrossThreadStatusCollector")}awaitingResponses=new Map;responseCheckers=new Map;nextRequestId=1;listenerAttached=!1;timeout;cleanupTimer=null;constructor(t=5e3){this.timeout=t}attachListener(){this.listenerAttached||((0,vl.onMessageByType)(f_.COMPONENT_STATUS_RESPONSE,({message:t})=>{let r=t.isMainThread?"main":`worker-${t.workerIndex}`;sc.trace?.("Received component status response from %s, with requestId: %d",r,t.requestId);let n=this.awaitingResponses.get(t.requestId);if(n){n.push({workerIndex:t.workerIndex,isMainThread:t.isMainThread||!1,statuses:t.statuses||[]});let s=this.responseCheckers.get(t.requestId);s&&s()}}),this.listenerAttached=!0)}scheduleCleanup(){this.cleanupTimer&&clearTimeout(this.cleanupTimer),this.awaitingResponses.size>0&&(this.cleanupTimer=setTimeout(()=>{this.awaitingResponses.size>0&&(sc.debug?.(`Cleaning up ${this.awaitingResponses.size} stale pending requests`),this.awaitingResponses.clear()),this.cleanupTimer=null},3e4))}async collect(t){try{this.attachListener(),this.scheduleCleanup();let r=this.nextRequestId++,n=[];this.awaitingResponses.set(r,n);let o=((0,vl.getWorkerCount)()||1)+1-1,l=await new Promise((p,h)=>{let E=!1,g=a(()=>{let y=this.awaitingResponses.get(r);y&&y.length>=o&&!E&&(E=!0,S(),sc.trace?.(`Collected all ${y.length} expected responses for request ${r}`),p(y))},"checkComplete"),R=setTimeout(()=>{if(!E){E=!0;let y=this.awaitingResponses.get(r)||[];this.awaitingResponses.delete(r),sc.debug?.(`Collection timeout for request ${r}: collected ${y.length}/${o} responses`),p(y)}},this.timeout),S=a(()=>{this.awaitingResponses.delete(r),clearTimeout(R)},"cleanup");this.responseCheckers.set(r,g),(0,wG.sendItcEvent)({type:f_.COMPONENT_STATUS_REQUEST,message:{requestId:r}}).then(()=>{g()}).catch(y=>{E=!0,S(),this.responseCheckers.delete(r),h(new Sd("sendItcEvent",y))})});this.responseCheckers.delete(r);let u=new Map,d=t.getAllStatuses(),f=(0,vl.getWorkerIndex)(),m=f===void 0?"main":`worker-${f}`;for(let[p,h]of d)u.set(`${p}@${m}`,{...h,workerIndex:f});for(let p of l)for(let[h,E]of p.statuses){let g=p.isMainThread?"main":`worker-${p.workerIndex}`;u.set(`${h}@${g}`,{...E,workerIndex:p.workerIndex})}return sc.debug?.(`Collected component status from ${l.length+1} threads (including local)`),u}catch(r){return r instanceof Sd?sc.error?.(`ITC failure during component status collection: ${r.message}`):sc.warn?.("Failed to collect component status from all threads:",r),sc.debug?.(`Collection failed for request. Error: ${r instanceof Error?r.message:"Unknown error"}`),this.getLocalStatusOnly(t)}}getLocalStatusOnly(t){let r=t.getAllStatuses(),n=new Map,s=(0,vl.getWorkerIndex)(),i=s===void 0?"main":`worker-${s}`;for(let[o,c]of r)n.set(`${o}@${i}`,{...c,workerIndex:s});return n}cleanup(){this.awaitingResponses.clear(),this.responseCheckers.clear(),this.cleanupTimer&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null)}},yd=class{static{a(this,"StatusAggregator")}static aggregate(t){let r=new Map,n=new Map;for(let[s,i]of t){let o=s.indexOf("@"),c=o!==-1?s.substring(0,o):s,l=n.get(c);l||(l=[],n.set(c,l)),l.push([s,i])}for(let[s,i]of n){let o=this.aggregateComponentGroup(s,i);r.set(s,o)}return r}static aggregateComponentGroup(t,r){let n={workers:{}},s=0,i,o,c=new Map,l=new Map;for(let[m,p]of r){let h=m.lastIndexOf("@"),E=h!==-1?m.substring(h+1):"",g=p.lastChecked instanceof Date?p.lastChecked.getTime():new Date(p.lastChecked).getTime();if(E==="main")n.main=g;else if(E&&E.startsWith("worker-")){let R=parseInt(E.substring(7));isNaN(R)||(n.workers[R]=g)}c.set(p.status,(c.get(p.status)||0)+1),p.status!==Ne.HEALTHY&&p.message&&(!i||g>s)&&(s=g,i=p.message),p.error&&!o&&(o=p.error)}let u=this.determineOverallStatus(c);if(Array.from(c.keys()).length>1)for(let[m,p]of r)p.status!==u&&l.set(m,{workerIndex:p.workerIndex!==void 0?p.workerIndex:-1,status:p.status,message:p.message,error:p.error});let f={componentName:t,status:u,lastChecked:n,latestMessage:i,error:o};return l.size>0&&(f.abnormalities=l),f}static determineOverallStatus(t){let r=[Ne.ERROR,Ne.WARNING,Ne.LOADING,Ne.UNKNOWN,Ne.HEALTHY];for(let n of r)if(t.has(n)&&t.get(n)>0)return n;return Ne.UNKNOWN}},mae=parseInt(process.env.COMPONENT_STATUS_TIMEOUT||"5000"),tS=new Dp(mae)});var ic,rS=se(()=>{oN();_d();uN();eS();ic=class e{static{a(this,"ComponentStatusRegistry")}statusMap=new Map;reset(){this.statusMap=new Map}setStatus(t,r,n,s){if(!t||typeof t!="string")throw new Td(String(t),"setStatus","Component name must be a non-empty string");if(!Object.values(Ne).includes(r))throw new Td(t,"setStatus",`Invalid status level: ${r}. Must be one of: ${Object.values(Ne).join(", ")}`);this.statusMap.set(t,new gd(r,n,s))}getStatus(t){return this.statusMap.get(t)}getAllStatuses(){return this.statusMap}reportHealthy(t,r){this.setStatus(t,Ne.HEALTHY,r)}reportError(t,r,n){this.setStatus(t,Ne.ERROR,n,r)}reportWarning(t,r){this.setStatus(t,Ne.WARNING,r)}initializeLoading(t,r){this.setStatus(t,Ne.LOADING,r||"Component is loading")}markLoaded(t,r){this.setStatus(t,Ne.HEALTHY,r||"Component loaded successfully")}markFailed(t,r,n){this.setStatus(t,Ne.ERROR,n,r)}getComponentsByStatus(t){let r=[];for(let[n,s]of this.statusMap)s.status===t&&r.push({name:n,status:s});return r}getStatusSummary(){let t={[Ne.HEALTHY]:0,[Ne.ERROR]:0,[Ne.WARNING]:0,[Ne.LOADING]:0,[Ne.UNKNOWN]:0};for(let r of this.statusMap.values())t[r.status]++;return t}static async getAggregatedFromAllThreads(t){let r=await tS.collect(t);return yd.aggregate(r)}async getAggregatedStatusFor(t,r){r||(r=await e.getAggregatedFromAllThreads(this));let n=[],s=t+".",i=r.get(t);i&&n.push({key:t,...i});for(let[f,m]of r)f.startsWith(s)&&n.push({key:f,...m});if(n.length===0)return{status:Ne.UNKNOWN,message:"The component has not been loaded yet (may need a restart)",lastChecked:{workers:{}}};let o=n.some(f=>f.status===Ne.ERROR),c=n.some(f=>f.status===Ne.LOADING),l=o?Ne.ERROR:c?Ne.LOADING:Ne.HEALTHY,u="All components loaded successfully",d={};if(o||c){u=n.filter(m=>m.status===Ne.ERROR||m.status===Ne.LOADING).map(m=>`${m.key}: ${m.latestMessage||m.status}`).join("; ");for(let m of n)m.status!==Ne.HEALTHY&&(d[m.key]={status:m.status,message:m.latestMessage})}return{status:l,message:u,...Object.keys(d).length>0&&{details:d},lastChecked:n[0]?.lastChecked||{workers:{}}}}}});var mr,nS=se(()=>{rS();mr=new ic});function OG(e){let t=CG.get(e);return t||(t=new dN(e),CG.set(e,t)),t}function PG(){mr.reset()}var dN,CG,ao,LG,DG=se(()=>{nS();_d();dN=class{static{a(this,"ComponentStatusBuilder")}componentName;constructor(t){this.componentName=t}healthy(t){return mr.setStatus(this.componentName,Ne.HEALTHY,t),this}warning(t){return mr.setStatus(this.componentName,Ne.WARNING,t),this}error(t,r){return mr.setStatus(this.componentName,Ne.ERROR,t,r),this}loading(t){return mr.setStatus(this.componentName,Ne.LOADING,t||"Loading..."),this}unknown(t){return mr.setStatus(this.componentName,Ne.UNKNOWN,t),this}get(){return mr.getStatus(this.componentName)}},CG=new Map;a(OG,"statusForComponent");ao={loading(e,t){mr.initializeLoading(e,t)},loaded(e,t){mr.markLoaded(e,t)},failed(e,t,r){mr.markFailed(e,t,r)}};a(PG,"reset");LG=Ne});var vp={};ye(vp,{AggregationError:()=>cN,COMPONENT_STATUS_LEVELS:()=>Ne,ComponentStatus:()=>gd,ComponentStatusError:()=>nc,ComponentStatusOperationError:()=>Td,ComponentStatusRegistry:()=>ic,CrossThreadCollectionError:()=>lN,CrossThreadStatusCollector:()=>Dp,CrossThreadTimeoutError:()=>aN,ITCError:()=>Sd,StatusAggregator:()=>yd,componentStatusRegistry:()=>mr,crossThreadCollector:()=>tS,query:()=>pae});var pae,vG=se(()=>{nS();rS();oN();rS();uN();nS();eS();_d();pae={get(e){return mr.getStatus(e)},all(){return mr.getAllStatuses()},byStatus(e){return mr.getComponentsByStatus(e)},summary(){return mr.getStatusSummary()},async allThreads(){return ic.getAggregatedFromAllThreads(mr)}}});var fN={};ye(fN,{STATUS:()=>LG,internal:()=>vp,lifecycle:()=>ao,reset:()=>PG,statusForComponent:()=>OG});var Mp=se(()=>{DG();vG()});var xp=M((eMe,xG)=>{"use strict";var _s=J(),yn=(H(),v(z)),hae=tB(),Eae=Es(),{validateEvent:mN}=ls(),Up=fs(),_ae=require("process"),{resetDatabases:gae}=(we(),v(ft)),Sae={[yn.ITC_EVENT_TYPES.SCHEMA]:Tae,[yn.ITC_EVENT_TYPES.USER]:UG,[yn.ITC_EVENT_TYPES.COMPONENT_STATUS_REQUEST]:Rae};async function Tae(e){let t=mN(e);if(t){_s.error(t);return}_s.trace("ITC schemaHandler received schema event:",e),await hae(e.message),await yae(e.message)}a(Tae,"schemaHandler");async function yae(e){try{Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=gae();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){_s.error(t)}}a(yae,"syncSchemaMetadata");var MG=[];async function UG(e){try{try{Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Up.resetReadTxn(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){_s.warn(r)}let t=mN(e);if(t){_s.error(t);return}_s.trace(`ITC userHandler ${yn.HDB_ITC_CLIENT_PREFIX}${_ae.pid} received user event:`,e),await Eae.setUsersWithRolesCache();for(let r of MG)r()}catch(t){_s.error(t)}}a(UG,"userHandler");UG.addListener=function(e){MG.push(e)};async function Rae(e){try{let t=mN(e);if(t){_s.error(t);return}_s.trace("ITC componentStatusRequestHandler received request:",e);let{internal:r}=(Mp(),v(fN)),{getWorkerIndex:n}=st(),{sendItcEvent:s}=ls(),i=r.componentStatusRegistry.getAllStatuses(),o=Array.from(i.entries()),c=n(),l=c===void 0,u=e.message.originator,d={type:yn.ITC_EVENT_TYPES.COMPONENT_STATUS_RESPONSE,message:{requestId:e.message.requestId,statuses:o,workerIndex:c,isMainThread:l}};u!==void 0&&threads.sendToThread(u,d)?_s.trace(`Sent component status response directly to thread ${u}`):(u===void 0?_s.debug("No originator threadId, falling back to broadcast"):_s.warn(`Failed to send direct response to thread ${u}, falling back to broadcast`),await s(d))}catch(t){_s.error("Error handling component status request:",t)}}a(Rae,"componentStatusRequestHandler");xG.exports=Sae});var ls=M((oMe,FG)=>{"use strict";var rMe=J(),pN=oe(),bae=(H(),v(z)),{ITC_ERRORS:Bp}=Jr(),{parentPort:nMe,threadId:Aae,isMainThread:Iae,workerData:sMe}=require("worker_threads"),{onMessageFromWorkers:wae,broadcast:iMe,broadcastWithAcknowledgement:Nae}=st();FG.exports={sendItcEvent:Cae,validateEvent:BG,SchemaEventMsg:Oae,UserEventMsg:Pae};var sS;wae(async(e,t)=>{sS=sS||xp(),BG(e),sS[e.type]&&await sS[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Cae(e){return!Iae&&e.message&&(e.message.originator=Aae),Nae(e)}a(Cae,"sendItcEvent");function BG(e){if(typeof e!="object")return Bp.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||pN.isEmpty(e.type))return Bp.MISSING_TYPE;if(!e.hasOwnProperty("message")||pN.isEmpty(e.message))return Bp.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||pN.isEmpty(e.message.originator))return Bp.MISSING_ORIGIN;if(bae.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Bp.INVALID_EVENT(e.type)}a(BG,"validateEvent");function Oae(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(Oae,"SchemaEventMsg");function Pae(e){this.originator=e}a(Pae,"UserEventMsg")});var Wo=M((lMe,qG)=>{"use strict";var kG=(H(),v(z)),cMe=oe(),iS=J(),HG=B0(),Rd,{sendItcEvent:GG}=ls();function Lae(e){try{iS.debug("signalSchemaChange called with message:",e),Rd=Rd||xp();let t=new HG(kG.ITC_EVENT_TYPES.SCHEMA,e);return Rd.schema(t),GG(t)}catch(t){iS.error(t)}}a(Lae,"signalSchemaChange");function Dae(e){try{iS.trace("signalUserChange called with message:",e),Rd=Rd||xp();let t=new HG(kG.ITC_EVENT_TYPES.USER,e);return Rd.user(t),GG(t)}catch(t){iS.error(t)}}a(Dae,"signalUserChange");qG.exports={signalSchemaChange:Lae,signalUserChange:Dae}});function Fp(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 $G(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Gs(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 Gs,kp=se(()=>{Gs=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(Fp,"appendHeader");a($G,"mergeHeaders")});function oS(e,t,r=Mae){let n;return function(...i){return n?n.length*hN>r?t(...i):new Promise((o,c)=>{n.push({args:i,fn(){try{let l=e(...i);o(l)}catch(l){c(l)}}})}):(n=[],s(performance.now(),i),e(...i))};function s(i,o){setImmediate(()=>{let c=performance.now();hN=(hN*4+c-i)/5;let l=n.shift();if(l){let{args:u,fn:d}=l;d(),s(c,u)}else n=null})}}var YG,vae,Mae,VG,Uae,EN,KG,hN,_N=se(()=>{YG=b(wr()),vae=3e3,Mae=2e4,VG=0,Uae=3e4,EN=3e3,KG=performance.now()+EN,hN=0;a(oS,"throttle");setInterval(()=>{let e=performance.now();e-KG-EN>vae&&VG+Uae<e&&(YG.default.warn?.("JavaScript execution has taken too long and is not allowing proper event queue cycling, consider using 'await new Promise(setImmediate)' in code that will execute for a long duration"),VG=e),KG=e},EN).unref()});var nq={};ye(nq,{EVICTED:()=>dl,INVALIDATED:()=>Fn,coerceType:()=>cS,makeTable:()=>uS});function uS(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:p}=e,{expirationMS:h,evictionMS:E,audit:g,trackDeletes:R}=e;E??=0;let{attributes:S}=e;S||(S=[]);let y=WA(i,n,l),N,I,$={},ee=Promise.resolve(),G,k,j;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(G=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(k=K),K.expiresAt&&(j=K),K.isPrimaryKey&&($=K);let Y,ce=[],de=[],te=1,ge=2,be={},Ye={},qe=864e5,Ar=0,er,Qr,xr,wu=!1,Kc,Ut,ii,Ma=Ul.get(F.REPLICATION_DATABASES);if(Array.isArray(Ma)){for(let K of Ma)if(K.name===c&&K.replicateTo>=0){ii=K.replicateTo;break}}let ZE=i.getRange({start:!1,end:!1}).constructor,cm=10,e_=6;g&&mm(),Hm(i.env.path,K=>{if(I)return xa(K)});class lm extends yl{static{a(this,"Updatable")}getUpdatedTime(){return Ya.get(this.getRecord())?.version}getExpiresAt(){return Ya.get(this.getRecord())?.expiresAt}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.set(_,new Sp(T));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(_,T){return this.addTo(_,-T)}}class ve extends lr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=o;static databaseName=c;static attributes=S;static replicate=p;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=G;static updatedTimeProperty=k;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return h}static dbisDB=d;static schemaDefined=u;static sourcedFrom(_,T){if(T&&(this.sourceOptions=T,(T.expiration||T.eviction||T.scanInterval)&&this.setTTLExpiration(T)),T?.intermediateSource)_.intermediateSource=!0,this.sources.unshift(_);else{if(this.sources.some(D=>!D.intermediateSource)){if(this.sources.some(D=>D.name===_.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(_)}I=I||_.get&&(!_.get.reliesOnPrototype||_.prototype.get),N=N||_.load;let C=a(D=>{let A=this.sources;if(A=A.filter(U=>U.intermediateSource&&U[D]&&(!U[D].reliesOnPrototype||U.prototype[D])),A.length>0)if(A.length===1){let U=A[0];return(w,L,q)=>{if(w?.source!==U)return U[D](L,q,w)}}else return(U,w,L)=>{let q=[];for(let W of A){if(U?.source===W)break;q.push(W[D](w,L,U))}return Promise.all(q)}},"getApplyToIntermediateSource"),P=this.sources[this.sources.length-1];P.intermediateSource&&(P={});let O=a(D=>{if(P[D]&&(!P[D].reliesOnPrototype||P.prototype[D]))return(A,U,w)=>{if(!A?.source)return P[D](U,w,A)}},"getApplyToCanonicalSource");be={put:O("put"),patch:O("patch"),delete:O("delete"),publish:O("publish")},Ye={put:C("put"),patch:C("patch"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")};let x=P.shouldRevalidateEvents;return(async()=>{let D=!1,A,U=a(async(w,L)=>{let q=w.value,W=w.table?Me[c][w.table]:ve;if(c===_m&&(w.table===Du.ROLE_TABLE_NAME||w.table===Du.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=q[W.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=_;let Q={residencyId:Yc(w.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:w.nodeId,async:!0},B=w.id,Ee=await W.getResource(B,L,Q);switch(w.finished&&await w.finished,w.type){case"put":return x?Ee._writeInvalidate(B,q,Q):Ee._writeUpdate(B,q,!0,Q);case"patch":return x?Ee._writeInvalidate(B,q,Q):Ee._writeUpdate(B,q,!1,Q);case"delete":return Ee._writeDelete(B,Q);case"publish":case"message":return Ee._writePublish(B,q,Q);case"invalidate":return Ee._writeInvalidate(B,q,Q);case"relocate":return Ee._writeRelocate(B,Q);default:ke.default.error?.("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=_.subscribe;w&&R==null&&(R=!0);let L={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},q=_.subscribeOnThisThread?_.subscribeOnThisThread((0,Ml.getWorkerIndex)(),L):(0,Ml.getWorkerIndex)()===0,W=w&&q&&await _.subscribe?.(L);if(W){let Q;for await(let B of W)try{if(!(B.type==="transaction"?B.writes[0]:B)){ke.default.error?.("Bad subscription event",B);continue}if(B.source=_,B.type==="end_txn"){Q?.resolve();let pe;if(B.localTime&&A!==B.localTime&&B.remoteNodeIds?.length>0&&(pe=a(()=>{let re=[Symbol.for("seq"),B.remoteNodeIds[0]],ie=d.get(re),Oe=ie?.nodes;Oe||(Oe=[]);for(let ae of B.remoteNodeIds.slice(1)){let xe=Oe.find(Ce=>Ce.id===ae);Oe=Oe.filter(Ce=>Ce.id!==ae||Ce===xe),xe||(xe={id:ae,seqId:0},Oe.push(xe)),xe.seqId=Math.max(ie?.seqId??1,B.localTime),ae===Q?.nodeId&&(xe.lastTxnTime=B.timestamp)}let le=Math.max(ie?.seqId??1,B.localTime);ke.default.trace?.("Received txn",c,le,new Date(le),B.localTime,new Date(B.localTime),B.remoteNodeIds),d.put(re,{seqId:le,nodes:Oe})},"updateRecordedSequenceId"),A=B.localTime),B.onCommit){let re=Q?Q.committed.then(B.onCommit):B.onCommit();pe&&(re?.then?re.then(pe):pe())}else pe&&pe();continue}if(Q)if(B.beginTxn)Q.resolve();else{Q.writePromises.push(U(B,Q));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let fe=bt(B,()=>{if(B.type==="transaction"){let pe=[];for(let re of B.writes)try{pe.push(U(re,B))}catch(ie){throw ie.message+=" writing "+JSON.stringify(re)+" of event "+JSON.stringify(B),ie}return Promise.all(pe)}else if(B.type==="define_schema"){let pe=this.attributes.slice(0),re=!1;for(let ie of B.attributes)pe.find(Oe=>Oe.name===ie.name)||(pe.push(ie),re=!0);re&&(Xe({table:s,database:c,attributes:pe,origin:"cluster"}),Gp.signalSchemaChange(new qp.SchemaEventMsg(process.pid,V.CREATE_TABLE,c,s)))}else return B.beginTxn?(Q=B,Q.writePromises=[U(B,B)],new Promise(pe=>{Q.resolve=()=>pe(Promise.all(Q.writePromises))})):U(B,B)});Q&&(Q.committed=fe),D&&fe&&!fe?.waitingForUserChange&&(fe.then(()=>Gp.signalUserChange(new qp.UserEventMsg(process.pid))),fe.waitingForUserChange=!0),B.onCommit&&(fe?fe.then(B.onCommit):B.onCommit())}catch(Ee){ke.default.error?.("error in subscription handler",Ee)}}}catch(w){ke.default.error?.(w)}})(),this}static get isCaching(){return I}static get shouldRevalidateEvents(){return this.prototype.get!==ve.prototype.get}static getResource(_,T,C){let P=super.getResource(_,T,C);if(this.loadAsInstance===!1&&(T._freezeRecords=!0),_!=null&&this.loadAsInstance!==!1){Hi(_);try{if(P.getRecord?.())return P;if(typeof _=="object"&&_&&!Array.isArray(_))throw new Error(`Invalid id ${JSON.stringify(_)}`);let O=!C?.async||i.cache?.get?.(_),x=Br(T),D=x.getReadTxn();if(D?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Lo(_,T,{transaction:D,ensureLoaded:C?.ensureLoaded},O,A=>{if(A?ve._updateResource(P,A):P.#e=null,T.onlyIfCached){if(!P.doesExist())throw new ut.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let U=pn(_,A,T,P);if(U)return x?.disregardReadTxn(),P.#i=!0,T.loadedFromSource=!0,qs(U,w=>(ve._updateResource(P,w),P))}return P})}catch(O){throw O.message.includes("Unable to serialize object")&&(O.message+=": "+JSON.stringify(_)),O}}return P}static _updateResource(_,T){_.#n=T,_.#e=T?.value??null,_.#r=T?.version}ensureLoaded(){let _=pn(this.getId(),this.#n,this.getContext());if(_)return this.#i=!0,this.getContext().loadedFromSource=!0,qs(_,T=>{this.#n=T,this.#e=T.value,this.#r=T.version})}static getNewId(){let _=$?.type;if(_==="String"||_==="ID")return super.getNewId();if(!Ut){let O=i.getEntry(Symbol.for("id_allocation")),x=O?.value,D;if(x&&x.nodeName===server.hostname&&(!Wae(i)||x.pid===process.pid)){let A=x.start,U=x.end;D=A;for(let w of i.getKeys({start:U,end:A,limit:1,reverse:!0}))D=w}else x=P(O?.version??null),D=x.start;Ut=new BigInt64Array([BigInt(D)+1n]),Ut=new BigInt64Array(i.getUserSharedBuffer("id",Ut.buffer)),Ut.maxSafeId=x.end}let T=Number(Atomics.add(Ut,0,1n)),C=_==="Int"?512:1048576;if(T+C>=Ut.maxSafeId){let O=a(x=>{Ut.maxSafeId=T+(_==="Int"?1023:4194303);let D=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,A=x?void 0:i.useReadTransaction(),U=Number(Ut[0]);for(let q of i.getKeys({start:U+1,end:D,limit:1,transaction:A}))D=q;A?.done();let{value:w,version:L}=i.getEntry(Symbol.for("id_allocation"));if(Ut.maxSafeId<D){if(w.end>Ut.maxSafeId-100)return;ke.default.info?.("New id allocation",T,Ut.maxSafeId,L),i.put(Symbol.for("id_allocation"),{start:w.start,end:Ut.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),L)}else{ke.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ut.maxSafeId}, but id of ${D} detected`);let q=P(L);q.alreadyUpdated||Atomics.store(Ut,0,BigInt(q.start+1)),Ut.maxSafeId=q.end}},"updateEnd");T+C===Ut.maxSafeId?setImmediate(O):T+100>=Ut.maxSafeId&&(ke.default.warn?.(`Synchronous id allocation required on table ${s}${_=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>O(!0)))}return T;function P(O){let x=(_==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=x/4,A,U,w=!1,L,q;do{L=Math.floor(Math.random()*x),q={start:L,end:L+(_==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},A=0;for(let W of i.getKeys({start:L,limit:1,reverse:!0}))A=W;U=x;for(let W of i.getKeys({start:L+1,end:x,limit:1}))U=W;D*=.875,D<1e3&&!w&&(w=!0,ke.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${_==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,L,A,U,D))}while(!(D<U-L&&(D<L-A||A===0)));return i.transactionSync(()=>{let W=i.getEntry(Symbol.for("id_allocation"));return(W?.version??null)==O?(ke.default.info?.("Allocated new id range",q),i.put(Symbol.for("id_allocation"),q,Date.now()),q):(ke.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...W.value})})}}static setTTLExpiration(_){if(typeof _=="number")h=_*1e3,E||(E=0);else if(_&&typeof _=="object")h=_.expiration*1e3,E=(_.eviction||0)*1e3,qe=_.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(h<0)throw new Error("Expiration can not be negative");qe=qe||(h+E)/4,xa()}static getResidencyRecord(_){return d.get([Symbol.for("residency_by_id"),_])}static setResidency(_){ve.getResidency=_&&((T,C)=>{try{return _(T,C)}catch(P){throw P.message+=` in residency function for table ${s}`,P}})}static setResidencyById(_){ve.getResidencyById=_&&(T=>{try{return _(T)}catch(C){throw C.message+=` in residency function for table ${s}`,C}})}static getResidency(_,T){if(ve.getResidencyById)return ve.getResidencyById(_[t]);let C=ii;if(T.replicateTo!=null){if(Array.isArray(T.replicateTo))return T.replicateTo.includes(server.hostname)?T.replicateTo:[server.hostname,...T.replicateTo];T.replicateTo>=0&&(C=T.replicateTo)}if(C>=0&&server.nodes){let P=[server.hostname];if(T.previousResidency)P.push(...T.previousResidency.slice(0,C));else{let O=server.nodes.map(A=>A.name),x=Math.floor(O.length*Math.random());P.push(...O.slice(x,x+C));let D=x+C-O.length;D>0&&P.push(...O.slice(0,D))}return P}}static enableAuditing(){g||(g=!0,mm(),ve.audit=!0)}static coerceId(_){return _===""?null:cS(_,$)}static async dropTable(){delete Me[c][s];for(let _ of i.getRange({versions:!0,snapshot:!1,lazy:!0}))_.metadataFlags&Zr&&_.value&&$a(_.value);if(c===o){for(let _ of S)d.remove(ve.tableName+"/"+_.name),r[_.name]?.drop();d.remove(ve.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),SN.default.unlinkSync(i.env.path);Gp.signalSchemaChange(new qp.SchemaEventMsg(process.pid,V.DROP_TABLE,c,s))}get(_){let T=this.constructor;if(typeof _=="string"&&T.loadAsInstance!==!1)return this.getProperty(_);if(um(_))return this.search(_);if(_&&_.id===void 0&&!_.toString()){let C={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:S,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?ve.getRecordCount().then(P=>(C.recordCount=P.recordCount,C.estimatedRecordRange=P.estimatedRange,C)):C}if(_!==void 0&&T.loadAsInstance===!1){let C=this.getContext(),P=Br(C),O=P.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let x=Ds(_);Hi(x);let D=!0;return _.checkPermission&&(D=this.allowRead(C.user,_)),qs(qs(D,A=>{if(!A)throw new ut.AccessViolation(C.user);let U=!0;return Lo(x,C,{transaction:O,ensureLoaded:U},!1,w=>{if(C.onlyIfCached){if(!w?.value)throw new ut.ServerError("Entry is not cached",504)}else if(U){let L=pn(x,w,C);if(L)return P?.disregardReadTxn(),C.loadedFromSource=!0,L.then(q=>q?.value)}return w?.value})}),A=>{let U=_?.select;return U&&A!=null?Zu(U,this.constructor)(A):A})}if(_?.property)return this.getProperty(_.property);if(this.doesExist()||_?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(_,T){let C=Dn(_,T);if(C?.read){if(C.isSuperUser)return!0;let P=C.attribute_permissions,O=T?.select;if(P?.length>0||wu&&O){if(T||(T={}),O){let x=Array.isArray(O)?O:[O],D=P?.length>0&&gN(P,"read");T.select=x.map(A=>{let U=A.name||A;if(!D||D[U]){let w=xr[U]?.definition?.tableClass;if(w){if(A.name||(A={name:A}),!A.checkPermission&&T.checkPermission&&(A.checkPermission=T.checkPermission),!w.prototype.allowRead.call(null,_,A))return!1;if(!A.select)return A.name}return A}}).filter(Boolean)}else T.select=P.filter(x=>x.read&&!xr[x.attribute_name]).map(x=>x.attribute_name);return T}else return!0}}allowUpdate(_,T,C){let P=Dn(_,C);if(P?.update){let O=P.attribute_permissions;if(O?.length>0){let x=gN(O,"update");for(let D in T)if(!x[D])return!1;for(let D of O){let A=D.attribute_name;!D.update&&!(A in T)&&(T[A]=this.getProperty(A))}}return Ua(this.getContext())}}allowCreate(_,T,C){if(this.isCollection){let P=Dn(_,C);if(P?.insert){let O=P.attribute_permissions;if(O?.length>0){let x=gN(O,"insert");for(let D in T)if(!x[D])return!1;return Ua(this.getContext())}else return Ua(this.getContext())}}else return this.allowUpdate(_,{})}allowDelete(_,T){return Dn(_,T)?.delete&&Ua(this.getContext())}update(_,T){let C,P=typeof T=="boolean"||T===void 0&&(_==null||typeof _=="object"&&!(_ instanceof URLSearchParams)),O=!1;P?(O=T,T=_,C=this.getId()):C=Ds(_);let x=this.getContext();if(!Br(x))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;if(typeof T=="object"&&T)if(O)Object.isFrozen(T)&&(T={...T}),this.#e={},this.#t=T;else if(P){let A=this.#t;A&&(T=Object.assign(A,T)),this.#t=T}else{let A=!0;if(_==null)throw new TypeError("Can not put a record without a target");return _.checkPermission&&(A=this.allowUpdate(x.user,T,_)),qs(A,U=>{if(!U)throw new ut.AccessViolation(x.user);return qs(i.get(Ds(_)),w=>{let L=new lm(w);return L._setChanges(T),this._writeUpdate(C,L.getChanges(),!1),L})})}return this._writeUpdate(C,this.#t,O),this}addTo(_,T){if(typeof T=="number"||typeof T=="bigint")this.#s===zG?this.set(_,(+this.getProperty(_)||0)+T):(this.#s||this.update(),this.set(_,new Sp(T)));else throw new Error("Can not add a non-numeric value")}subtractFrom(_,T){if(typeof T=="number")return this.addTo(_,-T);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(_){this.#t=_}setRecord(_){this.#e=_}invalidate(_){let T=!0,C=this.getContext();return _?.checkPermission&&(T=this.allowDelete(C.user,_,C)),qs(T,P=>{if(!P)throw new ut.AccessViolation(C.user);this._writeInvalidate(_?Ds(_):this.getId())})}_writeInvalidate(_,T,C){let P=this.getContext();Hi(_),Br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:be.invalidate?.bind(this,P,_),beforeIntermediate:Pu(T,Ye.invalidate?.bind(this,P,_)),commit:a((x,D)=>{if(!(Fr(x,D,C?.nodeId)<=0)){T??=null;for(let A in r)T||(T={}),T[A]===void 0&&(T[A]=this.getProperty(A));ke.default.trace?.(`Invalidating entry in ${s} id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,T,D,x,Fn,g,{user:P?.user,residencyId:C?.residencyId,nodeId:C?.nodeId,tableToTrack:s},"invalidate")}},"commit")})}_writeRelocate(_,T){let C=this.getContext();Hi(_),Br(this.getContext()).addWrite({key:_,store:i,invalidated:!0,entry:this.#n,before:be.relocate?.bind(this,C,_),beforeIntermediate:Ye.relocate?.bind(this,C,_),commit:a((O,x)=>{if(Fr(O,x,T?.nodeId)<=0)return;let D=ve.getResidencyRecord(T.residencyId),A=0,U=null,w=x?.value;if(D&&!D.includes(server.hostname)){for(let L in r)U||(U={}),U[L]=w[L];A=Fn}else U=w;ke.default.trace?.(`Relocating entry id: ${_}, timestamp: ${new Date(O).toISOString()}`),y(_,U,x,O,A,g,{user:C.user,residencyId:T.residencyId,nodeId:T.nodeId,expiresAt:T.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(_,T){let C={previousResidency:this.getResidencyRecord(_.residencyId),isRelocation:!0},P=Ba(this.getResidency(T.value,C)),O;if(P){if(!P.includes(server.hostname))return!1;O=Yc(P)}let x=0;ke.default.debug?.("Performing a relocate of an entry",_.key,T.value,P);let D=y(_.key,T.value,_,_.version,x,!0,{residencyId:O,expiresAt:T.expiresAt},"relocate",!1,null);return!0}static evict(_,T,C){let P=this.Source,O;if(!((I||g)&&(!T||(O=i.getEntry(_),!O||!T)||O.version!==C))){if(I){if(i.hasLock(_,O.version))return;let x;for(let D in r)x||(x={}),x[D]=T[D];if(x)return y(_,x,O,C,dl,null,null,null,!0)}return i.ifVersion(_,C,()=>{Nu(_,T,null)}),ul(i,O??i.getEntry(_),C)}}lock(){throw new Error("Not yet implemented")}static operation(_,T){return _.table||=s,_.schema||=c,global.operation(_,T)}put(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!0);else{let C=!0;if(_==null)throw new TypeError("Can not put a record without a target");let P=this.getContext();return _.checkPermission&&(C=this.allowUpdate(P.user,T,_)),qs(C,O=>{if(!O)throw new ut.AccessViolation(P.user);if(Array.isArray(T))for(let x of T){let D=x[t];this._writeUpdate(D,x,!0)}else{let x=Ds(_);this._writeUpdate(x,T,!0)}})}}create(_,T){let C=!0,P=this.getContext();if(!T&&!(_ instanceof URLSearchParams)&&(T=_,_=void 0),!T||typeof T!="object"||Array.isArray(T))throw new TypeError("Can not create a record without an object");return _?.checkPermission&&(C=this.allowCreate(P.user,T,_)),qs(C,O=>{if(!O)throw new ut.AccessViolation(P.user);let x=Ds(_)??T[t];if(x===void 0)x=this.constructor.getNewId();else if(i.get(x))throw new ut.ClientError("Record already exists",409);return this._writeUpdate(x,T,!0),T})}patch(_,T){if(T===void 0||T instanceof URLSearchParams)this.update(_,!1);else{let C=this.update(_,T);if(C?.then)return C.then(()=>{})}}_writeUpdate(_,T,C,P){let O=this.getContext(),x=Br(O);Hi(_);let D=this.#n??i.getEntry(_);this.#s=C?zG:$ae;let A=a(w=>C?w.put?()=>w.put(O,_,T):null:w.patch?()=>w.patch(O,_,T):w.put?()=>w.put(O,_,Rl(this)):null,"writeToSources"),U={key:_,store:i,entry:D,nodeName:O?.nodeName,validate:a(w=>{T||(T=this.#t),C||T&&Ug(this.#t===T?this:T)?O?.source||(x.checkOverloaded(),this.validate(T,!C),k&&(T[k.name]=k.type==="Date"?new Date(w):k.type==="String"?new Date(w).toISOString():w),C&&(t&&T[t]!==_&&(T[t]=_),G&&(D?.value?T[G.name]=D?.value[G.name]:T[G.name]=G.type==="Date"?new Date(w):G.type==="String"?new Date(w).toISOString():w),T=Rl(T))):x.removeWrite(U)},"validate"),before:A(be),beforeIntermediate:Pu(T,A(Ye)),commit:a((w,L,q)=>{if(q){if(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");C||(this.#e=L?.value??null)}this.#t=void 0,this.#r=w;let W=L?.value,Q;this.#s=0;let B=!1,Ee=Fr(w,L,P?.nodeId),fe;if(Ee<=0){if(g){let le=L.localTime,ae=L.version;ke.default.trace?.("Applying CRDT update to record with id: ",_,"txn time",new Date(w),"applying later update from:",new Date(ae),"local recorded time",new Date(le));let xe=[];for(;le>w||ae>=w&&le>0;){let Ce=l.get(le);if(!Ce)break;let Le=At(Ce);if(ae=Le.version,ae>=w){if(ae===w){if(Ee=Fr(w,{version:ae,localTime:le},P?.nodeId),Ee===0)return;if(Ee>0){le=Le.previousLocalTime;continue}}if(Le.type==="patch")xe.push(Le),fe=T;else if(Le.type==="put"||Le.type==="delete")return}le=Le.previousLocalTime}le||ke.default.debug?.("No further audit history, applying incremental updates based on available history",_,"existing version preserved",L),xe.sort((Ce,Le)=>Ce.version-Le.version);for(let Ce of xe){let Le=Ce.getValue(i);if(ke.default.debug?.("Rebuilding update with future patch:",new Date(Ce.version),Le,Ce),Q=w_(Q??T,Le,C),!Q)return}}else{if(C)return;Q=w_(Q??T,W,C),ke.default.debug?.("Rebuilding update without audit:",Q)}ke.default.trace?.("Rebuilt record to save:",Q," is full update:",C)}let pe;if(C&&!Q?pe=T:this.constructor.loadAsInstance===!1?pe=Rl(W,Q??T):(this.#e=W,pe=Rl(this,Q??T)),this.#e=pe,pe&&pe.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let re;if(P?.residencyId!=null)re=P.residencyId;else{D?.residencyId&&(O.previousResidency=ve.getResidencyRecord(D.residencyId));let le=Ba(ve.getResidency(pe,O));if(le&&!le.includes(server.hostname))if(fe??=pe,B=!0,ve.getResidencyById)pe=void 0;else{pe=null;for(let ae in r)pe||(pe={}),pe[ae]=fe[ae]}re=Yc(le)}C||(fe=T);let ie=O?.expiresAt??(h?h+Date.now():-1);ke.default.trace?.(`Saving record with id: ${_}, timestamp: ${new Date(w).toISOString()}${ie?", expires at: "+new Date(ie).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(pe).slice(0,100)}catch{return""}})()),Nu(_,W,pe);let Oe=C?"put":"patch";y(_,pe,L,w,B?Fn:0,g,{omitLocalRecord:B,user:O?.user,residencyId:re,expiresAt:ie,nodeId:P?.nodeId,originatingOperation:O?.originatingOperation,tableToTrack:c==="system"?null:s},Oe,!1,fe),O.expiresAt&&xa()},"commit")};x.addWrite(U)}async delete(_){if(um(_)){_.select=["$id"];for await(let T of this.search(_))this._writeDelete(T.$id);return!0}if(_){let T=!0,C=this.getContext();return _.checkPermission&&(T=this.allowDelete(C.user,_,C)),qs(T,P=>{if(!P)throw new ut.AccessViolation(C.user);let O=Ds(_);return this._writeDelete(O),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(_,T){let C=Br(this.getContext());Hi(_);let P=this.getContext();return C.addWrite({key:_,store:i,entry:this.#n,nodeName:P?.nodeName,before:be.delete?.bind(this,P,_),beforeIntermediate:Ye.delete?.bind(this,P,_),commit:a((O,x,D)=>{let A=x?.value;D&&(P&&x?.version>(P.lastModified||0)&&(P.lastModified=x.version),ve._updateResource(this,x)),!(Fr(O,x,T?.nodeId)<=0)&&(Nu(this.getId(),A),ke.default.trace?.(`Deleting record with id: ${_}, txn timestamp: ${new Date(O).toISOString()}`),g||R?(y(_,null,x,O,0,g,{user:P?.user,nodeId:T?.nodeId,tableToTrack:s},"delete"),g||xa()):ul(i,x))},"commit")}),!0}search(_){let T=this.getContext(),C=Br(T);if(!_)throw new Error("No query provided");if(_.parseError)throw _.parseError;if(_.checkPermission&&!this.allowRead(T.user,_))throw new ut.AccessViolation(T.user);T&&(T.lastModified=kae);let P=_.conditions;P?P.length===void 0&&(P=P[Symbol.iterator]?Array.from(P):[P]):P=Array.isArray(_)?_:_[Symbol.iterator]?Array.from(_):[];let O=_.id??this.getId();O&&(P=[{attribute:null,comparator:Array.isArray(O)?"prefix":"starts_with",value:O}].concat(P));let x,D={};function A(ie,Oe){let le;switch(Oe){case"and":case void 0:if(ie.length<1)throw new Error('An "and" operator requires at least one condition');le=!0;break;case"or":if(ie.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Oe)}for(let ae of ie){if(ae.conditions){ae.conditions=A(ae.conditions,ae.operator);continue}let xe=ae[0]??ae.attribute,Ce=xe==null?$:zi(S,xe);if(Ce)(Ce.type||jA[ae.comparator])&&(ae[1]===void 0?ae.value=w(ae.value,Ce):ae[1]=w(ae[1],Ce));else if(xe!=null&&!_.allowConditionsOnDynamicAttributes)throw(0,ut.handleHDBError)(new Error,`${xe} is not a defined attribute`,404);if(ae.chainedConditions)if(ae.chainedConditions.length===1&&(!ae.operator||ae.operator=="and")){let Le=ae.chainedConditions[0],De,pt;if(Le.comparator==="gt"||Le.comparator==="greater_than"||Le.comparator==="ge"||Le.comparator==="greater_than_equal"?(De=ae,pt=Le):(De=Le,pt=ae),De.comparator!=="lt"&&De.comparator!=="less_than"&&De.comparator!=="le"&&De.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let wt=pt.comparator==="ge"||pt.comparator==="greater_than_equal",xt=De.comparator==="le"||De.comparator==="less_than_equal";ae.comparator=(wt?"ge":"gt")+(xt?"le":"lt"),ae.value=[pt.value,De.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ie}a(A,"prepareConditions");function U(ie,Oe){if(_.enforceExecutionOrder)return ie;for(let le of ie)le.conditions&&(le.conditions=U(le.conditions,le.operator));return ie.length>1&&Oe!=="or"?xae(ie,ug(ve)):ie}a(U,"orderConditions");function w(ie,Oe){return Array.isArray(ie)?ie.map(le=>cS(le,Oe)):cS(ie,Oe)}a(w,"coerceTypedValues");let L=_.operator;(P.length>0||L)&&(P=A(P,L));let q=typeof _.sort=="object"&&_.sort,W;if(q&&L!=="or"){let ie=q.attribute;if(ie==null)throw new ut.ClientError("Sort requires an attribute");if(x=P.find(Oe=>Qu(Oe.attribute)===Qu(ie)),!x){let Oe=zi(S,ie);if(!Oe)throw(0,ut.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not a defined attribute`,404);if(Oe.indexed)x={...q,comparator:"sort"},P.push(x);else if(P.length===0&&!_.allowFullScan)throw(0,ut.handleHDBError)(new Error,`${Array.isArray(ie)?ie.join("."):ie} is not indexed and not combined with any other conditions`,404)}x&&(x.descending=!!q.descending)}P=U(P,L),q&&(x&&P[0]===x?q.next&&(W={dbOrderedAttribute:q.attribute,attribute:q.next.attribute,descending:q.next.descending,next:q.next.next}):(x&&P.splice(P.indexOf(x),1),W=q));let Q=_.select;if(P.length===0&&(P=[{attribute:t,comparator:"greater_than",value:!0}]),_.explain)return{conditions:P,operator:L,postOrdering:W,selectApplied:!!Q};let B=C.useReadTxn(),Ee=QA(P,L,ve,B,_,T,(ie,Oe)=>fm(ie,Q,T,B,Oe),D),fe=_.ensureLoaded!==!1,pe=ve.transformEntryForSelect(Q,T,B,D,fe,!0),re=ve.transformToOrderedSelect(Ee,Q,W,T,B,pe);return(_.offset||_.limit!==void 0)&&(re=re.slice(_.offset,_.limit!==void 0?(_.offset||0)+_.limit:void 0)),re.onDone=()=>{re.onDone=null,C.doneReadTxn()},re.selectApplied=!0,re.getColumns=()=>{if(Q){let ie=[];for(let Oe of Q)Oe==="*"?ie.push(...S.map(le=>le.name)):ie.push(Oe.name||Oe);return ie}return S.filter(ie=>!ie.computed&&!ie.relationship).map(ie=>ie.name)},re}static transformToOrderedSelect(_,T,C,P,O,x){let D=new ZE;if(C){_=fm(_,T,P,O,null);let A;D.iterate=function(){let w,L=_[Symbol.asyncIterator]?_[Symbol.asyncIterator]():_[Symbol.iterator](),q,W=C.dbOrderedAttribute,Q,B,Ee=!0;function fe(re){let ie=re.next&&fe(re.next),Oe=re.descending;return P.sort=re,(le,ae)=>{let xe=Cu(le,re.attribute,P),Ce=Cu(ae,re.attribute,P),Le=Oe?(0,xl.compareKeys)(Ce,xe):(0,xl.compareKeys)(xe,Ce);return Le===0?ie?.(le,ae)||0:Le}}a(fe,"createComparator");let pe=fe(C);return{async next(){let re;if(w)if(re=w.next(),re.done){if(q)return D.onDone&&D.onDone(),re}else return{value:await x.call(this,re.value)};A=[],Q&&A.push(Q);do if(re=await L.next(),re.done){if(q=!0,A.length)break;return D.onDone&&D.onDone(),re}else{let ie=re.value;if(ie?.then&&(ie=await ie),W){let Oe=Cu(ie,W,P);if(Ee)Ee=!1,B=Oe;else if(Oe!==B){B=Oe,Q=ie;break}}A.push(ie)}while(!0);return C.isGrouped,A.sort(pe),w=A[Symbol.iterator](),re=w.next(),re.done?(D.onDone&&D.onDone(),re):{value:await x.call(this,re.value)}},return(){return D.onDone&&D.onDone(),L.return()},throw(){return D.onDone&&D.onDone(),L.throw()}}};let U=a(w=>{if(typeof T=="object"&&Array.isArray(w.attribute))for(let L=0;L<T.length;L++){let q=T[L],W;if(q.name===w.attribute[0]){for(W=q.sort||(q.sort={});W.next;)W=W.next;W.attribute=w.attribute.slice(1),W.descending=w.descending}else q===w.attribute[0]&&(T[L]=W={name:q,sort:{attribute:w.attribute.slice(1),descending:w.descending}})}w.next&&U(w.next)},"applySortingOnSelect");U(C)}else D.iterate=(_[Symbol.asyncIterator]||_[Symbol.iterator]).bind(_),D=D.map(function(A){try{let U=x.call(this,A);return typeof U?.catch=="function"?U.catch(w=>{throw w.partialObject={[t]:A.key},w}):U}catch(U){throw U.partialObject={[t]:A.key},U}});return D}static transformEntryForSelect(_,T,C,P,O,x){let D;O&&I&&!(typeof _=="string"?[_]:_)?.every(w=>{let L;return typeof w=="object"?L=w.name:L=w,r[L]||L===t})&&(D=!0);let A,U=a(function(w){let L;if(T?.transaction?.stale&&(T.transaction.stale=!1),w!=null){if(L=w.deref?w.deref():w.value,!L&&(w.key===void 0||w.deref)||w.metadataFlags&Fn){if(w.metadataFlags&Fn&&T.replicateFrom===!1&&x&&w.residencyId)return ac.SKIP;if(w=Lo(w.key??w,T,{transaction:C,lazy:_?.length<4,ensureLoaded:O},this?.isSync,q=>q),w?.then)return w.then(U.bind(this));L=w?.value}if(D&&w?.metadataFlags&(Fn|dl)||w?.expiresAt!=null&&w?.expiresAt<Date.now()){if(T.onlyIfCached)return{[t]:w.key,message:"This entry has expired"};let q=pn(w.key??w,w,T);if(q?.then)return q.then(U)}}if(L==null)return x?ac.SKIP:L;if(_&&!(_[0]==="*"&&_.length===1)){let q,W=a((B,Ee)=>{let fe;typeof B=="object"?fe=B.name:fe=B;let pe=xr?.[fe],re;if(pe){let ie=P?.[fe];if(ie)if(ie.hasMappings){let le=pe.from?L[pe.from]:Qu(w.key);re=ie.get(le),re||(re=[])}else re=ie.fromRecord?.(L);else re=pe(L,T,w,!0);let Oe=a(le=>{if(pe.directReturn)return Ee(le,fe);if(le&&typeof le=="object"){let ae=pe.definition?.tableClass||ve;A||(A={});let xe=A[fe]||(A[fe]=ae.transformEntryForSelect(fe===B?null:B.select||(Array.isArray(B)?B:null),T,C,ie,O));if(Array.isArray(le)){let Ce=[],Le=ae.transformToOrderedSelect(le,B.select,typeof B.sort=="object"&&B.sort,T,C,xe)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),De=a(wt=>{for(;!wt.done;){if(wt?.then)return wt.then(De);Ce.push(wt.value),wt=Le.next()}Ee(Ce,fe)},"nextValue"),pt=De(Le.next());pt&&(q||(q=[]),q.push(pt));return}else if(le=xe.call(this,le),le?.then){q||(q=[]),q.push(le.then(Ce=>Ee(Ce,fe)));return}}Ee(le,fe)},"handleResolvedValue");re?.then?(q||(q=[]),q.push(re.then(Oe))):Oe(re);return}else re=L[fe],re&&typeof re=="object"&&fe!==B&&(re=ve.transformEntryForSelect(B.select||B,T,C,null)({value:re}));Ee(re,fe)},"selectAttribute"),Q;if(typeof _=="string")W(_,B=>{Q=B});else if(Array.isArray(_))if(_.asArray)Q=[],_.forEach((B,Ee)=>{B==="*"?_[Ee]=L:W(B,fe=>Q[Ee]=fe)});else{Q={};let B=_.forceNulls;for(let Ee of _)if(Ee==="*")for(let fe in L)Q[fe]=L[fe];else W(Ee,(fe,pe)=>{fe===void 0&&B&&(fe=null),Q[pe]=fe})}else throw new ut.ClientError("Invalid select"+_);return q?Promise.all(q).then(()=>Q):Q}return L},"transform");return U}async subscribe(_){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||Xe({table:s,database:c,schemaDefined:u,attributes:S,audit:!0}),_||(_={});let T=!_.rawEvents,C=[],P=nI(ve,this.getId()??null,function(D,A,U,w){try{let L=A.getValue?.(i,T),q=A.type;if(!L&&q==="patch"&&T){let Q=i.getEntry(D);Q?.version===A.version?L=Q.value:L=A.getValue?.(i,!0,U),q="put"}let W={id:D,localTime:U,value:L,version:A.version,type:q,beginTxn:w};C?C.push(W):(c!=="system"&&Ve(A.size??1,"db-message",s,null),this.send(W))}catch(L){ke.default.error?.(L)}},_.startTime||0,_),O=(async()=>{this.isCollection&&(P.includeDescendants=!0,_.onlyChildren&&(P.onlyChildren=!0)),_.supportsTransactions&&(P.supportsTransactions=!0);let D=this.getId(),A=_.previousCount;A>1e3&&(A=1e3);let U=_.startTime;if(this.isCollection){if(U){if(A)throw new ut.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:w,value:L}of l.getRange({start:U,exclusiveStart:!0,snapshot:!1})){let q=At(L);if(q.tableId!==n)continue;let W=q.recordId;if(D==null||XG(D,W)){let Q=q.getValue(i,T,w);if(x({id:W,localTime:w,value:Q,version:q.version,type:q.type,size:q.size}),P.queue?.length>QG&&await P.waitForDrain()===!1)return}P.startTime=w}}else if(A){let w=[];for(let{key:L,value:q}of l.getRange({start:"z",end:!1,reverse:!0}))try{let W=At(q);if(W.tableId!==n)continue;let Q=W.recordId;if(D==null||XG(D,Q)){let B=W.getValue(i,T,L);if(w.push({id:Q,localTime:L,value:B,version:W.version,type:W.type}),--A<=0)break}}catch(W){ke.default.error("Error getting history entry",L,W)}for(let L=w.length;L>0;)x(w[--L]);w[0]&&(P.startTime=w[0].localTime)}else if(!_.omitCurrent){for(let{key:w,value:L,version:q,localTime:W,size:Q}of i.getRange({start:D??!1,end:D==null?void 0:[D,xl.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(L&&(x({id:w,localTime:W,value:L,version:q,type:"put",size:Q}),P.queue?.length>QG&&await P.waitForDrain()===!1))return}}else{A&&!U&&(U=0);let w=this.#n?.localTime;if(w===YA&&(i.cache?.delete(D),this.#n=i.getEntry(D),ke.default.trace?.("re-retrieved record",w,this.#n?.localTime),w=this.#n?.localTime),ke.default.trace?.("Subscription from",U,"from",D,w),U<w){let L=[],q=w;do{let W=l.get(q);if(W){_.omitCurrent=!0;let Q=At(W),B=Q.getValue(i,T,q);T&&(Q.type="put"),L.push({id:D,value:B,localTime:q,...Q}),q=Q.previousLocalTime}else break;A&&A--}while(q>U&&A!==0);for(let W=L.length;W>0;)x(L[--W]);P.startTime=w}!_.omitCurrent&&this.doesExist()&&x({id:D,localTime:w,value:this.#e,version:this.#r,type:"put"})}for(let w of C)x(w);C=null})();function x(D){c!=="system"&&Ve(D.size??1,"db-message",s,null),P.send(D)}return a(x,"send"),_.listener&&P.on("data",_.listener),P}static subscribeOnThisThread(_,T){return _===0||T?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(_,T,C){if(T===void 0||T instanceof URLSearchParams)this._writePublish(this.getId(),_,T);else{let P=!0,O=this.getContext();return _.checkPermission&&(P=this.allowCreate(O.user,_,O)),qs(P,x=>{if(!x)throw new ut.AccessViolation(O.user);let D=Ds(_);this._writePublish(D,T,C)})}}_writePublish(_,T,C){let P=Br(this.getContext());_??=null,_!==null&&Hi(_);let O=this.getContext();P.addWrite({key:_,store:i,entry:this.#n,nodeName:O?.nodeName,validate:a(()=>{O?.source||(P.checkOverloaded(),this.validate(T))},"validate"),before:be.publish?.bind(this,O,_,T),beforeIntermediate:Pu(T,Ye.publish?.bind(this,O,_,T)),commit:a((x,D,A)=>{D===void 0&&R&&!g&&xa(),ke.default.trace?.(`Publishing message to id: ${_}, timestamp: ${new Date(x).toISOString()}`),y(_,D?.value??null,D,D?.version||x,0,!0,{user:O?.user,residencyId:C?.residencyId,expiresAt:O?.expiresAt,nodeId:C?.nodeId,tableToTrack:s},"message",!1,T)},"commit")})}validate(_,T){let C,P=a((O,x,D)=>{if(x.type&&O!=null)if(T&&O.__op__&&(O=O.value),x.properties){typeof O!="object"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an object${x.type?" ("+x.type+")":""}`);let A=x.properties;for(let U=0,w=A.length;U<w;U++){let L=A[U];if(L.relationship||L.computed){_.hasOwnProperty(L.name)&&(C||(C=[])).push(`Computed property ${D}.${L.name} may not be directly assigned a value`);continue}let q=P(O[L.name],L,D+"."+L.name);q&&(O[L.name]=q)}if(x.sealed&&O!=null&&typeof O=="object")for(let U in O)A.find(w=>w.name===U)||(C||(C=[])).push(`Property ${U} is not allowed within object in property ${D}`)}else switch(x.type){case"Int":(typeof O!="number"||O>>0!==O)&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(A=>typeof A=="string")||(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a string`);break;case"Boolean":typeof O!="boolean"&&(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Date`)}break;case"BigInt":if(typeof O!="bigint"){if(typeof O=="string"||typeof O=="number")return BigInt(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a bigint`)}break;case"Bytes":if(!(O instanceof Uint8Array)){if(typeof O=="string")return Buffer.from(O);(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(O instanceof Ms)){if(typeof O=="string"&&(O=Buffer.from(O)),O instanceof Buffer)return createBlob(O,{type:"text/plain"});(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be a Blob`)}break;case"array":if(Array.isArray(O)){if(x.elements)for(let A=0,U=O.length;A<U;A++){let w=O[A],L=P(w,x.elements,D+"[*]");L&&(O[A]=L)}}else(C||(C=[])).push(`Value ${$s(O)} in property ${D} must be an Array`);break}x.nullable===!1&&O==null&&(C||(C=[])).push(`Property ${D} is required (and not does not allow null values)`)},"validateValue");for(let O=0,x=S.length;O<x;O++){let D=S[O];if(D.relationship||D.computed){Object.hasOwn(_,D.name)&&(C||(C=[])).push(`Computed property ${D.name} may not be directly assigned a value`);continue}if(!T||D.name in _){let A=P(_[D.name],D,D.name);A!==void 0&&(_[D.name]=A)}}if(f)for(let O in _)S.find(x=>x.name===O)||(C||(C=[])).push(`Property ${O} is not allowed`);if(C)throw new ut.ClientError(C.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return I?!!this.#i:void 0}static async addAttributes(_){let T=S.slice(0);for(let C of _){if(!C.name)throw new ut.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new ut.ClientError("Attribute names cannot include backticks or forward slashes");Bae(C.name),T.push(C)}return Xe({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static async removeAttributes(_){let T=S.filter(C=>!_.includes(C.name));return Xe({table:s,database:c,schemaDefined:u,attributes:T}),ve.indexingOperation}static getSize(){let _=i.getStats();return(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getAuditSize(){let _=l?.getStats();return _&&(_.treeBranchPageCount+_.treeLeafPageCount+_.overflowPages)*_.pageSize}static getStorageStats(){let _=i.env.path,T=SN.default.statfsSync?.(_)??{};return{available:T.bavail*T.bsize,free:T.bfree*T.bsize,size:T.blocks*T.bsize}}static async getRecordCount(_){let T=i.getStats().entryCount,C=1e3/2,P=performance.now(),O=Math.floor(T/2),x=_?.exactCount,D=0,A=0,U;for(let{value:w}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(w!=null&&D++,A++,await oc(),!x&&A<O&&performance.now()-P>C){U=A;break}if(U){let w=D;D=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:U,snapshot:!1}))re!=null&&D++,await oc();let L=U*2,q=(D+w)/L,W=Math.pow((D-w+1)/U/2,2)+q*(1-q)/L,Q=Math.max(Math.sqrt(W)*T,1),B=Math.round(q*T),Ee=Math.max(B-1.96*Q,D+w),fe=Math.min(B+1.96*Q,T),pe=Math.pow(10,Math.round(Math.log10(Q)));return pe>B&&(pe=pe/10),D=Math.round(B/pe)*pe,{recordCount:D,estimatedRange:[Math.round(Ee),Math.round(fe)]}}return{recordCount:D}}static updatedAttributes(){xr=this.propertyResolvers={$id:a((_,T,C)=>({value:C.key}),"$id"),$updatedtime:a((_,T,C)=>C.version,"$updatedtime"),$updatedTime:a((_,T,C)=>C.version,"$updatedTime"),$expiresAt:a((_,T,C)=>C.expiresAt,"$expiresAt"),$record:a((_,T,C)=>C?{value:_}:_,"$record"),$distance:a((_,T,C)=>C&&(C.distance??T?.vectorDistances?.get(C)),"$distance")};for(let _ of this.attributes){_.isPrimaryKey&&($=_),_.resolve=null;let T=_.relationship,C=_.computed;if(T)if(_.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),C&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),wu=!0,T.to)_.elements?.definition?(xr[_.name]=_.resolve=(P,O,x,D)=>{let A=P[T.from?T.from:t],U=_.elements.definition.tableClass;return D?ju({attribute:T.to,value:A},Br(O).getReadTxn(),!1,U,!1).map(w=>w&&w.key!==void 0?w:U.primaryStore.getEntry(w,{transaction:Br(O).getReadTxn()})).asArray:U.search([{attribute:T.to,value:A}],O).asArray},_.set=()=>{},_.resolve.definition=_.elements.definition,_.resolve.to=T.to,T.from&&(_.resolve.from=T.from)):console.error(`The one-to-many/many-to-many relationship property "${_.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(T.from){let P=_.definition||_.elements?.definition;P?(xr[_.name]=_.resolve=(O,x,D,A)=>{let U=O[T.from];if(U===void 0)return;if(_.elements){let L,q=U?.map(W=>{let Q=P.tableClass.primaryStore[A?"getEntry":"get"](W,{transaction:Br(x).getReadTxn()});return Q?.then&&(L=!0),ve.loadAsInstance===!1&&Object.freeze(A?Q?.value:Q),Q});return T.filterMissing?L?Promise.all(q).then(W=>W.filter(ZG)):q.filter(ZG):L?Promise.all(q):q}let w=P.tableClass.primaryStore[A?"getEntry":"get"](U,{transaction:Br(x).getReadTxn()});return ve.loadAsInstance===!1&&Object.freeze(A?w?.value:w),w},_.set=(O,x)=>{if(Array.isArray(x)){let D=x.map(A=>A.getId?.()||A[P.tableClass.primaryKey]);O[T.from]=D}else{let D=x.getId?.()||x[P.tableClass.primaryKey];O[T.from]=D}},_.resolve.definition=_.definition||_.elements?.definition,_.resolve.from=T.from):console.error(`The relationship property "${_.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${_.name}" in table "${s}" must use either "from" or "to" arguments`);else if(C)typeof C.from=="function"&&this.setComputedAttribute(_.name,C.from),xr[_.name]=_.resolve=(P,O,x)=>{let D=typeof C.from=="string"?P[C.from]:P,A=this.userResolvers[_.name];if(A)return A(D,O,x);ke.default.warn(`Computed attribute "${_.name}" does not have a function assigned to it. Please use setComputedAttribute('${_.name}', resolver) to assign a resolver function.`),this.userResolvers[_.name]=()=>{}},_.resolve.directReturn=!0;else if(r[_.name]?.customIndex?.propertyResolver){let P=r[_.name].customIndex;xr[_.name]=(O,x,D)=>{let A=O[_.name];return P.propertyResolver(A,x,D)},xr[_.name].directReturn=!0}}Tp(this,this),Tp(lm,this,!0);for(let _ of S){let T=_.name;_.resolve&&(Object.defineProperty(i.encoder.structPrototype,T,{get(){return _.resolve(this,Xu.getStore())},set(C){return _.set(this,C)},configurable:!0,enumerable:_.enumerable}),_.enumerable&&!i.encoder.structPrototype.toJSON&&Object.defineProperty(i.encoder.structPrototype,"toJSON",{configurable:!0,value(){let C={};for(let P in this)C[P]=this[P];return C}}))}}static setComputedAttribute(_,T){let C=zi(S,_);if(!C){console.error(`The attribute "${_}" does not exist in the table "${s}"`);return}if(!C.computed){console.error(`The attribute "${_}" is not defined as computed in the table "${s}"`);return}this.userResolvers[_]=T}static async deleteHistory(_=0,T=!1){let C;for(let{key:P,value:O}of l.getRange({start:0,end:_}))await oc(),At(O).tableId===n&&(C=z_(l,P,O));if(T)for(let P of i.getRange({start:0,versions:!0})){let{key:O,value:x,localTime:D}=P;await oc(),x===null&&D<_&&(C=ul(i,P))}await C}static async*getHistory(_=0,T=1/0){for(let{key:C,value:P}of l.getRange({start:_||1,end:T})){await oc();let O=At(P);O.tableId===n&&(yield{id:O.recordId,localTime:C,version:O.version,type:O.type,value:O.getValue(i,!0,C),user:O.user,operation:O.originatingOperation})}}static async getHistoryOfRecord(_){let T=[];if(_==null)throw new Error("An id is required");let C=i.getEntry(_);if(!C)return T;let P=C.localTime;if(!P)throw new Error("The entry does not have a local audit time");let O=0;do{await oc();let x=l.get(P);if(x){let D=At(x);T.push({id:D.recordId,localTime:P,version:D.version,type:D.type,value:D.getValue(i,!0,P),user:D.user}),P=D.previousLocalTime}else break}while(O<1e3&&P);return T.reverse()}static cleanup(){Y?.remove()}}let t_=oS(async(K,_,T)=>{for(let C of ve.sources)if(C.get&&(!C.get.reliesOnPrototype||C.prototype.get)){if(C.available?.(T)===!1)continue;_.source=C;let P=await C.get(K,_);if(P)return P}},()=>{throw new ut.ServerError("Service unavailable, exceeded request queue limit for resolving cache record",503)});ve.updatedAttributes();let wb=ve.prototype;return h&&ve.setTTLExpiration(h/1e3),j&&r_(),ve;function Nu(K,_,T){let C;for(let P in r){let O=r[P],x=O.isIndexing,D=xr[P],A=T&&(D?D(T):T[P]),U=_&&(D?D(_):_[P]);if(A===U&&!x)continue;if(O.customIndex){O.customIndex.index(K,A,U);continue}C=!0;let w=O.indexNulls,L=(0,Hp.getIndexedValues)(A,w),q=(0,Hp.getIndexedValues)(U,w);if(q?.length>0){let W=new Set(q);if(L=L?L.filter(Q=>{if(W.has(Q))W.delete(Q);else return!0}):[],q=Array.from(W),(q.length>0||L.length>0)&&WG){let Q=q.concat(L).map(B=>({key:B,value:K}));O.prefetch(Q,JG)}for(let Q=0,B=q.length;Q<B;Q++)O.remove(q[Q],K)}else L?.length>0&&WG&&O.prefetch(L.map(W=>({key:W,value:K})),JG);if(L)for(let W=0,Q=L.length;W<Q;W++)O.put(L[W],K)}return C}a(Nu,"updateIndices");function Hi(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>jG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)throw new Error("Invalid primary key of null");break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,xl.writeKey)(K,Vae,0)>jG)throw new Error("Primary key size is too large: "+K.length);return!0}a(Hi,"checkValidId");function Ds(K){return typeof K=="object"&&K?K.id:K}a(Ds,"requestTargetToId");function um(K){return typeof K=="object"&&K&&K.isCollection}a(um,"isSearchTarget");function dm(K){}a(dm,"isRequestTarget");function Lo(K,_,T,C,P){if(ve.getResidencyById&&T.ensureLoaded&&_?.replicateFrom!==!1){let x=Ba(ve.getResidencyById(K));if(x&&!x.includes(server.hostname)&&N)return N({key:K,residency:x}).then(P)}let O=a(()=>{if(_?.transaction?.stale&&(_.transaction.stale=!1),T.transaction?.isDone)return P(null,K);let x=i.getEntry(K,T);return(c!=="system"||s==="hdb_analytics")&&(rq.default.trace?.("Recording db-read action for",`${c}.${s}`),Ve(x?.size??1,"db-read",s,null)),_?._freezeRecords&&Object.freeze(x?.value),x?.residencyId&&x.metadataFlags&Fn&&N&&T.ensureLoaded&&_?.replicateFrom!==!1?N(x).then(D=>P(D,K),D=>(ke.default.error?.("Error loading remote record",K,x,T,D),P(null,K))):(x&&_&&(x?.version>(_.lastModified||0)&&(_.lastModified=x.version),x?.localTime&&!_.lastRefreshed&&(_.lastRefreshed=x.localTime)),P(x,K))},"whenPrefetched");return C?O():te>0?(te--,O()):new Promise((x,D)=>{te===0?(te--,i.prefetch([K],()=>{A(),U()})):(ce.push(K),de.push(U),ce.length>e_&&(te--,A()));function A(){if(ce.length>0){let w=de;i.prefetch(ce,()=>{te===-1?A():te++;for(let L of w)L()}),ce=[],de=[],ge>2&&ge--}else te=ge,ge<cm&&ge++}a(A,"prefetch");function U(){try{x(O())}catch(w){D(w)}}a(U,"load")})}a(Lo,"loadLocalRecord");function Dn(K,_){let T=_?.checkPermission;if(typeof T!="object"){if(!K?.role)return;T=K.role.permission}if(T.super_user)return Kae;let C=T[c],P,O=C?.tables;if(O)return O[s];if(c==="data"&&(P=T[s])&&!P.tables)return P}a(Dn,"getTablePermissions");function pn(K,_,T,C){if(I){let P=!1;if(T.noCache?P=!0:(_?(!_.value||_.metadataFlags&(Fn|dl)||_.expiresAt!=null&&_.expiresAt<Date.now())&&(P=!0):P=!0,tn(!P,"cache-hit",s)),P){let O=Ou(K,_,T).then(x=>(x?.value&&x?.value.getRecord?.()&&ke.default.error?.("Can not assign a record that is already a resource"),T&&(x?.version>(T.lastModified||0)&&(T.lastModified=x.version),T.lastRefreshed=Date.now()),x));if(T?.onlyIfCached||_?.value&&C?.allowStaleWhileRevalidate?.(_,K)){if(O.catch(x=>ke.default.warn?.(x)),T?.onlyIfCached&&!C.doesExist())throw new ut.ServerError("Entry is not cached",504);return}else return O}}else if(_?.value&&_.expiresAt!=null&&_.expiresAt<Date.now())return ve.evict(_.key,_.value,_.version),_.value=null,{then(P){return P(_)}}}a(pn,"ensureLoadedFromSource");function Br(K){let _=K?.transaction;if(_){if(!_.lmdbDb)return _.lmdbDb=i,_;do{if(_.lmdbDb?.path===i.path)return _;let T=_.next;if(!T)return _=_.next=new vo,_.lmdbDb=i,_;_=T}while(!0)}else return new A_}a(Br,"txnForContext");function Cu(K,_,T){if(!K)return;let C=(K.deref?K.deref():K.value)??i.getEntry(K.key)?.value;if(typeof _=="object"){let O=xr,x=C;for(let D=0,A=_.length;D<A;D++){let U=_[D],w=O?.[U];x=w&&x?w(x,T,K):x?.[U],K=null,O=w?.definition?.tableClass?.propertyResolvers}return x}let P=xr[_];return P?P(C,T,K):C[_]}a(Cu,"getAttributeValue");function fm(K,_,T,C,P){let O=P?.length,x={transaction:C,lazy:O>0||typeof _=="string"||_?.length<4,alwaysPrefetch:!0},D;function A(U,w){let L=U?.value;if(!L)return ac.SKIP;for(let q=0;q<O;q++)if(!D?.includes(q)&&!P[q](L,U))return ac.SKIP;return w!==void 0&&(U.key=w),U}if(a(A,"processEntry"),O>0||!K.hasEntries){let U=K.map(w=>{if(D=null,typeof w=="object"&&w?.key!==void 0)return O>0?A(w):w;if(w==null)return ac.SKIP;for(let L=0;L<O;L++){let W=P[L].idFilter;if(W){if(!W(w))return ac.SKIP;D||(D=[]),D.push(L)}}return Lo(w,T,x,!1,A)});return Array.isArray(K)&&(U=U.filter(w=>w!==ac.SKIP)),U.hasEntries=!0,U}return K}a(fm,"transformToEntries");function Fr(K,_,T=server.replication?.getThisNodeId(l)){if(K<=_?.version){if(_?.version===K&&T!==void 0){let C=server.replication?.exportIdMapping(l),P=_.localTime,O=P&&l.get(P);if(O){let x,D,A=At(O);for(let U in C)C[U]===T&&(x=U),C[U]===A.nodeId&&(D=U);if(x>D)return 1;if(x===D)return 0}}return-1}return 1}a(Fr,"precedesExistingVersion");async function Ou(K,_,T){let C=_?.metadataFlags,P=_?.version,O,x;if(!i.attemptLock(K,P,()=>{clearTimeout(x);let w=i.getEntry(K);!w||!w.value||w.metadataFlags&(Fn|dl)?O(Ou(K,i.getEntry(K),T)):O(w)}))return new Promise(w=>{O=w,x=setTimeout(()=>{i.unlock(K,P)},qae)});let D=_?.value,A={requestContext:T,replacingRecord:D,replacingEntry:_,replacingVersion:P,noCacheStore:!1,source:null,resourceCache:T?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},U=T?.responseHeaders;return new Promise((w,L)=>{let q;qs(bt(A,async W=>{let Q=performance.now(),B,Ee,fe;try{B=await t_(K,A,_),fe=C&Fn;let re=A.lastModified||fe&&P;Ee=fe||re>P||!D,re||(re=(0,Hp.getNextMonotonicTime)());let ie=performance.now()-Q;if(Ve(ie,"cache-resolution",s,null,"success"),U&&Fp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),W.timestamp=re,h&&A.expiresAt==null&&(A.expiresAt=Date.now()+h),B){if(typeof B!="object")throw new Error("Only objects can be cached and stored in tables");if(B.status>0&&B.headers)if(B.status>=300)if(B.status===304)B=D,re=P;else throw new ut.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==K&&(B[t]=K)}q=!0,w({key:K,version:re,value:B})}catch(re){re.message+=` while resolving record ${K} for ${s}`,D&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!T?.mustRevalidate||T?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(w({key:K,version:P,value:D}),ke.default.trace?.(re.message,"(returned stale record)")):L(re);let ie=performance.now()-Q;Ve(ie,"cache-resolution",s,null,"fail"),U&&Fp(U,"Server-Timing",`cache-resolve;dur=${ie.toFixed(2)}`,!0),A.transaction.abort();return}if(T?.noCacheStore||A.noCacheStore){A.transaction.abort();return}Br(A).addWrite({key:K,store:i,entry:_,nodeName:"source",before:Pu(B),commit:a((re,ie)=>{if(ie?.version!==P)return;let Oe=Nu(K,D,B);if(B){Ye.put?.(A,K,B),ie&&(T.previousResidency=ve.getResidencyRecord(ie.residencyId));let le,ae=!1,xe,Ce=Ba(ve.getResidency(B,T));if(Ce){if(!Ce.includes(server.hostname))if(le=B,ae=!0,ve.getResidencyById)B=void 0;else{B=null;for(let Le in r)B||(B={}),B[Le]=le[Le]}xe=Yc(Ce)}ke.default.trace?.(`Writing resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),y(K,B,ie,re,ae?Fn:0,g&&(Ee||ae)||null,{user:A?.user,expiresAt:A.expiresAt,residencyId:xe,tableToTrack:s},"put",!!fe,le)}else ie&&(Ye.delete?.(A,K),ke.default.trace?.(`Deleting resolved record from source with id: ${K}, timestamp: ${new Date(re).toISOString()}`),g||R?y(K,null,ie,re,0,g&&Ee||null,{user:A?.user,tableToTrack:s},"delete",!!fe):ul(i,ie,P))},"commit")})}),()=>{i.unlock(K,P)},W=>{i.unlock(K,P),q&&ke.default.error?.("Error committing cache update",W)})})}a(Ou,"getFromSource");function Ua(K){if(!K||K.user?.role?.permission?.super_user)return!0;if(K.replicateTo)throw new ut.ClientError("Can not specify replication parameters without super user permissions",403);if(K.replicatedConfirmation)throw new ut.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}a(Ua,"checkContextPermissions");function xa(K){let _=!1;if(K&&(K-Ar>1&&(_=!0),Ar=K),!(qe===er&&!_)&&(er=qe,(0,Ml.getWorkerIndex)()===(0,Ml.getWorkerCount)()-1))return Qr&&clearTimeout(Qr),qe?new Promise(T=>{let C=new Date;C.setMonth(0),C.setDate(1),C.setHours(0),C.setMinutes(0),C.setSeconds(0);let P=qe/(1+Ar),O=_?Date.now():Math.ceil((Date.now()-C.getTime())/P)*P+C.getTime(),x=a(D=>{ke.default.trace?.(`Scheduled next cleanup scan at ${new Date(D)}`),Qr=setTimeout(()=>ee=ee.then(async()=>{if(x(Math.max(D+qe,Date.now())),i.rootStore.status!=="open"){clearTimeout(Qr);return}let A=50,U=new Array(A),w=0,L=Math.pow(Ar,8)*(Ul.get(F.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),q=E/Math.pow(Math.max(Ar,1),4);ke.default.debug?.(`Starting cleanup scan for ${s}, evict threshold ${L}, adjusted eviction ${q}ms`);function W(Q,B,Ee,fe){let pe=Q+q-Date.now();if(pe<0)return!0;if(Ar){let re=i.lastSize;return Ee&Zr&&el(fe,ie=>{ie.size&&(re+=ie.size)}),ke.default.trace?.(`shouldEvict adjusted ${pe} ${re}, ${pe*(Q-B)/re} < ${L}`),pe*(Q-B)/re<L}return!1}a(W,"shouldEvict");try{let Q=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:Ee,value:fe,version:pe,expiresAt:re,metadataFlags:ie}=B,Oe;fe===null&&!g&&pe+Gae<Date.now()?Oe=ul(i,B,pe):re!=null&&W(re,pe,ie,fe)&&(Oe=ve.evict(Ee,fe,pe),Q++),Oe&&(await U[w],U[w]=Oe.catch(le=>{ke.default.error?.("Cleanup error",le)}),++w>=A&&(w=0)),await oc()}ke.default.debug?.(`Finished cleanup scan for ${s}, evicted ${Q} entries`)}catch(Q){ke.default.warn?.(`Error in cleanup scan for ${s}:`,Q)}T(void 0),Ar=0}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");x(O)}):void 0}a(xa,"scheduleCleanup");function mm(){Y=l?.addDeleteRemovalCallback(n,i,(K,_)=>{i.remove(K,_)})}a(mm,"addDeleteRemoval");function r_(){(0,Ml.getWorkerIndex)()===0&&setInterval(async()=>{if(!Kc){Kc=!0;try{let K=j.name,_=r[K];if(!_)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let T of _.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let C of _.getValues(T)){let P=i.getEntry(C);P?.value?P.value[K]<Date.now()&&ve.evict(C,P.value,P.version):i.ifVersion(C,P?.version,()=>_.remove(T,C))}await oc()}}catch(K){ke.default.error?.("Error in evicting old records",K)}finally{Kc=!1}}},Hae).unref()}a(r_,"runRecordExpirationEviction");function Ba(K){if(K!=null){if(Array.isArray(K))return K;if(typeof K=="number"){if(K>=65536)throw new Error(`Shard id ${K} must be below 65536`);let _=server.shards?.get?.(K);if(_)return ke.default.trace?.(`Shard ${K} mapped to ${_.map(T=>T.name).join(", ")}`),_.map(T=>T.name);throw new Error(`Shard ${K} is not defined`)}throw new Error(`Shard or residency list ${K} is not a valid type, must be a shard number or residency list of node hostnames`)}}a(Ba,"residencyFromFunction");function Yc(K){if(K){let _=K.join(","),T=d.get([Symbol.for("residency_by_set"),_]);return T||(d.put([Symbol.for("residency_by_set"),_],T=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),T],K),T)}}a(Yc,"getResidencyId");function Pu(K,_){let T=_A(K,i.rootStore);if(T){let C=_;return C?async()=>{await C(),await T}:()=>T}return _}a(Pu,"preCommitBlobsForRecordBefore")}function gN(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 JG(){}function cS(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 aS(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return aS(+e);case"Float":return e==="null"?null:aS(+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;Yae.test(e)||(e+="Z");let n=new Date(e);return aS(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,lS.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function aS(e){if(isNaN(e))throw new SyntaxError;return e}function XG(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 qs(e,t,r){return e?.then?e.then(t,r):t(e)}function ZG(e){return e!=null}function $s(e){try{return JSON.stringify(e)}catch{return e}}function Wae(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var ac,Hp,eq,tq,Ul,ut,Gp,qp,ke,xl,Ml,lS,SN,rq,xae,Bae,Fae,kae,Hae,Gae,WG,qae,zG,$ae,Fn,dl,Vae,jG,QG,Kae,LMe,Yae,oc,mg=se(()=>{H();ac=require("lmdb"),Hp=b(Un()),eq=b(require("lodash")),tq=b(Cm());Vo();Pm();Ul=b(me());sI();ut=b(_e()),Gp=b(Wo()),qp=b(ls());we();fg();ke=b(wr());fw();Ga();xl=require("ordered-binary"),Ml=b(st());$i();lS=b(oe());al();is();N_();kp();SN=b(require("node:fs"));ss();V_();rq=b(J());_N();({sortBy:xae}=eq.default),{validateAttribute:Bae}=tq.default,Fae=new Uint8Array(9);Fae[8]=192;kae=1/0,Hae=6e4,Gae=864e5;Ul.initSync();WG=Ul.get(F.STORAGE_PREFETCHWRITES),qae=1e4,zG=1,$ae=2,Fn=1,dl=8,Vae=Buffer.allocUnsafeSlow(8192),jG=1978,QG=100,Kae={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},LMe=(0,lS.convertToMS)(Ul.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(uS,"makeTable");a(gN,"attributesAsObject");a(JG,"noop");Yae=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(cS,"coerceType");a(aS,"rejectNaN");a(XG,"isDescendantId");oc=a(()=>new Promise(setImmediate),"rest");a(qs,"when");a(ZG,"exists");a($s,"stringify");a(Wae,"hasOtherProcesses")});function dS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,o=t[s]||0,c=i-o;r+=c*c}return r}function fS(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let o=0;o<i;o++){let c=e[o]||0,l=t[o]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var sq=se(()=>{a(dS,"euclideanDistance");a(fS,"cosineDistance")});var iq,oq,Ad,co,bd,zae,jae,mS,aq=se(()=>{sq();iq=require("msgpackr"),oq=b(wr()),Ad=b(_e()),co=(0,oq.loggerWithTag)("HNSW"),bd=Symbol.for("entryPoint"),zae=Symbol.for("key"),jae=10,mS=class{static{a(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=iq.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?dS:fS,r&&(r.M!==void 0&&(this.M=r.M,this.mL=1/Math.log(this.M)),r.efConstruction!==void 0&&(this.efConstruction=this.efConstructionSearch=r.efConstruction),r.efConstructionSearch!==void 0&&(this.efConstructionSearch=r.efConstructionSearch),r.mL!==void 0&&(this.mL=r.mL),r.optimizeRouting!==void 0&&(this.optimizeRouting=r.optimizeRouting))}index(t,r,n){let s=typeof t=="number"?[zae,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let o=new Map,c,l=this.indexStore.get(bd);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let E=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:E,primaryKey:t};for(let R=0;R<=E;R++)g[R]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);co.debug?.("setting entry point to",i),this.indexStore.put(bd,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),jae),p=f.level;if(m>=p){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);co.debug?.("setting entry point to",i),this.indexStore.put(bd,i)}for(;p>m;){let E=this.searchLayer(r,l,f,this.efConstruction,p);E.length>0&&(l=E[0].id,f=E[0].node),p--}let h=new Array(m+1);for(let E=0;E<=m;E++)h[E]=[];for(let E=Math.min(m,p);E>=0;E--){let g=this.searchLayer(r,l,f,this.efConstruction,E);g=g.slice(0,this.M<<1),g.length===0&&E===0&&co.info?.("should not have zero connections for",l);let R=h[E];for(let S=0;S<g.length;S++){let{id:y,distance:N,node:I}=g[S];if(y===i)continue;let $=[];if(this.optimizeRouting){let k=!1,j=I[E],Y=1+this.optimizeRouting*(1+.5*S/this.M);for(let ce=0;ce<j.length;ce++){let{id:de,distance:te}=j[ce],ge=1+this.optimizeRouting*(1+.5*ce/this.M);for(let be=0;be<R.length;be++){let{id:Ye,distance:qe}=R[be];if(Ye===de){N*Y>qe+te?k=!0:te*ge>N+qe&&($.push({fromId:Ye,toId:y}),$.push({fromId:y,toId:Ye}));break}}if(k)break}if(k)continue}else if(S>=(E>0?this.M:this.M<<1))continue;R.push({id:y,distance:N});for(let{fromId:k,toId:j}of $){let Y=d(k);Y||(Y=d(k,this.indexStore.get(k)));for(let ce=0;ce<Y[E].length;ce++)if(Y[E][ce].id===j){Object.isFrozen(Y[E])&&(Y[E]=Y[E].slice()),Y[E].splice(ce,1);break}}let ee=c[E],G=ee?.find(({id:k})=>k===y);if(G){let k=ee?.indexOf(G);ee.copied||(ee=[...ee],ee.copied=!0,c[E]=ee),ee.splice(k,1)}else this.addConnection(y,d(y,I),i,E,N,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...h})}else{if(l===i){let f=c.level??0;for(let m=f;m>=0&&(l=c[m][0]?.id,l===void 0);m--);if(l===void 0){let m=-1;for(let{key:p,value:h}of this.indexStore.getRange({start:0,end:1/0}))if(h.level>m){if(l=p,h.level===f)break;m=h.level}}if(l===void 0)this.indexStore.remove(bd);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);co.debug?.("setting entry point to",l),this.indexStore.put(bd,l)}}this.indexStore.remove(i)}let u=new Map;if(c.level!==void 0)for(let f=0;f<=c.level;f++){let m=c[f];for(let{id:p}of m){let h=d(p,this.indexStore.get(p));for(let E=0;E<=f;E++)h[E]=h[E]?.filter(({id:g})=>g!==i),h[E].length===0&&(co.info?.("node was left orphaned, will reindex",p),u.set(h.primaryKey,h.vector))}}function d(f,m){let p=o.get(f);return!p&&m&&(p={...m},o.set(f,p)),p}a(d,"updateNode");for(let[f,m]of o)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(bd);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,o=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((p,h)=>p.distance-h.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:p}of m[i]||[]){if(c.has(p)||p===void 0)continue;c.add(p);let h=this.indexStore.get(p);if(!h)continue;this.nodesVisitedCount++;let E=o(t,h.vector);if(E<f||u.length<s){let g={id:p,distance:E,node:h};l.push(g),u.push(g)}}u.sort((p,h)=>p.distance-h.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let o=0;switch(i){case"lt":case"le":o=r;case"sort":break;default:throw new Ad.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Ad.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=fS;else if(s==="euclidean")c=dS;else{if(s)throw new Ad.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Ad.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Ad.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return o&&(d=d.filter(f=>f.distance<o)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let o=this.indexStore.get(i);if(!o){co.info?.("could not find neighbor node",o);continue}o[n]?.find(({id:l})=>l==t)||co.info?.("asymmetry detected",o[n])}n++}}addConnection(t,r,n,s,i,o){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){co.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=o(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=o(f.id,m),m[s]=m[s].filter(({id:p})=>p!==t),s===0&&m[s].length===0&&co.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?co.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let o=s.shift(),c=this.indexStore.get(o);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let o=this.distance;s.type&&(o=s.distance==="euclidean"?dS:fS);let c=o(s.target,t);return i.set(n,c),c}return t}}});var TN,cq=se(()=>{aq();TN={HNSW:mS}});var ft={};ye(ft,{NON_REPLICATING_SYSTEM_TABLES:()=>pS,database:()=>ud,databaseEnvs:()=>Xo,databases:()=>Me,dropDatabase:()=>_w,dropTableMeta:()=>tce,getDatabases:()=>ct,getDefaultCompression:()=>yS,getTables:()=>Jae,onRemovedDB:()=>jp,onUpdatedTable:()=>Bl,readMetaDb:()=>$p,resetDatabases:()=>Od,table:()=>Xe,tables:()=>Rn});function zp(e,t){let r=SS.OpenDBIObject??SS.default.OpenDBIObject;return new r(e,t)}function Jae(){return gS||ct(),Rn||{}}function ct(){if(gS)return Me;gS=!0,Nd=new Map;let e=(0,zt.getHdbBasePath)()&&(0,kt.join)((0,zt.getHdbBasePath)(),jc),t=(0,zt.get)(F.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(F.STORAGE_PATH)||e&&((0,gs.existsSync)(e)?e:(0,kt.join)((0,zt.getHdbBasePath)(),l_)),!!e){if((0,gs.existsSync)(e))for(let r of(0,gs.readdirSync)(e,{withFileTypes:!0})){let n=(0,kt.basename)(r.name,".mdb");r.isFile()&&(0,kt.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&$p((0,kt.join)(e,r.name),null,n)}if((0,gs.existsSync)((0,wd.getBaseSchemaPath)())){for(let r of(0,gs.readdirSync)((0,wd.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,kt.join)((0,wd.getBaseSchemaPath)(),r.name),s=(0,kt.join)((0,wd.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,gs.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,kt.extname)(i.name).toLowerCase()===".mdb"){let o=(0,kt.join)(s,i.name);$p((0,kt.join)(n,i.name),(0,kt.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,gs.existsSync)(s))for(let o of(0,gs.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,kt.extname)(o.name).toLowerCase()===".mdb"&&$p((0,kt.join)(s,o.name),(0,kt.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],l=(0,kt.join)(c.path,(0,kt.basename)(o+".mdb"));(0,gs.existsSync)(l)&&$p(l,o,r,null,!0)}}for(let r in Me){let n=Nd.get(r);if(n){let s=Me[r];r.includes("delete")&&Or.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(Or.trace(`delete table class ${i}`),delete s[i])}else if(delete Me[r],r==="data"){for(let s in Rn)delete Rn[s];delete Rn[TS]}}if((0,zt.get)(F.ANALYTICS_REPLICATE)===!1?pS.includes("hdb_analytics")||pS.push("hdb_analytics"):(Me.system?.hdb_analytics?.enableAuditing(),Me.system?.hdb_analytics_hostname?.enableAuditing()),Me.system)for(let r of pS)Me.system[r]&&(Me.system[r].replicate=!1);return Nd=null,Me}}function Od(){gS=!1;for(let[,e]of Xo)e.needsDeletion=!0;ct();for(let[e,t]of Xo)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Xo.delete(e);let r=Me[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Me[t.databaseName],Kp.forEach(i=>i(t.databaseName));break}}return Me}function $p(e,t,r=bN,n,s){let i=new yN.default(e,!1);try{let o=Xo.get(e);o?o.needsDeletion=!1:(o=(0,Cd.open)(i),Xo.set(e,o));let c=new zp(!1),l=o.dbisDb||(o.dbisDb=o.openDB(hS.INTERNAL_DBIS_NAME,c)),u=o.auditStore;u||(n?(0,gs.existsSync)(n)&&(i.path=n,u=(0,Cd.open)(i),u.isLegacy=!0):u=W_(o));let d=mq(r),f=d[TS],m=new Map;for(let{key:p,value:h}of l.getRange({start:!1})){let[E,g]=p.toString().split("/");g===""?g=h.name:g||(g=E,E=t,h.name||(h.name=g,h.indexed=!h.is_hash_attribute)),f?.add(E);let R=m.get(E);R||m.set(E,R={attributes:[]}),(g==null||h.is_hash_attribute)&&(R.primary=h),g!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:p,configurable:!0})}for(let[p,h]of m){let{attributes:E,primary:g}=h;if(!g){for(let te of E)if(te.is_hash_attribute||te.isPrimaryKey){g=te;break}if(!g){Or.warn(`Unable to find a primary key attribute on table ${p}, with attributes: ${JSON.stringify(E)}`);continue}}let R=d[p],S={},y=[],N,I,$=typeof g.audit=="boolean"?g.audit:(0,zt.get)(F.LOGGING_AUDITLOG),ee=g.trackDeletes,G=g.expiration,k=g.eviction,j=g.sealed,Y=g.splitSegments,ce=g.replicate;if(R)S=R.indices,y=R.attributes,R.schemaVersion++;else{N=g.tableId,N?N>=(l.get(Id)||0)&&(l.putSync(Id,N+1),Or.info(`Updating next table id (it was out of sync) to ${N+1} for ${p}`)):(g.tableId=N=l.get(Id),N||(N=1),Or.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(Id,N+1),l.putSync(g.key,g));let te=new zp(!g.is_hash_attribute,g.is_hash_attribute);if(te.compression=g.compression,te.compression){let ge=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||fq;te.compression.threshold=ge}I=cg(o.openDB(g.key,te),o),o.databaseName=r,I.tableId=N}let de;for(let te of E){te.attribute=te.name;try{if(!te.is_hash_attribute&&(te.indexed||te.attribute&&!te.name)){if(!S[te.name]){let be=hq(te.key,o,te);S[te.name]=be,S[te.name].indexNulls=te.indexNulls}let ge=y.find(be=>be.name===te.name);ge?y.splice(y.indexOf(ge),1,te):y.push(te),de=!0}}catch(ge){Or.error("Error trying to update attribute",te,y,S,ge)}}for(let te of y)if(!E.find(be=>be.name===te.name)){if(te.is_hash_attribute){Or.error("Unable to remove existing primary key attribute",te);continue}te.indexed&&(y.splice(y.indexOf(te),1),de=!0)}if(R)de&&(R.schemaVersion++,R.updatedAttributes());else{R=pq(d,p,uS({primaryStore:I,auditStore:u,audit:$,sealed:j,splitSegments:Y,replicate:ce,expirationMS:G&&G*1e3,evictionMS:k&&k*1e3,trackDeletes:ee,tableName:p,tableId:N,primaryKey:g.name,databasePath:s?r+"/"+p:r,databaseName:r,indices:S,attributes:E,schemaDefined:g.schemaDefined,dbisDB:l})),R.schemaVersion=1;for(let te of Vp)te(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function mq(e){let t=Me[e];if(t||(e==="data"?t=Me[e]=Rn:e==="system"?Object.defineProperty(Me,"system",{value:t=Object.create(null),configurable:!0}):t=Me[e]=Object.create(null)),Nd&&!Nd.has(e)){let r=new Set;t[TS]=r,Nd.set(e,r)}return t}function pq(e,t,r){return e[t]=r,r}function ud({database:e,table:t}){e||(e=bN),ct();let r=mq(e),n=(0,kt.join)((0,zt.getHdbBasePath)(),jc),s=(0,zt.get)(F.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,zt.get)(F.STORAGE_PATH)||((0,gs.existsSync)(n)?n:(0,kt.join)((0,zt.getHdbBasePath)(),l_));let o=(0,kt.join)(n,(i?t:e)+".mdb"),c=Xo.get(o);if(!c||c.status==="closed"){let l=new yN.default(o,!1);c=(0,Cd.open)(l),Xo.set(o,c)}return c.auditStore||(c.auditStore=W_(c)),c}async function _w(e){if(!Me[e])throw new Error("Schema does not exist");let t=Me[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Xo.delete(r.path),r.status==="open"&&(await r.close(),await Yp.remove(r.path));if(r||(r=ud({database:e,table:null}),r.status==="open"&&(await r.close(),await Yp.remove(r.path))),e==="data"){for(let n in Rn)delete Rn[n];delete Rn[TS]}delete Me[e],Kp.forEach(n=>n(e)),await EA(r)}function hq(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&TN[r.indexed.type]?.useObjectStore,s=new zp(!n,n),i=t.openDB(e,s);if(r.indexed.type){let o=TN[r.indexed.type];o?i.customIndex=new o(i,r.indexed):Or.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function Xe(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:o,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:p}=e;r||(r=bN);let h=ud({database:r,table:t}),E=Me[r];Or.trace(`Defining ${t} in ${r}`);let g=E?.[t];if(h.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let R,S,y;m==null&&(m=!0);let N=new zp(!1);for(let Y of o)Y.attribute&&!Y.name?(Y.name=Y.attribute,Y.indexed=!0):Y.attribute=Y.name,Y.expiresAt&&(Y.indexed=!0);let I,$;if(g){if(R=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...o)}else{let Y=h.auditStore;S=o.find(ge=>ge.isPrimaryKey)||{},R=S.name,S.is_hash_attribute=S.isPrimaryKey=!0,S.schemaDefined=m,S.compression=yS(),f&&(S.trackDeletes=!0),c=S.audit=typeof c=="boolean"?c:(0,zt.get)(F.LOGGING_AUDITLOG),n&&(S.expiration=n),s&&(S.eviction=s),u??=!1,S.splitSegments=u,typeof l=="boolean"&&(S.sealed=l),typeof d=="boolean"&&(S.replicate=d),p&&(S.origins?S.origins.includes(p)||S.origins.push(p):S.origins=[p]),Or.trace(`${t} table loading, opening primary store`);let ce=new zp(!1,!0);ce.compression=S.compression;let de=t+"/";if(y=h.dbisDb=h.openDB(hS.INTERNAL_DBIS_NAME,N),j(),y.get(de))return $&&$(),Od(),Xe(e);let te=cg(h.openDB(de,ce),h);h.databaseName=r,te.tableId=y.get(Id),Or.trace(`Assigning new table id ${te.tableId} for ${t}`),te.tableId||(te.tableId=1),y.put(Id,te.tableId+1),S.tableId=te.tableId,g=pq(E,t,uS({primaryStore:te,auditStore:Y,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:R,tableName:t,tableId:te.tableId,databasePath:r,databaseName:r,indices:{},attributes:o,schemaDefined:m,dbisDB:y})),g.schemaVersion=1,I=!0,y.put(de,S)}let ee=g.indices;y=y||(h.dbisDb=h.openDB(hS.INTERNAL_DBIS_NAME,N)),g.dbisDB=y;let G=[];for(let{key:Y,value:ce}of y.getRange({start:!0})){let[de,te]=Y.toString().split("/");if(te===""&&(te=ce.name),te){if(de!==t)continue}else continue;let ge=o.find(Ye=>Ye.name===te),be=!ge?.indexed&&ce.indexed&&!ce.isPrimaryKey;if((!ge||be)&&(j(),I=!0,ge||y.remove(Y),be)){let Ye=g.indices[de];Ye&&G.push(Ye)}}let k=[];try{for(let Y of o||[]){if((Y.relationship||Y.computed)&&(I=!0,Y.relationship))continue;let ce=t+"/"+(Y.name||"");Object.defineProperty(Y,"key",{value:ce,configurable:!0});let de=y.get(ce);if(Y.isPrimaryKey){if(de=de||y.get(ce=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+de.expiration||void 0)||(+s||void 0)!==(+de.eviction||void 0)||Y.type!==de.type){let ge={...de};typeof c=="boolean"&&(c&&g.enableAuditing(c),ge.audit=c),n&&(ge.expiration=+n),s&&(ge.eviction=+s),l!==void 0&&(ge.sealed=l),d!==void 0&&(ge.replicate=d),Y.type&&(ge.type=Y.type),I=!0,j(),y.put(ce,ge)}continue}de?.attribute&&!de.name&&(de.indexed=!0);let te=!de||de.type!==Y.type||JSON.stringify(de.indexed)!==JSON.stringify(Y.indexed)||de.nullable!==Y.nullable||de.version!==Y.version||de.enumerable!==Y.enumerable||JSON.stringify(de.properties)!==JSON.stringify(Y.properties)||JSON.stringify(de.elements)!==JSON.stringify(Y.elements);if(Y.indexed){let ge=hq(ce,h,Y);(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<Wp.workerData?.restartNumber)&&(I=!0,j(),de=y.get(ce),(te||de.indexingPID&&de.indexingPID!==process.pid||de.restartNumber<Wp.workerData?.restartNumber)&&(I=!0,Y.indexNulls===void 0&&(Y.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(Y.lastIndexedKey=de?.lastIndexedKey??void 0,Y.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(Y,"dbi",{value:ge}),k.push(Y))),y.put(ce,Y)),de?.indexNulls&&Y.indexNulls===void 0&&(Y.indexNulls=!0),ge.indexNulls=Y.indexNulls,ee[Y.name]=ge}else te&&(I=!0,j(),y.put(ce,Y))}}finally{$&&$()}if(I&&(g.schemaVersion++,g.updatedAttributes()),Or.trace(`${t} table loading, running index`),k.length>0||G.length>0?g.indexingOperation=ece(g,k,G):I&&ES.signalSchemaChange(new _S.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=p,I)for(let Y of Vp)Y(g,p!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),Or.trace(`${t} table loaded`),g;function j(){$||h.transactionSync(()=>({then(Y){$=Y}}))}a(j,"startTxn")}async function ece(e,t,r){try{Or.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await ES.signalSchemaChange(new _S.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 f of t)(0,Cd.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:p}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,p,()=>{for(let h=0;h<l;h++){let E=t[h],g=E.name,R=E.dbi;try{let S=E.resolve,y=m&&(S?S(m):m[g]);if(R.customIndex){R.customIndex.index(f,y);continue}let N=(0,lq.getIndexedValues)(y);if(N)for(let I=0,$=N.length;I<$;I++)R.put(N[I],f)}catch(S){o[g]||(o[g]=!0,Or.error(`Error indexing attribute ${g}`,S))}}}),s.then(()=>d--,h=>{d--,Or.error(h)}),Wp.workerData&&Wp.workerData.restartNumber!==dq.restartNumber&&(i=!0),++c%100===0||i){for(let h of t)h.lastIndexedKey=f,e.dbisDB.put(h.key,h);if(i)return}d>Xae?await s:d>Zae&&await new Promise(h=>setImmediate(h))}for(let f of t)delete f.lastIndexedKey,delete f.indexingPID,f.dbi.isIndexing=!1,s=e.dbisDB.put(f.key,f)}await s,await ES.signalSchemaChange(new _S.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),Or.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){Or.error("Error in indexing",n)}}function tce({table:e,database:t}){let r=ud({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 Bl(e){return Vp.push(e),{remove(){let t=Vp.indexOf(e);t>-1&&Vp.splice(t,1)}}}function jp(e){return Kp.push(e),{remove(){let t=Kp.indexOf(e);t>-1&&Kp.splice(t,1)}}}function yS(){let e=(0,zt.get)(F.STORAGE_COMPRESSION),t=(0,zt.get)(F.STORAGE_COMPRESSION_DICTIONARY),r=(0,zt.get)(F.STORAGE_COMPRESSION_THRESHOLD)||fq,n={startingOffset:32};return t&&(n.dictionary=Yp.readFileSync(t)),r&&(n.threshold=r),e&&n}var zt,hS,Cd,kt,gs,wd,yN,Yp,RN,lq,ES,_S,Wp,uq,dq,SS,Qae,Or,bN,TS,fq,pS,Rn,Me,Id,Vp,Kp,gS,Xo,Nd,Xae,Zae,we=se(()=>{zt=b(me()),hS=b(Yt()),Cd=require("lmdb"),kt=require("path"),gs=require("fs"),wd=b(Rt());mg();yN=b(rp());H();Yp=b(require("fs-extra")),RN=b(ci()),lq=b(Un()),ES=b(Wo()),_S=b(ls()),Wp=require("worker_threads"),uq=b(J()),dq=b(st());$i();al();ss();cq();SS=b(tp()),{forComponent:Qae}=uq.default;a(zp,"OpenDBIObject");Or=Qae("storage"),bN="data",TS=Symbol("defined-tables"),fq=((0,zt.get)(F.STORAGE_PAGESIZE)||4096)-60;(0,zt.initSync)();pS=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_info"],Rn=Object.create(null),Me=Object.create(null);(0,RN._assignPackageExport)("databases",Me);(0,RN._assignPackageExport)("tables",Rn);Id=Symbol.for("next-table-id"),Vp=[],Kp=[],Xo=new Map;a(Jae,"getTables");a(ct,"getDatabases");a(Od,"resetDatabases");a($p,"readMetaDb");a(mq,"ensureDB");a(pq,"setTable");a(ud,"database");a(_w,"dropDatabase");a(hq,"openIndex");a(Xe,"table");Xae=1e3,Zae=10;a(ece,"runIndexing");a(tce,"dropTableMeta");a(Bl,"onUpdatedTable");a(jp,"onRemovedDB");a(yS,"getDefaultCompression")});var wN={};ye(wN,{loadGQLSchema:()=>sce,start:()=>IN,startOnMainThread:()=>nce});function IN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=o(new c(r.toString(),s)),m=new Map,p=[],h;for(let R of f.definitions)switch(R.kind){case l.OBJECT_TYPE_DEFINITION:let $=function(G){if(G.kind==="NonNullType"){let Y=$(G.type);return Y.nullable=!1,Y}if(G.kind==="ListType")return{type:"array",elements:$(G.type)};let j={type:G.name?.value};return Object.defineProperty(j,"location",{value:G.loc.startToken}),j};a($,"getProperty");let S=R.name.value,y=[],N={table:null,database:null,properties:y};m.set(S,N),i.allTypes.set(S,N);for(let G of R.directives){if(G.name.value==="table"){for(let j of G.arguments)N[j.name.value]=j.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=S),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,p.push(N)}if(G.name.value==="sealed"&&(N.sealed=!0),G.name.value==="splitSegments"&&(N.splitSegments=!0),G.name.value==="replicate"&&(N.replicate=!0),G.name.value==="export"){N.export=!0;for(let j of G.arguments)typeof N.export!="object"&&(N.export={}),N.export[j.name.value]=j.value.value}}let I=!1,ee={};for(let G of R.fields){let k=$(G.type);k.name=G.name.value,y.push(k),ee[k.name]=void 0;for(let j of G.directives){let Y=j.name.value;if(Y==="primaryKey")I?console.warn("Can not define two attributes as a primary key at",j.loc):(k.isPrimaryKey=!0,I=!0);else if(Y==="indexed"){let ce={};for(let de of j.arguments||[])ce[de.name.value]=de.value.value;k.indexed=ce}else if(Y==="computed"){for(let ce of j.arguments||[])if(ce.name.value==="from"){let de=ce.value.value;k.computed={from:g(de,ce,ee)},k.version==null&&(k.version=de)}else ce.name.value==="version"&&(k.version=ce.value.value);k.computed=k.computed||!0}else if(Y==="relationship"){let ce={};for(let de of j.arguments)ce[de.name.value]=de.value.value;k.relationship=ce}else if(Y==="createdTime")k.assignCreatedTime=!0;else if(Y==="updatedTime")k.assignUpdatedTime=!0;else if(Y==="expiresAt")k.expiresAt=!0;else if(Y==="enumerable")k.enumerable=!0;else if(Y==="allow"){let ce=k.authorizedRoles=[];for(let de of j.arguments)de.name.value==="role"&&ce.push(de.value.value)}else server.knownGraphQLDirectives.includes(Y)&&console.warn(`@${Y} is an unknown directive, at`,j.loc)}}N.type=S,S==="Query"&&(h=N)}function E(R){let S=m.get(R.type);S?(Object.defineProperty(R,"properties",{value:S.properties}),Object.defineProperty(R,"definition",{value:S})):R.type==="array"?E(R.elements):rce.includes(R.type)||(0,_q.getWorkerIndex)()===0&&console.error(`The type ${R.type} is unknown at line ${R.location.line}, column ${R.location.column}, in ${s}`)}a(E,"connectPropertyType");for(let R of m.values())for(let S of R.properties)E(S);for(let R of p)R.tableClass=e(R),R.export&&(R.export.name===""?i.set((0,AN.dirname)(n),R.tableClass):i.set((0,AN.dirname)(n)+"/"+(R.export.name||R.type),R.tableClass,R.export));function g(R,S,y){return new Eq.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${R}; } } } } computed;`,{filename:s,lineOffset:S.loc.startToken.line-1,columnOffset:S.loc.startToken.column}).runInThisContext()(y)}a(g,"createComputedFrom")}}var AN,Eq,_q,rce,nce,sce,gq=se(()=>{AN=require("path"),Eq=require("node:vm");we();_q=b(st());za();rce=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow","enumerable"]);a(IN,"start");nce=IN,sce=a(e=>IN({ensureTable:Xe}).handleFile(e,null,null,new ed),"loadGQLSchema")});var CN={};ye(CN,{start:()=>mce});function ice(e){if(e.kind!==He.Kind.OPERATION_DEFINITION&&e.kind!==He.Kind.FRAGMENT_DEFINITION)throw new Kr(`Unexpected non-executable definition type ${e.kind}.`)}function Sq(e){if(typeof e!="object"||e===null)throw new lo("Request body must be an object.");if(!("query"in e))throw new lo("Request body must contain a `query` field.");if(typeof e.query!="string")throw new lo("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new lo("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new lo("Request body `operationName` field must be a string.")}function NN(e){return parseInt(e.value,10)}function yq(e){return parseFloat(e.value)}function Rq(e,t,r){let n=r.get(e.name.value);return bq(n)?Aq(n,t):{attribute:t,value:n}}function bq(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Aq(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],bq(n)?Aq(n,t):{attribute:t,value:n}))}function oce(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case He.Kind.NULL:return{attribute:t,value:null};case He.Kind.INT:return{attribute:t,value:NN(e.value)};case He.Kind.FLOAT:return{attribute:t,value:yq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:t,value:e.value.value};case He.Kind.VARIABLE:return Rq(e.value,t,r);case He.Kind.OBJECT:return Iq(e.value,t,r);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.value.kind}, is not supported.`)}}function Iq(e,t,r){return e.fields.flatMap(n=>oce(n,t,r))}function ace(e,t){switch(e.value.kind){case He.Kind.NULL:return{attribute:e.name.value,value:null};case He.Kind.INT:return{attribute:e.name.value,value:NN(e.value)};case He.Kind.FLOAT:return{attribute:e.name.value,value:yq(e.value)};case He.Kind.BOOLEAN:case He.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case He.Kind.VARIABLE:return Rq(e.value,e.name.value,t);case He.Kind.OBJECT:return Iq(e.value,[e.name.value],t);case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Argument type, ${e.value.kind}, is not supported.`)}}function cce(e,t){return e.flatMap(r=>ace(r,t))}function RS(e,t){return e.selections.flatMap(r=>{switch(r.kind){case He.Kind.FIELD:return r;case He.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Kr(`Fragment \`${n}\` not found.`);return RS(s.selectionSet,t)}case He.Kind.INLINE_FRAGMENT:return RS(r.selectionSet,t)}})}function wq(e,t){return RS(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:wq(r.selectionSet,t)}:r.name.value)}async function lce(e,t,r,n){let s=Bs.getMatch(e.name.value,"graphql");if(s===void 0)throw new Kr(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,o={select:wq(e.selectionSet,r),conditions:cce(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 Nq(e){switch(e.kind){case He.Kind.NULL:return null;case He.Kind.INT:return NN(e);case He.Kind.FLOAT:return parseFloat(e.value);case He.Kind.STRING:case He.Kind.BOOLEAN:return e.value;case He.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:Nq(r.value),...t}),{});case He.Kind.LIST:case He.Kind.ENUM:default:throw new Kr(`Value type, ${e.kind}, is not supported.`)}}function uce(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=Nq(n.defaultValue)),n.type.kind===He.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Kr(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function dce(e,t,r,n){if(e.operation===He.OperationTypeNode.SUBSCRIPTION)throw new Kr("Subscriptions are not supported.");if(e.operation===He.OperationTypeNode.MUTATION)throw new Kr("Mutations are not supported yet.");let s=uce(e.variableDefinitions,t),i=await Promise.all(RS(e.selectionSet,r).map(c=>lce(c,s,r,n))),o={data:{}};for(let[c,l]of i)o.data[c]=l;return o}async function Tq({query:e,variables:t={},operationName:r},n){let s=He.parse(e),i=new Map,o=new Map;for(let u of s.definitions)if(ice(u),u.kind===He.Kind.FRAGMENT_DEFINITION)o.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Kr("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 Kr(`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 Kr("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Kr(`Operation \`${r}\` not found.`);let l=await dce(c,t,o,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function fce(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 Sq(r),Tq(r,e)}case"POST":{let r=await Bo(e.headers.get("content-type"),!0)(e._nodeRequest);return Sq(r),Tq(r,e)}default:throw new lo("Method Not Allowed",405,{Allow:"GET, POST"})}}function mce(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await fce(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof lo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof He.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Kr)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 lo)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof He.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Kr)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var He,Kr,lo,Cq=se(()=>{He=b(require("graphql"));Fo();za();a(ice,"assertExecutableDefinitionNode");a(Sq,"assertRequestParams");a(NN,"processIntValueNode");a(yq,"processFloatValueNode");a(Rq,"processVariableNode");a(bq,"isObject");a(Aq,"transformObjectIntoQueryCondition");a(oce,"processObjectFieldNode");a(Iq,"processObjectValueNode");a(ace,"processArgumentNode");a(cce,"buildConditionsQuery");a(RS,"fillInFragments");a(wq,"buildSelectQuery");a(lce,"processFieldNode");a(Nq,"processConstValueNode");a(uce,"resolveVariables");a(dce,"executeOperation");a(Tq,"resolver");Kr=class extends Error{static{a(this,"GraphQLQueryingError")}},lo=class extends Error{static{a(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};a(fce,"graphqlQueryingHandler");a(mce,"start")});var Mq=M((ZMe,vq)=>{var Pd=require("validate.js"),Pq=mt(),Ld=(H(),v(z)),{handleHDBError:pce,hdbErrors:hce}=_e(),{HDB_ERROR_MSGS:sr,HTTP_STATUS_CODES:Ece}=hce,ON=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),_ce={STRUCTURE_USER:"structure_user"},Oq=Object.values(Ld.ROLE_TYPES_ENUM),gce="attribute_permissions",Sce="attribute_name",{PERMS_CRUD_ENUM:Dd}=Ld,Tce=[gce,...Object.values(Dd)],Lq=[Dd.READ,Dd.INSERT,Dd.UPDATE],yce=[Sce,...Lq];function Rce(e){let t=ON();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Dq(e,t)}a(Rce,"addRoleValidation");function bce(e){let t=ON();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Dq(e,t)}a(bce,"alterRoleValidation");function Ace(e){let t=ON();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Pq.validateObject(e,t)}a(Ace,"dropRoleValidation");var Ice=["operation","role","id","permission","hdb_user","access"];function Dq(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)Ice.includes(n[o])||s.push(n[o]);s.length>0&&pr(sr.INVALID_ROLE_JSON_KEYS(s),r);let i=Pq.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{pr(o,r)}),e.permission){let o=wce(e);o&&pr(o,r),Oq.forEach(c=>{e.permission[c]&&!Pd.isBoolean(e.permission[c])&&pr(sr.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(Oq.indexOf(o)<0){if(o===_ce.STRUCTURE_USER){let l=e.permission[o];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||pr(sr.SCHEMA_NOT_FOUND(f),r)}continue}pr(sr.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){pr(sr.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[o][l]){pr(sr.TABLE_NOT_FOUND(o,l),r);continue}if(Object.keys(u).forEach(d=>{Tce.includes(d)||pr(sr.INVALID_PERM_KEY(d),r,o,l)}),Object.values(Dd).forEach(d=>{Pd.isDefined(u[d])?Pd.isBoolean(u[d])||pr(sr.TABLE_PERM_NOT_BOOLEAN(d),r,o,l):pr(sr.TABLE_PERM_MISSING(d),r,o,l)}),u.attribute_permissions===void 0){pr(sr.ATTR_PERMS_ARRAY_MISSING,r,o,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){pr(sr.ATTR_PERMS_NOT_ARRAY,r,o,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[o][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let p=u.attribute_permissions[m];if(Object.keys(p).forEach(E=>{!yce.includes(E)&&E!==Dd.DELETE&&pr(sr.INVALID_ATTR_PERM_KEY(E),r,o,l)}),!Pd.isDefined(p.attribute_name)){pr(sr.ATTR_PERM_MISSING_NAME,r,o,l);continue}let h=p.attribute_name;if(!d.includes(h)){pr(sr.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,l);continue}Lq.forEach(E=>{Pd.isDefined(p[E])?Pd.isBoolean(p[E])||pr(sr.ATTR_PERM_NOT_BOOLEAN(E,h),r,o,l):pr(sr.ATTR_PERM_MISSING(E,h),r,o,l)}),!f.read&&p.read===!0&&(f.read=!0),!f.insert&&p.insert===!0&&(f.insert=!0),!f.update&&p.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${o}.${l}`;pr(sr.MISMATCHED_TABLE_ATTR_PERMS(m),r,o,l)}}}}return Nce(r)}a(Dq,"customValidate");vq.exports={addRoleValidation:Rce,alterRoleValidation:bce,dropRoleValidation:Ace};function wce(e){let{operation:t,permission:r}=e;if(t===Ld.OPERATIONS_ENUM.ADD_ROLE||t===Ld.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 sr.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ld.ROLE_TYPES_ENUM.SUPER_USER:Ld.ROLE_TYPES_ENUM.CLUSTER_USER;return sr.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(wce,"validateNoSUPerms");function Nce(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:sr.ROLE_PERMS_ERROR,...e};return pce(new Error,n,Ece.BAD_REQUEST)}else return null}a(Nce,"generateRolePermResponse");function pr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(pr,"addPermError")});var Jp=M((rUe,Fq)=>{"use strict";var Uq=Vn(),xq=gn(),Cce=Nl(),LN=Mq(),DN=Wo(),tUe=require("uuid").v4,Oce=require("util"),bS=(H(),v(z)),Pce=oe(),vN=xq.searchByValue,Lce=xq.searchByHash,Dce=Oce.promisify(Cce.delete),vce=mi(),Mce=cd(),{hdbErrors:Uce,handleHDBError:Fl}=_e(),{HDB_ERROR_MSGS:Bq,HTTP_STATUS_CODES:Qp}=Uce,{UserEventMsg:MN}=ls();Fq.exports={addRole:xce,alterRole:Bce,dropRole:Fce,listRoles:kce};function PN(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(PN,"scrubRoleDetails");async function xce(e){let t=LN.addRoleValidation(e);if(t)throw t;e=PN(e);let r={schema:"system",table:"hdb_role",attribute:"role",value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await vN(r)||[])}catch(i){throw Fl(i)}if(n&&n.length>0)throw Fl(new Error,Bq.ROLE_ALREADY_EXISTS(e.role),Qp.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 Uq.insert(s),DN.signalUserChange(new MN(process.pid)),e=PN(e),e}a(xce,"addRole");async function Bce(e){let t=LN.alterRoleValidation(e);if(t)throw t;e=PN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Uq.update(r)}catch(s){throw Fl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Fl(new Error,"Invalid role id",Qp.BAD_REQUEST,void 0,void 0,!0);return await DN.signalUserChange(new MN(process.pid)),e}a(Bce,"alterRole");async function Fce(e){let t=LN.dropRoleValidation(e);if(t)throw Fl(new Error,t,Qp.BAD_REQUEST,void 0,void 0,!0);let r=new Mce(bS.SYSTEM_SCHEMA_NAME,bS.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await Lce(r));if(n.length===0)throw Fl(new Error,Bq.ROLE_NOT_FOUND,Qp.NOT_FOUND,void 0,void 0,!0);let s=new vce(bS.SYSTEM_SCHEMA_NAME,bS.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await vN(s)),o=!1;if(Pce.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){o=!0;break}}if(o===!0)throw Fl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,Qp.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await Dce(c),DN.signalUserChange(new MN(process.pid)),`${n[0].role} successfully deleted`}a(Fce,"dropRole");async function kce(){return vN({table:"hdb_role",schema:"system",hash_attribute:"id",attribute:"id",value:"*",get_attributes:["*"]})}a(kce,"listRoles")});var UN={};ye(UN,{start:()=>Gq,startOnMainThread:()=>qce});function Gq({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,kq.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(Hce.includes(o))continue;let c=i.permission[o];c.tables||(i.permission[o]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await Gce(i)}}}async function Gce(e){let t=ct().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Hq.isEqual)(i,e)?void 0:(e.id=r.id,(0,AS.alterRole)(e))}return(0,AS.addRole)(e)}var AS,kq,Hq,Hce,qce,qq=se(()=>{we();AS=b(Jp()),kq=require("yaml"),Hq=require("lodash"),Hce=["super_user","cluster_user","structure_user"];a(Gq,"start");a(Gce,"ensureRole");qce=Gq});async function IS(e){let t=(0,Kq.pathToFileURL)(e).toString();if($ce)return Xp||(Xp=Vce(Yce)),(await(await Xp).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function Vce(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Xp=new Compartment({console,Math,Date,fetch:Kce,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Vq.extname)(r)||(r+=".js"),r)},importHook:a(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=lr,s.tables=Rn,s.databases=Me}};let n=await(0,$q.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),Xp}function Kce(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 Yce(){return{Resource:lr,tables:Rn}}var $q,Vq,Kq,$ce,Xp,xN=se(()=>{Vo();we();$q=require("fs/promises"),Vq=require("path"),Kq=require("url"),$ce=!1;a(IS,"secureImport");a(Vce,"getCompartment");a(Kce,"secureOnlyFetch");a(Yce,"getGlobalVars")});var BN={};ye(BN,{handleApplication:()=>Wce,suppressHandleApplicationWarning:()=>zce});function Yq(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Wce(e){e.handleEntry(t=>{if(t.entryType!=="file"){e.logger.warn(`jsResource plugin cannot handle entry type ${t.entryType}. Modify the 'files' option in ${e.configFilePath} to only include files.`);return}if(t.eventType!=="add"){e.requestRestart();return}IS(t.absolutePath).then(r=>{let n=(0,wS.dirname)(t.urlPath);Yq(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),Wq(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function Wq(e,t,r){for(let n in t){let s=t[n],i=(0,wS.join)(r,n);Yq(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&Wq(e,s,i)}}var wS,zce,zq=se(()=>{xN();wS=require("path");a(Yq,"isResource");a(Wce,"handleApplication");a(Wq,"recurseForResources");zce=!0});var kN={};ye(kN,{start:()=>jce});function jce({resources:e}){e.set("login",FN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var FN,jq=se(()=>{Vo();a(jce,"start");FN=class extends lr{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});function CS(e,t){let r={openapi:Qce,info:{title:"HarperDB HTTP REST interface",version:t$.packageJson.version},servers:[{description:"REST API",url:t}],paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},n=[{basicAuth:[],bearerAuth:[]}],s=a(i=>{if(i.type&&!r.components.schemas[i.type]){r.components.schemas[i.type]={};let o={},c=[];for(let l of i.properties)NS[l.type]?o[l.name]=new GN(NS[l.type],l.type):l.properties?(o[l.name]=new n$(l.type),s(l)):l.elements?.properties&&(o[l.name]=new ele(l.elements.type),s(l.elements)),l.nullable===!1&&c.push(l.name);r.components.schemas[i.type]=new e$(o,!i.sealed,c)}},"includeDefinitionInSchema");for(let[,i]of e){if(!i.path||i.Resource.isError)continue;let{path:o}=i,c=o.split("/").pop(),{attributes:l,sealed:u}=i.Resource,{prototype:d,primaryKey:f="id"}=i.Resource;if(!l&&e.allTypes.has(i.path)){let k=e.allTypes.get(i.path);u=k.sealed,l=k.properties}if(!f)continue;let m={},p=[],h=[];if(l)for(let{type:k,name:j,elements:Y,relationship:ce,definition:de,nullable:te}of l){let ge=de??Y?.definition;ge&&s(ge),te===!1&&h.push(j),ce?k==="array"?m[j]={type:"array",items:{$ref:Vs+Y.type}}:m[j]={$ref:Vs+k}:ge?k==="array"?m[j]={type:"array",items:{$ref:Vs+ge.type}}:m[j]={$ref:Vs+ge.type}:k==="array"?Y.type==="Any"?m[j]={type:"array",items:{format:Y.type}}:m[j]={type:"array",items:new GN(NS[Y.type],Y.type)}:k==="Any"?m[j]={format:k}:m[j]=new GN(NS[k],k),p.push(new qN(j,"query",m[j]))}let E=Object.keys(m),g=new qN(f,"path",{type:"string",format:"ID"});g.required=!0,g.description="primary key of record";let R=new qN("property","path",{enum:E});R.required=!0,r.components.schemas[c]=new e$(m,!u,h);let S=d.post!==Resource.prototype.post||d.update,y=typeof d.put=="function",N=typeof d.get=="function",I=typeof d.delete=="function",$=typeof d.patch=="function",ee=`/${o}/`;r.paths[ee]||(r.paths[ee]={}),S&&(r.paths[ee].post=new Jce(c,n,{200:new vd({$ref:Vs+c},{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}})},"create a new record auto-assigning a primary key")),r.paths[ee].options=new Qq(p,n,{200:new Jq},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[ee].get=new HN(p,n,{200:new vd({type:"array",items:{$ref:Vs+c}})},"search for records by the specified property name and value pairs")),I&&(r.paths[ee].delete=new Zq(p,n,"delete all the records that match the provided query",{204:new Xq}));let G="/"+o+"/{"+f+"}";if(r.paths[G]||(r.paths[G]={}),r.paths[G].options=new Qq(p,n,{200:new Jq},"retrieve information about the communication options available for a target resource or the server as a whole, without performing any resource action"),N&&(r.paths[G].get=new HN([g],n,{200:new vd({$ref:Vs+c})},"retrieve a record by its primary key")),y&&(r.paths[G].put=new Xce([g],n,c,{200:new vd({$ref:Vs+c})},"create or update the record with the URL path that maps to the record's primary key")),$&&(r.paths[G].patch=new Zce([g],n,c,{200:new vd({$ref:Vs+c})},"patch the record with the URL path that maps to the record's primary key")),I&&(r.paths[G].delete=new Zq([g],n,"delete a record with the given primary key",{204:new Xq})),N&&R.schema.enum.length>0){let k=`/${o}/{${f}}.{property}`;r.paths[k]||(r.paths[k]={}),r.paths[k].get=new HN([g,R],n,{200:new vd({enum:E})},"used to retrieve the specified property of the specified record")}}for(let[,i]of e.allTypes)s(i),i.sealed&&r.components.schemas[i.type].additionalProperties&&(r.components.schemas[i.type].additionalProperties=!1);return r}function Jce(e,t,r,n){this.description=n,this.requestBody={content:{"application/json":{schema:{$ref:Vs+e}}}},this.security=t,this.responses=r}function HN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Qq(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function Jq(){this.description=r$,this.headers={},this.content={}}function vd(e,t){this.description=r$,this.content={"application/json":{schema:e}},this.headers=t}function Xq(){this.description="successfully processed request, no content returned to client"}function Xce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function Zce(e,t,r,n,s){this.description=s,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Vs+r}}}},this.responses=n}function Zq(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function e$(e,t,r){this.type="object",this.properties=e,this.additionalProperties=t,this.required=r}function GN(e,t){this.type=e,(e==="string"||e==="number"||e==="integer")&&t!=="String"&&(this.format=t)}function n$(e){this.$ref=`#/components/schemas/${e}`}function ele(e){this.type="array",this.items=new n$(e)}function qN(e,t,r){this.name=e,this.in=t,this.schema=r}var t$,Qce,NS,Vs,r$,$N=se(()=>{t$=b(yt()),Qce="3.0.3",NS={Int:"integer",Float:"number",Long:"integer",ID:"string",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer"},Vs="#/components/schemas/",r$="successful operation";a(CS,"generateJsonApi");a(Jce,"Post");a(HN,"Get");a(Qq,"Options");a(Jq,"ResponseOptions200");a(vd,"Response200");a(Xq,"Response204");a(Xce,"Put");a(Zce,"Patch");a(Zq,"Delete");a(e$,"ResourceSchema");a(GN,"Type");a(n$,"Ref");a(ele,"ArrayRef");a(qN,"Parameter")});var i$={};ye(i$,{Request:()=>cc,createReuseportFd:()=>OS});var s$,cc,VN,KN,OS,Zp=se(()=>{s$=require("os"),cc=class{static{a(this,"Request")}#e;#t;_nodeRequest;_nodeResponse;method;url;headers;isWebSocket;user;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new KN(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this.#t===void 0&&(this.#t=this._nodeRequest.socket.getPeerCertificate?.(!0)||null),this.#t}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new VN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get hostname(){return this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}get nodeRequest(){return this._nodeRequest}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},VN=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)}},KN=class{static{a(this,"Headers")}asObject;constructor(t){this.asObject=t}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return Object.prototype.hasOwnProperty.call(this.asObject,t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,s$.platform)()!="win32"&&(OS=require("node-unix-socket").createReuseportFd)});var LS={};ye(LS,{parseHeaderValue:()=>WN,start:()=>nle});async function rle(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&dg(e);let i=new Gs;try{e.responseHeaders=i;let o=e.url.slice(1),c,l;if(o!==o$){let g=PS.getMatch(o,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new ui(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let R=WN(g);for(let S of R)switch(S.name){case"max-age":e.expiresAt=S.value*1e3+Date.now();break;case"only-if-cached":e.onlyIfCached=!0;break;case"no-cache":e.noCache=!0;break;case"no-store":e.noCacheStore=!0;break;case"stale-if-error":e.staleIfError=!0;break;case"must-revalidate":e.mustRevalidate=!0;break}}}let u=r["x-replicate-to"];if(u){let g=WN(u).map(R=>(R.next?.name==="confirm"&&R.next.value>=0&&(e.replicatedConfirmation=+R.next.value),R.name));e.replicateTo=g.length===1&&+g[0]>=0?+g[0]:g[0]==="*"?void 0:g}r["x-replicate-from"]==="none"&&(e.replicateFrom=!1);let f=await bt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=Bo(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new Md.ClientError(g,400)}if(e.authorize=!0,o===o$&&s==="GET"){if(e?.user?.role?.permission?.super_user)return CS(PS,`${e.protocol}://${e.hostname}`);throw new Md.ServerError("Forbidden",403)}switch(c.checkPermission=e.user?.role?.permission??{},s){case"GET":case"HEAD":return l.get(c,e);case"POST":return l.post(c,e.data,e);case"PUT":return l.put(c,e.data,e);case"DELETE":return l.delete(c,e);case"PATCH":return l.patch(c,e.data,e);case"OPTIONS":i.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(c,e.data,e);case"COPY":return l.copy(c,r.destination,e);case"MOVE":return l.move(c,r.destination,e);case"BREW":throw new Md.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Md.ServerError(`Method ${s} is not recognized`,501)}}),m=200,p=e.lastModified;if(f==null)m=s==="GET"||s==="HEAD"?404:204,YN.lastModified&&isFinite(p)&&i.setIfNone("Last-Modified",new Date(p).toUTCString());else if(f.status>0&&f.headers){let g=$G(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=xm(f.data,e,f)),f}else if(isFinite(p)){tle[0]=p;let g=String.fromCharCode(34,(sn[0]&63)+62,(sn[0]>>6)+(sn[1]<<2&63)+62,(sn[1]>>4)+(sn[2]<<4&63)+62,(sn[2]>>2)+62,(sn[3]&63)+62,(sn[3]>>6)+(sn[4]<<2&63)+62,(sn[4]>>4)+(sn[5]<<4&63)+62,(sn[5]>>2)+62,(sn[6]&63)+62,(sn[6]>>6)+(sn[7]<<2&63)+62,34),R=r["if-none-match"];R&&g==R?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),YN.lastModified&&i.setIfNone("Last-Modified",new Date(p).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let h={status:m,headers:i,body:void 0},E=e.loadedFromSource??f?.wasLoadedFromSource?.();return E!==void 0&&(h.wasCacheMiss=E,!E&&isFinite(p)&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||p))/1e3))),f!==void 0&&(h.body=xm(f,e,h),s==="HEAD"&&(h.body=void 0)),h}catch(o){o.statusCode?o.statusCode===500?gi.warn(o):gi.info(o):gi.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.setIfNone("Allow",o.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:o.statusCode||500,headers:i,body:void 0};return c.body=xm(o.contentType?o:l$(o),e,c),c}}function nle(e){YN=e,e.includeExpensiveRecordCountEstimates&&(cc.prototype.includeExpensiveRecordCountEstimates=!0),!a$&&(a$=!0,PS=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return rle(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{eh++;let s=new ns;c$||(c$=!0,Qm(l=>{eh>0&&l.push({metric:"ws-connections",connections:eh,byThread:!0})}));let i;t.on("error",l=>{i=!0,gi.warn(l)});let o;t.on("message",a(function(u){o||(o=Bo(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=o(u);Ve(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{eh--,tn(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=PS.getMatch(l,"ws");if(tn(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,Ve(h=>({count:h.count,total:eh}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new ui(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await bt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let p;for(;!(p=await c.next()).done;){let h=await xo(p.value,r);t.send(h),Ve(h.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(E=>t._socket.once("drain",E))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?gi.warn(l):gi.info(l):gi.error(l),t.close(sle[l.statusCode]||1011,l$(l))}t.close()},e))}function WN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,o]=s.trim().split("=");i=i.trim(),o&&(o=o.trim()),r={name:i.toLowerCase(),value:o,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var gi,Md,l$,sn,tle,YN,o$,a$,PS,c$,eh,sle,u$=se(()=>{Fo();is();gi=b(J()),Md=b(_e());fg();Uu();Ga();kp();$N();Zp();pg();({errorToString:l$}=gi),sn=new Uint8Array(8),tle=new Float64Array(sn.buffer,0,1),YN={},o$="openapi";a(rle,"http");eh=0;a(nle,"start");sle={401:3e3,403:3003};a(WN,"parseHeaderValue")});var zN=M((CUe,f$)=>{var{recordAction:DS,recordActionBinary:d$}=(is(),v(ng)),ile=require("fastify-plugin"),ole=200;f$.exports=ile(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),DS(o,"duration",u,f,d),d$(s.raw.statusCode<400,"success",u,f,d),d$(1,"response_"+s.raw.statusCode,u,f,d);let m=ole;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{DS(performance.now()-c,"transfer",u,f,d),DS(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,DS(m,"bytes-sent",u,f,d));let p=o.toFixed(3),h=s.getHeader("Server-Timing"),E=`db;dur=${p}`;s.header("Server-Timing",h?`${h}, ${E}`:E)}),r()},{name:"hdb-request-time"})});var p$=M((OUe,m$)=>{var ale=mt(),cle={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};m$.exports=function(e){return ale.validateObject(e,cle)}});var vS=M((PUe,h$)=>{"use strict";var lle=(H(),v(z)).OPERATIONS_ENUM,jN=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=lle.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};h$.exports=jN});var nh={};ye(nh,{createTokens:()=>XN,getJWTRSAKeys:()=>FS,refreshOperationToken:()=>ZN,validateOperationToken:()=>eC,validateRefreshToken:()=>kS});async function FS(){if(MS)return MS;try{let e=th.default.join(rh.default.getHdbBasePath(),xb),t=await US.default.readFile(th.default.join(e,Sm.JWT_PASSPHRASE_NAME),"utf8"),r=await US.default.readFile(th.default.join(e,Sm.JWT_PRIVATE_KEY_NAME),"utf8");return MS={publicKey:await US.default.readFile(th.default.join(e,Sm.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},MS}catch(e){throw BS.default.error(e),new Si.ClientError(xd.NO_ENCRYPTION_KEYS,Ud.INTERNAL_SERVER_ERROR)}}async function XN(e){let t=(0,QN.validateBySchema)(e,uo.default.object({username:uo.default.string().optional(),password:uo.default.string().optional(),role:uo.default.string().optional(),expires_in:uo.default.alternatives(uo.default.string(),uo.default.number()).optional()}));if(t)throw new Si.ClientError(t.message);let r;try{let f=e.bypass_auth!==!0;!e.username&&!e.password&&(e.username=e.hdb_user?.username,f=!1),r=await(0,JN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw BS.default.error(f),new Si.ClientError(xd.INVALID_CREDENTIALS,Ud.UNAUTHORIZED)}if(!r)throw new Si.ClientError(xd.INVALID_CREDENTIALS,Ud.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let o=await FS(),c=await Bd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:e.expires_in??T$,algorithm:xS,subject:Fd.OPERATION}),l=await Bd.default.sign(i,{key:o.privateKey,passphrase:o.passphrase},{expiresIn:ule,algorithm:xS,subject:Fd.REFRESH}),u=Ow(l,$r.SHA256);if((await(0,E$.update)(new _$.default(_m,Du.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new Si.ClientError(xd.REFRESH_TOKEN_SAVE_FAILED,Ud.INTERNAL_SERVER_ERROR);return g$.default.signalUserChange(new S$.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function ZN(e){let t=(0,QN.validateBySchema)(e,uo.default.object({refresh_token:uo.default.string().required()}).required());if(t)throw new Si.ClientError(t.message);let{refresh_token:r}=e;await kS(r);let n=await FS(),s=await Bd.default.decode(r);return{operation_token:await Bd.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:T$,algorithm:xS,subject:Fd.OPERATION})}}async function eC(e){return y$(e,Fd.OPERATION)}async function kS(e){return y$(e,Fd.REFRESH)}async function y$(e,t){try{let r=await FS(),n=await Bd.default.verify(e,r.publicKey,{algorithms:xS,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,JN.findAndValidateUser)(n.username,void 0,!1);if(t===Fd.REFRESH&&!Pw(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw BS.default.warn(r),r?.name==="TokenExpiredError"?new Si.ClientError(xd.TOKEN_EXPIRED,Ud.FORBIDDEN):new Si.ClientError(xd.INVALID_TOKEN,Ud.UNAUTHORIZED)}}var Bd,US,th,uo,QN,Si,BS,JN,E$,_$,g$,S$,rh,Ud,xd,T$,ule,xS,Fd,MS,kd=se(()=>{Bd=b(require("jsonwebtoken")),US=b(require("fs-extra")),th=b(require("node:path")),uo=b(require("joi")),QN=b(mt());H();Si=b(_e()),BS=b(J());Dw();JN=b(Es()),E$=b(Vn()),_$=b(vS()),g$=b(Wo()),S$=b(ls()),rh=b(me()),{HTTP_STATUS_CODES:Ud,AUTHENTICATION_ERROR_MSGS:xd}=Si.hdbErrors;rh.default.initSync();T$=rh.default.get(F.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",ule=rh.default.get(F.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",xS="RS256",Fd={OPERATION:"operation",REFRESH:"refresh"};a(FS,"getJWTRSAKeys");a(XN,"createTokens");a(ZN,"refreshOperationToken");a(eC,"validateOperationToken");a(kS,"validateRefreshToken");a(y$,"validateToken")});var tC=M((UUe,A$)=>{"use strict";var dle=p$(),Hd=require("passport"),fle=require("passport-local").Strategy,mle=require("passport-http").BasicStrategy,ple=require("util"),hle=Es(),b$=ple.callbackify(hle.findAndValidateUser),MUe=Jr(),Ele=(H(),v(z)),R$=(kd(),v(nh));Hd.use(new fle(function(e,t,r){b$(e,t,r)}));Hd.use(new mle(function(e,t,r){b$(e,t,r)}));Hd.serializeUser(function(e,t){t(null,e)});Hd.deserializeUser(function(e,t){t(null,e)});function _le(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":Hd.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Ele.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?R$.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):R$.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Hd.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(_le,"authorize");function gle(e,t){let r=dle(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(gle,"checkPermissions");A$.exports={authorize:_le,checkPermissions:gle}});var aC=M((kUe,C$)=>{var $S=require("clone"),VS=mt(),Sle=oe(),GS=(H(),v(z)),BUe=J(),rC=require("fs"),sC=require("joi"),{string:qS}=sC.types(),{hdbErrors:Tle,handleHDBError:HS}=_e(),{HDB_ERROR_MSGS:FUe,HTTP_STATUS_CODES:nC}=Tle,{commonValidators:Gd}=Qi(),I$=" is required",yle=["insert","update","upsert"],iC={database:{presence:!1,format:Gd.schema_format,length:Gd.schema_length},schema:{presence:!1,format:Gd.schema_format,length:Gd.schema_length},table:{presence:!0,format:Gd.schema_format,length:Gd.schema_length},action:{inclusion:{within:yle,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Rle={schema:qS.required(),table:qS.required(),action:qS.valid("insert","update","upsert")},{AWS_ACCESS_KEY:ble,AWS_SECRET:Ale,AWS_BUCKET:Ile,AWS_FILE_KEY:wle,REGION:Nle}=GS.S3_BUCKET_AUTH_KEYS,Cle={s3:{presence:!0},[`s3.${ble}`]:{presence:!0,type:"String"},[`s3.${Ale}`]:{presence:!0,type:"String"},[`s3.${Ile}`]:{presence:!0,type:"String"},[`s3.${wle}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Nle}`]:{presence:!0,type:"String"}},w$=$S(iC);w$.data.presence={message:I$};var N$=$S(iC);N$.file_path.presence={message:I$};var Ole=Object.assign($S(iC),Cle),oC=$S(Rle);oC.csv_url=qS.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();oC.passthrough_headers=sC.object();function Ple(e){let t=VS.validateObject(e,w$);return KS(e,t)}a(Ple,"dataObject");function Lle(e){let t=VS.validateBySchema(e,sC.object(oC));return KS(e,t)}a(Lle,"urlObject");function Dle(e){let t=VS.validateObject(e,N$);return KS(e,t)}a(Dle,"fileObject");function vle(e){let t=VS.validateObject(e,Ole);return KS(e,t)}a(vle,"s3FileObject");function KS(e,t){if(!t){let r=Sle.checkGlobalSchemaTable(e.schema,e.table);if(r)return HS(new Error,r,nC.BAD_REQUEST);if(e.operation===GS.OPERATIONS_ENUM.CSV_FILE_LOAD)try{rC.accessSync(e.file_path,rC.constants.R_OK|rC.constants.F_OK)}catch(n){return n.code===GS.NODE_ERROR_CODES.ENOENT?HS(n,`No such file or directory ${n.path}`,nC.BAD_REQUEST):n.code===GS.NODE_ERROR_CODES.EACCES?HS(n,`Permission denied ${n.path}`,nC.BAD_REQUEST):HS(n)}}return t}a(KS,"postValidateChecks");C$.exports={dataObject:Ple,urlObject:Lle,fileObject:Dle,s3FileObject:vle}});var cC=M((GUe,O$)=>{"use strict";var sh=J(),YS=(H(),v(z));async function Mle(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===YS.OPERATIONS_ENUM.INSERT||t.operation===YS.OPERATIONS_ENUM.UPDATE||t.operation===YS.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===YS.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(sh.info(i.message),i):i.http_resp_msg?(sh.error(`Error calling operation: ${e.name}`),sh.error(i.http_resp_msg),i):(sh.error(`Error calling operation: ${e.name}`),sh.error(i),i)}}a(Mle,"callOperationFunctionAsAwait");O$.exports={callOperationFunctionAsAwait:Mle}});var lC=M(($Ue,L$)=>{"use strict";var{S3:Ule,GetObjectCommand:xle}=require("@aws-sdk/client-s3");L$.exports={getFileStreamFromS3:Ble,getS3AuthObj:P$};async function Ble(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await P$(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new xle(r))).Body}a(Ble,"getFileStreamFromS3");function P$(e,t,r){return new Ule({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(P$,"getS3AuthObj")});var v$=M((KUe,D$)=>{"use strict";var uC=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}},dC=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};D$.exports={BulkLoadFileObject:uC,BulkLoadDataObject:dC}});var U$=M((WUe,M$)=>{"use strict";var fC=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}};M$.exports=fC});var B$=M((jUe,x$)=>{"use strict";var mC=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};x$.exports=mC});var hC=M((JUe,k$)=>{"use strict";var F$=U$(),Fle=B$(),{HDB_ERROR_MSGS:kle}=Jr(),pC=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=kle.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 F$(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Fle(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 F$(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}};k$.exports=pC});var kl=M((exe,$$)=>{"use strict";var ZUe=gn(),ih=J(),{validateBySchema:H$}=mt(),Zo=require("joi"),Hle=no(),WS=oe(),{handleHDBError:zS,hdbErrors:Gle,ClientError:G$}=_e(),{HDB_ERROR_MSGS:jS,HTTP_STATUS_CODES:EC}=Gle,q$=me();q$.initSync();var{getDatabases:_C}=(we(),v(ft)),qle=require("fs-extra"),$le=(H(),v(z));$$.exports={describeAll:Vle,describeTable:QS,describeSchema:Kle};async function Vle(e={}){try{let t=WS.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=_C(),o={},c={},l=[],u=e?.exact_count,d=e?.include_computed;for(let m in i){o[m]=!0,!t&&!s&&!r&&(c[m]=e.hdb_user?.role?.permission[m]?.describe);let p=i[m];for(let h in p)try{let E;if(t||s||r)E=await QS({schema:m,table:h,exact_count:u,include_computed:d});else if(n&&n[m].describe&&n[m].tables[h].describe){let g=n[m].tables[h].attribute_permissions;E=await QS({schema:m,table:h,exact_count:u,include_computed:d},g)}E&&l.push(E)}catch(E){ih.error(E)}}let f={};for(let m in l)t||s||r?(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]):c[l[m].schema]&&(f[l[m].schema]==null&&(f[l[m].schema]={}),f[l[m].schema][l[m].name]=l[m],o[l[m].schema]&&delete o[l[m].schema]);for(let m in o)t||s||r?f[m]={}:c[m]&&(f[m]={});return f}catch(t){return ih.error("Got an error in describeAll"),ih.error(t),zS(new Error,jS.DESCRIBE_ALL_ERR)}}a(Vle,"describeAll");async function QS(e,t){WS.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=H$(e,Zo.object({database:Zo.string(),table:Zo.string().required(),exact_count:Zo.boolean().strict(),include_computed:Zo.boolean().strict()}));if(i)throw new G$(i.message);let c=_C()[r];if(!c)throw zS(new Error,jS.SCHEMA_NOT_FOUND(e.schema),EC.NOT_FOUND);let l=c[n];if(!l)throw zS(new Error,jS.TABLE_NOT_FOUND(e.schema,e.table),EC.NOT_FOUND);function u(p){(!p.computed||e.include_computed)&&d.push({attribute:p.attribute,type:p.type,elements:p.elements?.type,indexed:p.indexed,is_primary_key:p.isPrimaryKey,assigned_created_time:p.assignCreatedTime,assigned_updated_time:p.assignUpdatedTime,nullable:p.nullable,computed:p.computed?!0:void 0,properties:p.properties?p.properties.map(h=>({type:h.type,name:h.name})):void 0})}a(u,"pushAtt");let d=[];if(s){let p={};s.forEach(h=>{h.describe&&(p[h.attribute_name]=!0)}),l.attributes.forEach(h=>{p[h.name]&&u(h)})}else l.attributes?.forEach(p=>u(p));let f;try{f=(await qle.stat(l.primaryStore.env.path)).size}catch(p){ih.warn("unable to get database size",p)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(p=>p.isPrimaryKey||p.is_hash_attribute)?.name,audit:l.audit,schema_defined:l.schemaDefined,attributes:d,db_size:f};l.replicate!==void 0&&(m.replicate=l.replicate),l.expirationMS!==void 0&&(m.expiration=l.expirationMS/1e3+"s"),l.sealed!==void 0&&(m.sealed=l.sealed),l.sources?.length>0&&(m.sources=l.sources.map(p=>p.name).filter(p=>p&&p!=="NATSReplicator"&&p!=="Replicator")),q$.get($le.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Hle.createNatsTableStreamName(m.schema,m.name));try{let p=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=p.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=p.estimatedRange;let h=l.auditStore;if(h)for(let E of h.getKeys({reverse:!0,limit:1}))m.last_updated_record=E[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let E of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=E}catch(p){ih.warn(`unable to stat table dbi due to ${p}`)}return m}a(QS,"descTable");async function Kle(e){WS.transformReq(e);let t=H$(e,Zo.object({database:Zo.string(),exact_count:Zo.boolean().strict(),include_computed:Zo.boolean().strict()}));if(t)throw new G$(t.message);let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=_C()[n];if(!i)throw zS(new Error,jS.SCHEMA_NOT_FOUND(e.schema),EC.NOT_FOUND);let o={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),WS.isEmpty(l)||l.describe){let u=await QS({schema:e.schema,table:c,exact_count:e.exact_count,include_computed:e.include_computed},l?l.attribute_permissions:null);u&&(o[u.name]=u)}}return o}a(Kle,"describeSchema")});var z$=M((rxe,W$)=>{"use strict";var Yle=kl(),{hdbErrors:V$}=_e(),{getDatabases:K$}=(we(),v(ft));W$.exports={checkSchemaExists:Y$,checkSchemaTableExists:Wle,schemaDescribe:Yle};async function Y$(e){if(!K$()[e])return V$.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Y$,"checkSchemaExists");async function Wle(e,t){let r=await Y$(e);if(r)return r;if(!K$()[e][t])return V$.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Wle,"checkSchemaTableExists")});function gC(e){let t=e.get(JS),r=t?(0,qd.unpack)(t):null;r||(r={remoteNameToId:{}});let n=tt(),s=!1;r.nodeName=tt();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:ah(e)??1,nodes:[]})})}i[n]=0,e.putSync(JS,(0,qd.pack)(r))}return r}function oh(e){return gC(e).remoteNameToId}function Q$(e,t){let r=gC(t),n=r.remoteNameToId,s=new Map,i=!1;for(let o in e){let c=e[o],l=n[o];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[o]=l,i=!0}s.set(c,l)}return i&&t.putSync(JS,(0,qd.pack)(r)),s}function XS(e,t){let r=gC(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(JS,(0,qd.pack)(r))}return j$.trace?.("The remote node name map",e,n,s),s}var j$,qd,JS,SC=se(()=>{j$=b(wr());Ss();qd=require("msgpackr"),JS=Symbol.for("remote-ids");a(gC,"getIdMappingRecord");a(oh,"exportIdMapping");a(Q$,"remoteToLocalNodeId");a(XS,"getIdOfRemoteNode")});var rV={};ye(rV,{commitsAwaitingReplication:()=>Vd,getHDBNodeTable:()=>Ht,getReplicationSharedStatus:()=>Kd,iterateRoutes:()=>lh,shouldReplicateToNode:()=>ch,subscribeToNodeUpdates:()=>Yd});function Ht(){return J$||(J$=Xe({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Kd(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(64),n&&{callback:n}))}function Yd(e){Ht().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;tV.debug?.("adding node",n,"on node",tt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==tt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of Ht().search({}))if(i.shard!=null){let o=s.get(i.shard);o||s.set(i.shard,o=[]),o.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function ch(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&Ht().primaryStore.get(tt())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function zle(){Yd(e=>{lc({},(t,r)=>{let n=e.name,s=X$.get(n);if(s||X$.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=Kd(i,r,n,()=>{let c=o[0],l=o.lastTime;for(let{txnTime:u,onConfirm:d}of Vd.get(r)||[])u>l&&u<=c&&d();o.lastTime=c});o.lastTime=0,s.set(r,o)}})})}function*lh(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=$d.default.get(F.REPLICATION_SECUREPORT)??(!$d.default.get(F.REPLICATION_PORT)&&$d.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||$d.default.get(F.REPLICATION_PORT)||$d.default.get(F.OPERATIONSAPI_NETWORK_PORT);let o=i?.lastIndexOf?.(":");o>0&&(i=+i.slice(o+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){Z$.isMainThread&&console.error("Invalid route, must specify a url or host (with port)");continue}yield{replicates:!t.subscriptions,url:r,subscription:t.subscriptions,routes:t.routes,startTime:t.startTime,revoked_certificates:t.revokedCertificates}}}var Z$,eV,$d,tV,J$,X$,Vd,Wd=se(()=>{we();Ss();Pm();Z$=require("worker_threads"),eV=b(_e()),$d=b(me());H();tV=b(wr());server.nodes=[];a(Ht,"getHDBNodeTable");a(Kd,"getReplicationSharedStatus");a(Yd,"subscribeToNodeUpdates");a(ch,"shouldReplicateToNode");X$=new Map;BU((e,t,r)=>{if(r>server.nodes.length)throw new eV.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);Vd||(Vd=new Map,zle());let n=Vd.get(e);return n||(n=[],Vd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:a(()=>{++i===r&&s()},"onConfirm")})})});a(zle,"startSubscriptionToReplications");a(lh,"iterateRoutes")});var lV={};ye(lV,{connectedToNode:()=>Hl,disconnectedFromNode:()=>jd,ensureNode:()=>ea,requestClusterStatus:()=>cV,startOnMainThread:()=>TC});async function TC(e){let t=0,r=ct();for(let o of Object.getOwnPropertyNames(r)){let c=r[o];for(let l in c){let u=c[l];if(u.auditStore){ZS.set(o,ah(u.auditStore));break}}}Ti.whenThreadsStarted.then(async()=>{let o=[];for await(let u of r.system.hdb_nodes?.search([])||[])o.push(u);let c=tt();function l(){let u=Ht().primaryStore.get(c);if(u!==null){let d=e.url??uc();if(u===void 0||u.url!==d||u.shard!==e.shard)return ea(c,{name:c,url:d,shard:e.shard,replicates:!0})}}a(l,"ensureThisNode"),Ht().primaryStore.get(c)&&l();for(let u of lh(e))try{let d=!u.subscriptions;if(d&&await l(),d&&u.replicates==null&&(u.replicates=!0),nV.push(u),o.find(f=>f.url===u.url))continue;s(u)}catch(d){console.error(d)}Yd(s)});let n;function s(o,c=o?.name){let l=tt()&&c===tt()||uc()&&o?.url===uc();if(l){let m=!!o?.replicates;if(n!==void 0&&n!==m)for(let p of Ht().search([]))p.replicates&&p.name!==c&&s(p,p.name);n=m}if(ot.trace("Setting up node replication for",o),!o){for(let[m,p]of fo){let h;for(let[E,{worker:g,nodes:R}]of p){let S=R[0];if(S&&S.name==c){h=!0;for(let[y,{worker:N}]of p)p.delete(y),ot.warn("Node was deleted, unsubscribing from node",c,y,m),N?.postMessage({type:"unsubscribe-from-node",node:c,nodes:R,database:y,url:m});break}}if(h){fo.get(m).iterator.remove(),fo.delete(m);return}}return}if(l)return;if(!o.url){ot.info(`Node ${o.name} is missing url`);return}let u=fo.get(o.url);if(u&&u.iterator.remove(),!(o.replicates===!0||o.replicates?.sends)&&!o.subscriptions?.length&&!u)return;if(ot.info(`Added node ${o.name} at ${o.url} for process ${tt()}`),o.replicates&&o.subscriptions&&(o={...o,subscriptions:null}),o.name){for(let[m,p]of zd)if(o.url===p.url){zd.delete(m);break}zd.set(o.name,o)}let d=ct();if(u||(u=new Map,fo.set(o.url,u)),u.iterator=lc(e,(m,p,h)=>{h?f(p,!0):f(p,!1)}),o.subscriptions)for(let m of o.subscriptions){let p=m.database||m.schema;d[p]||(ot.warn(`Database ${p} not found for node ${o.name}, making a subscription anyway`),f(p,!1))}function f(m,p){ot.trace("Setting up replication for database",m,"on node",o.name);let h=u.get(m),E,g=[{replicateByDefault:p,...o}];ZS.has(m)&&uh.default.get(F.REPLICATION_FAILOVER)&&(g.push({replicateByDefault:p,name:tt(),startTime:ZS.get(m),endTime:Date.now(),replicates:!0}),ZS.delete(m));let R=ch(o,m),S=Ti.workers.filter(y=>y.name==="http");if(h){if(E=h.worker,h.nodes=g,R)return}else R&&(t=t%S.length,E=S[t++],E||ot.warn("No http workers available to subscribe to node",o.name,o.url),u.set(m,{worker:E,nodes:g,url:o.url}),E?.on("exit",()=>{u.get(m)?.worker===E&&(u.delete(m),f(m,p))}));if(R){let y=jle.HDB_LEADER_URL??process.env.HDB_LEADER_URL??nV[0]?.url,N=y?new URL(y).hostname:Array.from(Ht().primaryStore.getKeys({}).filter(I=>I!==tt()))[0];ot.warn(`Setting up subscription with leader ${N} for node ${g[0].name}`),g[0].isLeader=!N||g[0].name===N,setTimeout(()=>{let I={...g[0],type:"subscribe-to-node",database:m,nodes:g};E?E.postMessage(I):dh(I)},Qle)}else{ot.info("Node no longer should be used, unsubscribing from node",{replicates:o.replicates,databaseName:m,node:o,subscriptions:o.subscriptions,hasDatabase:!!d[m],thisReplicates:Ht().primaryStore.get(tt())?.replicates}),Ht().primaryStore.get(tt())?.replicates||(n=!1,ot.info("Disabling replication, this node name",tt(),Ht().primaryStore.get(tt()),m));let y={type:"unsubscribe-from-node",database:m,url:o.url,name:o.name,nodes:g};E?E.postMessage(y):tT(y)}}a(f,"onDatabase")}a(s,"onNodeUpdate"),jd=a(function(o){try{ot.info("Disconnected from node",o.name,o.url,"finished",!!o.finished);let c=Array.from(zd.keys()),l=c.sort(),u=l.indexOf(o.name||yi(o.url));if(u===-1){ot.warn("Disconnected node not found in node map",o.name,c);return}let d=fo.get(o.url),f=d?.get(o.database);if(!f){ot.warn("Disconnected node not found in replication map",o.database,d);return}if(f.connected=!1,o.finished||!uh.default.get(F.REPLICATION_FAILOVER))return;let m=f.nodes[0];if(!(m.replicates===!0||m.replicates?.sends||m.subscriptions?.length))return;let p=m.shard,h=(u+1)%l.length;for(;u!==h;){let E=l[h],g=zd.get(E);d=fo.get(g.url);let R=d?.get(o.database);if(!R||R.connected===!1||R.nodes[0].shard!==p){h=(h+1)%l.length;continue}let{nodes:S}=R,y=!1;for(let N of f.nodes){if(S.some(I=>I.name===N.name)){ot.info(`Disconnected node is already failing over to ${E} for ${o.database}`);continue}N.endTime<Date.now()||(S.push(N),ot.info(`Failing over ${o.database} from ${o.name} to ${E}`),i(N,o.database,R.nodes[0]),y=!0)}f.nodes=[f.nodes[0]],y||ot.info(`Disconnected node ${o.name} has no nodes to fail over to ${E}`);return}ot.warn("Unable to find any other node to fail over to",o.name,o.url)}catch(c){ot.error("Error failing over node",c)}},"disconnectedFromNode"),Hl=a(function(o){let c=fo.get(o.url),l=c?.get(o.database);if(!l){ot.warn("Connected node not found in replication map, this may be because the node is being removed",o.database,c);return}l.connected=!0,l.latency=o.latency;let u=l.nodes[0];if(!u){ot.warn("Newly connected node has no node subscriptions",o.database,l);return}if(!u.name){ot.debug("Connected node is not named yet",o.database,l);return}if(!uh.default.get(F.REPLICATION_FAILOVER))return;l.nodes=[u];let d=!1;for(let f of fo.values()){let m=f.get(o.database);if(!m||m==l)continue;let{worker:p,nodes:h,connected:E}=m;if(h)if(E===!1&&h[0].shard===u.shard&&node.url===u.url)for(let g of h)i(g,o.database);else{let g=h.filter(R=>{if(R)return R.name===u.name&&R.worker?(R.worker.postMessage({type:"unsubscribe-to-node",database:o.database,url:o.url,nodes:[R]}),!1):!0});g.length<h.length&&(m.nodes=g)}}},"connectedToNode");function i(o,c,l=o){let u=Ti.workers.filter(f=>f.name==="http");t=t%u.length;let d=u[t++];Object.defineProperty(o,"worker",{value:d,configurable:!0}),d?d.postMessage({url:l.url,name:l.name,type:"subscribe-to-node",database:c,nodes:[o]}):dh({url:l.url,name:l.name,database:c,nodes:[o]})}a(i,"connectToNextWorker"),(0,Ti.onMessageByType)("disconnected-from-node",jd),(0,Ti.onMessageByType)("connected-to-node",Hl),(0,Ti.onMessageByType)("request-cluster-status",cV)}function cV(e,t){let r=[];for(let[n,s]of zd)try{let i=fo.get(s.url);ot.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let o=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)o.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.filter(p=>!(p.endTime<Date.now())).map(p=>p.name)});let c=iV(s);c.database_sockets=o,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ot.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function ea(e,t){let r=Ht();e=e??yi(t.url),t.name=e;try{if(t.ca){let s=new oV.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ot.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ot.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!uh.default.get(F.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],o=iV(n[s]);for(let c of t[s]){let l=!1;for(let u of o)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...o,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ot.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Ti,eT,ot,sV,uh,oV,aV,iV,jle,Qle,fo,jd,Hl,zd,ZS,nV,fh=se(()=>{we();Ti=b(st());Ss();eT=require("worker_threads");Wd();ot=b(J()),sV=b(require("lodash")),uh=b(me());H();oV=require("crypto"),aV=b(require("minimist")),{cloneDeep:iV}=sV.default,jle=(0,aV.default)(process.argv),Qle=200,fo=new Map,zd=new Map,ZS=new Map,nV=[];a(TC,"startOnMainThread");a(cV,"requestClusterStatus");eT.parentPort&&(jd=a(e=>{eT.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Hl=a(e=>{eT.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Ti.onMessageByType)("subscribe-to-node",e=>{dh(e)}),(0,Ti.onMessageByType)("unsubscribe-from-node",e=>{tT(e)}));a(ea,"ensureNode")});var ys=M(Gt=>{"use strict";var hr=require("path"),{watch:Jle}=require("chokidar"),Wn=require("fs-extra"),Qd=require("node-forge"),hV=require("net"),{generateKeyPair:yC,X509Certificate:ta,createPrivateKey:EV,randomBytes:Xle}=require("node:crypto"),Zle=require("util");yC=Zle.promisify(yC);var Pt=Qd.pki,Ri=require("joi"),{v4:_V}=require("uuid"),{validateBySchema:IC}=mt(),{forComponent:eue}=J(),Ts=me(),Ks=(H(),v(z)),{CONFIG_PARAMS:ql}=Ks,bi=Kw(),{ClientError:dc}=_e(),nT=require("node:tls"),{relative:gV,join:tue}=require("node:path"),{CERTIFICATE_VALUES:uV}=bi,rue=Qc(),RC=gt(),{table:nue,getDatabases:sue,databases:rT}=(we(),v(ft)),{getJWTRSAKeys:dV}=(kd(),v(nh)),Je=eue("tls").conditional;Gt.generateKeys=CC;Gt.updateConfigCert=wV;Gt.createCsr=due;Gt.signCertificate=fue;Gt.setCertTable=Jd;Gt.loadCertificates=bV;Gt.reviewSelfSignedCert=PC;Gt.createTLSSelector=CV;Gt.listCertificates=PV;Gt.addCertificate=gue;Gt.removeCertificate=Tue;Gt.createNatsCerts=hue;Gt.generateCertsKeys=pue;Gt.getReplicationCert=ph;Gt.getReplicationCertAuth=uue;Gt.renewSelfSigned=Eue;Gt.hostnamesFromCert=DC;Gt.getKey=yue;Gt.getHostnamesFromCertificate=Rue;Gt.getPrimaryHostName=LC;Gt.generateSerialNumber=oT;var{urlToNodeName:SV,getThisNodeUrl:iue,getThisNodeName:iT,clearThisNodeName:oue}=(Ss(),v(ra)),{readFileSync:aue,statSync:TV}=require("node:fs"),_xe=me(),{getTicketKeys:cue,onMessageFromWorkers:lue}=st(),{isMainThread:yV}=require("worker_threads"),{TLSSocket:RV,createSecureContext:gxe}=require("node:tls"),wC=3650,mh=["127.0.0.1","localhost","::1"],NC=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];function oT(){let e=Xle(8);return e[0]=e[0]&127|1,e.toString("hex")}a(oT,"generateSerialNumber");lue(async e=>{e.type===Ks.ITC_EVENT_TYPES.RESTART&&(Ts.initSync(!0),await PC())});var on;function mc(){return on||(on=sue().system.hdb_certificate,on||(on=nue({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__"}]}))),on}a(mc,"getCertTable");async function ph(){let e=CV("operations-api"),t={secureContexts:null,setSecureContext:a(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(iT());if(!r)return;let n=new ta(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}a(ph,"getReplicationCert");async function uue(){mc();let e=(await ph()).options.cert,r=new ta(e).issuer.match(/CN=(.*)/)?.[1];return on.get(r)}a(uue,"getReplicationCertAuth");var fV,fc=new Map;function bV(){if(fV)return;fV=!0;let e=[{configKey:ql.TLS},{configKey:ql.OPERATIONSAPI_TLS}];mc();let t=hr.dirname(RC.getConfigFilePath()),r;for(let{configKey:n}of e){let s=RC.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let o=i.privateKey,c=o&&gV(tue(t,"keys"),o);c&&mV(o,l=>{fc.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&yV){let d;mV(u,f=>{if(uV.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let p=NV(u),h=new ta(p),E;try{E=LC(h)}catch(y){Je.error?.("error extracting host name from certificate",y);return}if(E==null){Je.error?.("No host name found on certificate");return}if(h.checkIssued(new ta(uV.cert)))return;let g=on.primaryStore.get(E),R=TV(u).mtimeMs,S=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&R<=S){R<S&&Je.info?.(`Certificate ${E} at ${u} is older (${new Date(R)}) than the certificate in the database (${S>1?new Date(S):"only self signed certificate available"})`);return}r=on.put({name:E,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:p,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:R,details:{issuer:h.issuer.replace(/\n/g," "),subject:h.subject?.replace(/\n/g," "),subject_alt_name:h.subjectAltName,serial_number:h.serialNumber,valid_from:h.validFrom,valid_to:h.validTo}})},l?"certificate authority":"certificate")}}}}}return r}a(bV,"loadCertificates");function mV(e,t,r){let n,s=a((i,o)=>{try{let c=o.mtimeMs;c&&c!==n&&(n&&yV&&Je.warn?.(`Reloading ${r}:`,i),n=c,t(NV(i)))}catch(c){Je.error?.(`Error loading ${r}:`,i,c)}},"loadFile");Wn.existsSync(e)?s(e,TV(e)):Je.error?.(`${r} file not found:`,e),Jle(e,{persistent:!1}).on("change",s)}a(mV,"loadAndWatch");function bC(){let e=iue();if(e==null){let t=mh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return SV(e)}a(bC,"getHost");function sT(){let e=iT();if(e==null){let t=mh[0];return Je.info?.("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}a(sT,"getCommonName");async function due(){let e=await ph(),t=Pt.certificateFromPem(e.options.cert),r=Pt.privateKeyFromPem(e.options.key);Je.info?.("Creating CSR with cert named:",e.name);let n=Pt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:sT()},...NC];Je.info?.("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:AV()}];return Je.info?.("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Qd.pki.certificationRequestToPem(n)}a(due,"createCsr");function AV(){let e=mh.includes(sT())?mh:[...mh,sT()];return e.includes(bC())||e.push(bC()),[{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=>hV.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}a(AV,"certExtensions");async function fue(e){let t={},r=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;mc();for await(let d of on.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(fc.has(d.private_key_name)){n=fc.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await Wn.exists(hr.join(r,d.private_key_name))){n=Wn.readFile(hr.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await AC();s=d.ca,n=d.private_key}n=Pt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Pt.certificateFromPem(s.certificate);Je.info?.("Signing CSR with cert named",s.name);let o=Pt.certificationRequestFromPem(e.csr);try{o.verify()}catch(d){return Je.error?.(d),new Error("Error verifying CSR: "+d.message)}let c=Qd.pki.createCertificate();c.serialNumber=oT(),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+wC),Je.info?.("sign cert setting validity:",c.validity),Je.info?.("sign cert setting subject from CSR:",o.subject.attributes),c.setSubject(o.subject.attributes),Je.info?.("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=o.getAttribute({name:"extensionRequest"}).extensions;Je.info?.("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=o.publicKey,c.sign(n,Qd.md.sha256.create()),t.certificate=Pt.certificateToPem(c)}else Je.info?.("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}a(fue,"signCertificate");async function mue(e,t){await Jd({name:iT(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await Jd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Pt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}a(mue,"createCertificateTable");async function Jd(e){let t;try{t=new ta(e.certificate)}catch(r){Je.error?.(`Failed to parse certificate for ${e.name}:`,r.message),Je.debug?.("Certificate record details:",JSON.stringify(e,null,2));let n=new Error(`Invalid certificate format for ${e.name}: ${r.message}. This may be due to corrupted certificate data during transfer or encoding issues.`);throw n.code="INVALID_CERTIFICATE_FORMAT",n.cause=r,n}e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject?.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},mc(),await on.patch(e)}a(Jd,"setCertTable");async function CC(){let e=await yC("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Pt.publicKeyFromPem(e.publicKey),privateKey:Pt.privateKeyFromPem(e.privateKey)}}a(CC,"generateKeys");async function OC(e,t,r){let n=Pt.createCertificate();if(!t){let o=await ph();t=Pt.certificateFromPem(o.options.cert).publicKey}n.publicKey=t,n.serialNumber=oT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+wC);let i=[{name:"commonName",value:sT()},...NC];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(AV()),n.sign(e,Qd.md.sha256.create()),Pt.certificateToPem(n)}a(OC,"generateCertificates");async function AC(){let e=await PV(),t;for(let r of e){if(!r.is_authority)continue;let n=await OV(r.private_key_name);if(r.private_key_name&&n&&new ta(r.certificate).checkPrivateKey(EV(n))){Je.trace?.(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;Je.trace?.("No CA found with matching private key")}a(AC,"getCertAuthority");async function IV(e,t,r=!0){let n=Pt.createCertificate();n.publicKey=t,n.serialNumber=oT(),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+wC);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${Ts.get(ql.REPLICATION_HOSTNAME)??SV(Ts.get(ql.REPLICATION_URL))??_V().split("-")[0]}`},...NC];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0},{name:"subjectKeyIdentifier"}]),n.sign(e,Qd.md.sha256.create());let o=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=hr.join(o,bi.PRIVATEKEY_PEM_NAME);return r&&await Wn.writeFile(c,Pt.privateKeyToPem(e)),n}a(IV,"generateCertAuthority");async function pue(){let{privateKey:e,publicKey:t}=await CC(),r=await IV(e,t),n=await OC(e,t,r);await mue(n,r),wV()}a(pue,"generateCertsKeys");async function hue(){let e=await OC(Pt.privateKeyFromPem(bi.CERTIFICATE_VALUES.key),void 0,Pt.certificateFromPem(bi.CERTIFICATE_VALUES.cert)),t=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=hr.join(t,bi.NATS_CERTIFICATE_PEM_NAME);await Wn.exists(r)||await Wn.writeFile(r,e);let n=hr.join(t,bi.NATS_CA_PEM_NAME);await Wn.exists(n)||await Wn.writeFile(n,bi.CERTIFICATE_VALUES.cert)}a(hue,"createNatsCerts");async function Eue(){mc();for await(let e of on.search([{attribute:"is_self_signed",value:!0}]))await on.delete(e.name);await PC()}a(Eue,"renewSelfSigned");async function PC(){oue(),await bV(),mc();let e=await AC();if(!e){Je.notify?.("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=a(u=>{try{return{key:Pt.privateKeyFromPem(Wn.readFileSync(u)),keyPath:u}}catch(d){return Je.warn?.(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=Ts.get(ql.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=Ts.get(ql.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let o=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),c=gV(o,i);s||(Je.warn?.("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await CC(),Wn.existsSync(hr.join(o,bi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${_V().split("-")[0]}.pem`),await Wn.writeFile(hr.join(o,c),Pt.privateKeyToPem(s)));let l=await IV(s,Pt.setRsaPublicKey(s.n,s.e),!1);await Jd({name:l.subject.getField("CN").value,uses:["https"],certificate:Pt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await ph()){let r=iT();Je.notify?.(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await AC();let n=Pt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await OC(Pt.privateKeyFromPem(e.private_key),s,n);await Jd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}a(PC,"reviewSelfSignedCert");function wV(){let e=rue(Object.keys(Ks.CONFIG_PARAM_MAP),!0),t=hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME),r=hr.join(t,bi.PRIVATEKEY_PEM_NAME),n=hr.join(t,bi.NATS_CERTIFICATE_PEM_NAME),s=hr.join(t,bi.NATS_CA_PEM_NAME),i=Ks.CONFIG_PARAMS,o={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(o[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(o[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(o[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,o[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,o[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),RC.updateConfigValue(void 0,void 0,o,!1,!0)}a(wV,"updateConfigCert");function NV(e){return e.startsWith("-----BEGIN")?e:aue(e,"utf8")}a(NV,"readPEM");var pV=nT.createSecureContext;nT.createSecureContext=function(e){if(!e.cert||!e.key)return pV(e);let t={...e};delete t.key,delete t.cert;let r=pV(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var _ue=RV.prototype._init;RV.prototype._init=function(e,t){_ue.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 Gl=new Map;function CV(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(),Gl.clear();let d=0;if(rT===void 0){c();return}for await(let f of rT.system.hdb_certificate.search([])){let m=f.certificate,p=new ta(m);f.is_authority&&(p.asString=m,Gl.set(p.subject,m))}for await(let f of rT.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",p=f.is_self_signed?1:3;m&&f.uses?.includes?.("operations")&&(p+=1);let h=await OV(f.private_key_name),E=f.certificate,g=new ta(E);if(Gl.has(g.issuer)&&(E+=`
16
+ `+Gl.get(g.issuer)),!h||!E)throw new Error("Missing private key or certificate for secure server");let R={ciphers:f.ciphers,ticketKeys:cue(),availableCAs:Gl,ca:t&&Array.from(Gl.values()),cert:E,key:h,key_file:f.private_key_name,is_self_signed:f.is_self_signed};o&&(R.sessionIdContext=o.sessionIdContext);let S=f.hostnames??DC(g);Array.isArray(S)||(S=[S]);for(let I of S)I===bC()&&(p+=1);let y=nT.createSecureContext(R);y.name=f.name,y.options=R,y.quality=p,y.certificateAuthorities=Array.from(Gl),y.certStart=E.toString().slice(0,100);let N;for(let I of S)if(I){I[0]==="*"&&(s=!0,I=I.slice(1)),hV.isIP(I)&&(N=!0);let $=r.get(I)?.quality??0;Je.trace?.("Assigning TLS for hostname",I,"if",p,">",$),p>$&&r.set(I,y)}else Je.error?.("No hostname found for certificate at",nT.certificate);Je.trace?.("Adding TLS",y.name,"for",o.ports||"client","cert named",f.name,"hostnames",S,"quality",p,"best quality",d),p>d&&(i.defaultContext=n=y,d=p,o&&(o.defaultContext=y))}catch(m){Je.error?.("Error applying TLS for",f.name,m)}o?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}a(u,"updateTLS"),rT?.system.hdb_certificate.subscribe({listener:a(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(o,c){Je.info?.("TLS requested for",o||"(no SNI)");let l=o;for(;;){let d=r.get(l);if(d)return Je.debug?.("Found certificate for",o,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}o?Je.debug?.("No certificate found to match",o,"using the default certificate"):Je.debug?.("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Je.info?.("No default certificate found"),c(null,u)}a(i,"SNICallback")}a(CV,"createTLSSelector");async function OV(e){let t=fc.get(e);return!t&&e?await Wn.readFile(hr.join(Ts.get(ql.ROOTPATH),Ks.LICENSE_KEY_DIR_NAME,e),"utf8"):t}a(OV,"getPrivateKeyByName");async function PV(){mc();let e=[];for await(let t of on.search([]))e.push(t);return e}a(PV,"listCertificates");async function gue(e){let t=IC(e,Ri.object({name:Ri.string().required(),certificate:Ri.string().required(),is_authority:Ri.boolean().required(),private_key:Ri.string(),hosts:Ri.array(),uses:Ri.array()}));if(t)throw new dc(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,o=new ta(n),c=!1,l=!1,u;for(let[p,h]of fc)!s&&!c&&o.checkPrivateKey(EV(h))&&(c=!0,u=p),s&&s===h&&(l=!0,u=p);if(!i&&!s&&!c)throw new dc("A suitable private key was not found for this certificate");let d;if(!r){try{d=LC(o)}catch(p){Je.error?.(p)}if(d==null)throw new dc("Error extracting certificate host name, please provide a name parameter")}let f=Sue(r??d);s&&!c&&!l&&(await Wn.writeFile(hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,f+".pem"),s),fc.set(f,s));let m={name:r??d,certificate:n,is_authority:i,hosts:e.hosts,uses:e.uses};return(!i||i&&u||i&&s)&&(m.private_key_name=u??f+".pem"),e.ciphers&&(m.ciphers=e.ciphers),await Jd(m),"Successfully added certificate: "+f}a(gue,"addCertificate");function Sue(e){return e.replace(/[^a-z0-9\.]/gi,"-")}a(Sue,"sanitizeName");async function Tue(e){let t=IC(e,Ri.object({name:Ri.string().required()}));if(t)throw new dc(t.message);let{name:r}=e;mc();let n=await on.get(r);if(!n)throw new dc(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await on.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(Je.info?.("Removing private key named",s),await Wn.remove(hr.join(Ts.getHdbBasePath(),Ks.LICENSE_KEY_DIR_NAME,s)))}return await on.delete(r),"Successfully removed "+r}a(Tue,"removeCertificate");function LC(e){let t=e.subject?.match(/CN=(.*)/)?.[1];return t||DC(e)[0]}a(LC,"getPrimaryHostName");function DC(e){if(e.subjectAltName)return e.subjectAltName.split(",").map(r=>{let n=r.indexOf(":");if(r=r.slice(n+1),r=r.trim(),r[0]==='"')try{r=JSON.parse(r)}catch{}return r.indexOf("=")>-1?r.match(/CN=([^,]*)/)?.[1]:r}).filter(r=>r);let t=e.subject?.match(/CN=(.*)/)?.[1];return t?[t]:[]}a(DC,"hostnamesFromCert");async function yue(e){if(e.bypass_auth!==!0)throw new dc("Unauthorized","401");let t=IC(e,Ri.object({name:Ri.string().required()}));if(t)throw new dc(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await dV()).privateKey;if(r===".jwtPublic")return(await dV()).publicKey;if(fc.get(r))return fc.get(e.name);throw new dc("Key not found")}a(yue,"getKey");function Rue(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}a(Rue,"getHostnamesFromCertificate")});var e1={};ye(e1,{BACK_PRESSURE_RATIO_POSITION:()=>JV,CONFIRMATION_STATUS_POSITION:()=>QV,LATENCY_POSITION:()=>dT,NodeReplicationConnection:()=>Zd,OPERATION_REQUEST:()=>BC,RECEIVED_TIME_POSITION:()=>kC,RECEIVED_VERSION_POSITION:()=>FC,RECEIVING_STATUS_POSITION:()=>HC,RECEIVING_STATUS_RECEIVING:()=>ZV,RECEIVING_STATUS_WAITING:()=>XV,SENDING_TIME_POSITION:()=>Eh,createWebSocket:()=>fT,databaseSubscriptions:()=>hc,replicateOverWS:()=>_h,tableUpdateListeners:()=>$C});async function fT(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=tt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!UC){let l=(0,YV.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),UC=u.secureContexts}if(i=UC.get(s),i&&ue.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let o={};r&&(o.Authorization=r);let c={headers:o,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,zV.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&((Xd?.caCount!==na.size||Xd?.derivedFromContext!==i)&&(Xd=WV.createSecureContext({...i.options,ca:[...na,...i.options.availableCAs.values()]}),Xd.caCount=na.size,Xd.derivedFromContext=i),c.secureContext=Xd),new $V.WebSocket(e,"harperdb-replication-v1",c)}function _h(e,t,r){let n=t.port||t.securePort,s=qC.pid%1e3+"-"+VV.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);ue.debug?.(s,"Initializing replication connection",r);let i=0,o=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(o.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||hc,f,m,p=!1,h=t.subscription;h?.then&&h.then(A=>{h=A,h.auditStore&&(f=h.auditStore)});let E=t.tables||u&&ct()[u],g,R=new Map,S=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let y,N,I,$,ee,G,k,j=6e4,Y,ce=0,de=0,te=0,ge=qV.default.get(F.REPLICATION_BLOBTIMEOUT)??12e4,be=new Map,Ye=[],qe=0,Ar;if(t.url){let A=a(()=>{ee&&de===e._socket?.bytesRead&&te===e._socket?.bytesWritten?e.terminate():(ee=performance.now(),e.ping(),de=e._socket?.bytesRead,te=e._socket?.bytesWritten)},"sendPing");I=setInterval(A,HV).unref(),A()}else er();e._socket?.setMaxListeners(200);function er(){clearTimeout($),de=e._socket?.bytesRead,te=e._socket?.bytesWritten,$=setTimeout(()=>{de===e._socket?.bytesRead&&te===e._socket?.bytesWritten&&(ue.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},HV*2).unref()}a(er,"resetPingTimer");let Qr=0,xr=0,wu=!1,Kc=3e4;function Ut(){if(pn?.length>0){let A=performance.now(),U=A-xr;Qr=(Qr*Kc+(wu?U:0))/(Kc+U),m&&(m[JV]=Qr),xr=A}}a(Ut,"updateBackPressureRatio"),setInterval(Ut,Kc).unref();function ii(){if(!(!g||!u))return m||(m=Kd(f,u,g)),m}a(ii,"getSharedStatus"),u&&Yc(u);let Ma,ZE,cm=[],e_=[],lm,ve=[],t_=[],wb=[],Nu=150,Hi=25,Ds=0,um=0,dm=!1,Lo,Dn,pn,Br;e.on("message",Cu);async function Cu(A){if(r=await r,!r){ue.error?.(s,"No authorization provided"),Fr(1008,"Unauthorized");return}fm(A),e.off("message",Cu),e.on("message",fm)}a(Cu,"onWSMessageWhenAuthorized");function fm(A){ce=performance.now();try{let U=A.dataView=new nl(A.buffer,A.byteOffset,A.byteLength);if(A[0]>127){let W=(0,at.decode)(A),[Q,B,Ee]=W;switch(Q){case DV:{if(B){if(g){if(g!==B){ue.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${B}, disconnecting`),e.send((0,at.encode)([hh])),Fr(1008,"Node name mismatch");return}}else if(g=B,t.connection?.tentativeNode){let le=t.connection.tentativeNode;le.name=g,t.connection.tentativeNode=null,ea(g,le)}if(t.connection&&(t.connection.nodeName=g),ue.debug?.(s,"received node name:",g,"db:",u??W[2]),!u)try{Yc(u=W[2]),u==="system"&&(Ma=lc(t,(le,ae)=>{Ba(ae)&&K(ae)}),e.on("close",()=>{Ma?.remove()}))}catch(le){ue.warn?.(s,"Error setting database",le),e.send((0,at.encode)([hh])),Fr(1008,le.message);return}mm()}break}case FV:{ue.debug?.(s,"Received table definitions for",B.map(le=>le.table));for(let le of B){let ae=W[2];le.database=ae;let xe;if(Ba(ae)){if(u==="system")Me[ae]?.[le.table]||(xe=D(le,Me[ae]?.[le.table]));else{if(ae!=="data"&&!Me[ae]){ue.warn?.("Database not found",ae);return}xe=D(le,Me[ae]?.[le.table])}f||(f=xe?.auditStore),E||(E=ct()?.[ae])}}break}case hh:Fr();break;case BC:try{let le=r?.replicates||r?.subscribers||r?.name;ue.debug?.("Received operation request",B,"from",g),server.operation(B,{user:r},!le).then(ae=>{ue.debug?.("Requested request from finished",g,ae),Array.isArray(ae)&&(ae={results:ae}),ae.requestId=B.requestId,e.send((0,at.encode)([cT,ae]))},ae=>{ue.debug?.("Failed requested operation from",g,ae),e.send((0,at.encode)([cT,{requestId:B.requestId,error:vC(ae)}]))})}catch(le){e.send((0,at.encode)([cT,{requestId:B.requestId,error:vC(le)}]))}break;case cT:let{resolve:fe,reject:pe}=R.get(B.requestId);ue.debug?.("Received completed operation request",g,B),B.error?pe(new Error(B.error)):fe(B),R.delete(B.requestId);break;case MC:let re=W[3];if(!E){u?ue.error?.(s,"No database found for",u):ue.error?.(s,"Database name never received"),Fr();return}let ie=E[re];ie=D({table:re,database:u,attributes:B.attributes,schemaDefined:B.schemaDefined},ie),cm[Ee]={name:re,decoder:new at.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:B.typedStructs,structures:B.structures}),getEntry(le){return ie.primaryStore.getEntry(le)},rootStore:ie.primaryStore.rootStore};break;case vV:Br=f?Q$(B,f):new Map,lm=W[2],ue.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${lm}`);break;case MV:let Oe=Ee;wb[Oe]=B;break;case BV:ii()[QV]=B,ue.trace?.(s,"received and broadcasting committed update",B),ii().buffer.notify();break;case xV:y=B,h.send({type:"end_txn",localTime:y,remoteNodeIds:S});break;case lT:{let le=W[1],{fileId:ae,size:xe,finished:Ce,error:Le}=le,De=be.get(ae);ue.debug?.("Received blob",ae,"has stream",!!De,"connectedToBlob",!!De?.connectedToBlob,"length",W[2].length,"finished",Ce),De||(De=new xC.PassThrough,De.expectedSize=xe,be.set(ae,De)),De.lastChunk=Date.now();let pt=W[2];Ve(pt.byteLength,"bytes-received",`${g}.${u}`,"replication","blob");try{Ce?(Le?(De.on("error",()=>{}),De.destroy(new Error("Blob error: "+Le+" for record "+(De.recordId??"unknown")+" from "+g))):De.end(pt),De.connectedToBlob&&be.delete(ae)):De.write(pt)}catch(wt){ue.error?.(`Error receiving blob for ${De.recordId} from ${g} and streaming to storage`,wt),be.delete(ae)}break}case UV:{let le=B,ae;try{let xe=W[3],Ce=e_[Ee]||(e_[Ee]=E[W[4]]);if(!Ce)return ue.warn?.("Unknown table id trying to handle record request",Ee);let Le=Ce.primaryStore.getBinaryFast(Symbol.for("structures")),De=Le?.length??0;if(De>0&&De!==um){um=De;let wt=(0,at.decode)(Le);e.send((0,at.encode)([MC,{typedStructs:wt.typed,structures:wt.named},Ee,Ce.tableName]))}let pt=Ce.primaryStore.getBinaryFast(xe);if(pt){let wt=Ce.primaryStore.decoder.decode(pt,{valueAsBuffer:!0}),xt=lt||{};xt.version=(0,jV.getLastVersion)(),lt&&lt[Ku]&Zr&&(wt=Buffer.from(wt),km(()=>Ce.primaryStore.decoder.decode(pt),n_=>Ua(n_,xe),Ce.primaryStore.rootStore)),ae=(0,at.encode)([aT,le,{value:wt,expiresAt:xt.expiresAt,version:xt.version,residencyId:xt.residencyId,nodeId:xt.nodeId,user:xt.user}])}else ae=(0,at.encode)([aT,le])}catch(xe){ae=(0,at.encode)([aT,le,{error:xe.message}])}e.send(ae);break}case aT:{let{resolve:le,reject:ae,tableId:xe,key:Ce}=R.get(W[1]),Le=W[2];if(Le?.error)ae(new Error(Le.error));else if(Le){let De;k_(()=>{let pt=cm[xe].decoder.decode(Le.value);Le.value=pt,Le.key=Ce,le(Le)||De&&setTimeout(()=>De.forEach(x_),6e4).unref()},f?.rootStore,pt=>{let wt=xa(pt,Ce);return De||(De=[]),De.push(wt),wt})}else le();R.delete(W[1]);break}case LV:{pn=B;let le,ae,xe=!1;if(h){if(u!==h.databaseName&&!h.then){ue.error?.("Subscription request for wrong database",u,h.databaseName);return}}else h=d.get(u);if(ue.debug?.(s,"received subscription request for",u,"at",pn),!h){let Pe;h=new Promise(tr=>{ue.debug?.("Waiting for subscription to database "+u),Pe=tr}),h.ready=Pe,hc.set(u,h)}if(r.name)ae=Ht().subscribe(r.name),ae.then(async Pe=>{le=Pe;for await(let tr of le){let ht=tr.value;if(!(ht?.replicates===!0||ht?.replicates?.receives||ht?.subscriptions?.some(kr=>(kr.database||kr.schema)===u&&kr.publish!==!1))){xe=!0,Fr(1008,`Unauthorized database subscription to ${u}`);return}}},Pe=>{ue.error?.(s,"Error subscribing to HDB nodes",Pe)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,at.encode)([hh])),Fr(1008,`Unauthorized database subscription to ${u}`);return}if(Dn&&(ue.debug?.(s,"stopping previous subscription",u),Dn.emit("close")),pn.length===0)return;let Ce=pn[0],Le=a(Pe=>{if(Pe&&(Ce.replicateByDefault?!Ce.tables.includes(Pe.tableName):Ce.tables.includes(Pe.tableName)))return{table:Pe}},"tableToTableEntry"),De={txnTime:0},pt,wt,xt=1/0,n_,s_=a((Pe,tr)=>{if(Pe.type==="end_txn"){De.txnTime&&(o[i]!==66&&ue.error?.("Invalid encoding of message"),C(9),C(Q_),O(n_=tr),AM()),i=c,De.txnTime=0;return}let ht=Pe.nodeId,kr=Pe.tableId,Nt=wt[kr];if(!Nt&&(Nt=wt[kr]=Le(h.tableById[kr]),!Nt))return ue.debug?.("Not subscribed to table",kr);let vs=Nt.table,Kt=vs.primaryStore,oi=Kt.encoder;(Pe.extendedType&ag||!oi.typedStructs)&&(oi._mergeStructures(oi.getStructures()),oi.typedStructs&&(oi.lastTypedStructuresLength=oi.typedStructs.length));let Lu=pt[ht];if(!(Lu&&Lu.startTime<tr&&(!Lu.endTime||Lu.endTime>tr)))return uT&&ue.trace?.(s,"skipping replication update",Pe.recordId,"to:",g,"from:",ht,"subscribed:",pt),IM();uT&&ue.trace?.(s,"sending replication update",Pe.recordId,"to:",g,"from:",ht,"subscribed:",pt);let Nb=Pe.version;De.txnTime!==Nb&&(De.txnTime&&(uT&&ue.trace?.(s,"new txn time, sending queued txn",De.txnTime),o[i]!==66&&ue.error?.("Invalid encoding of message"),AM()),De.txnTime=Nb,i=c,O(Nb));let Wc=Pe.residencyId,Cb=r_(Wc,vs),i_;if(Cb&&!Cb.includes(g)){let Gi=r_(Pe.previousResidencyId,vs);if(Gi&&!Gi.includes(g)&&(Pe.type==="put"||Pe.type==="patch")||vs.getResidencyById)return IM();let zc=Pe.recordId;ue.trace?.(s,"sending invalidation",zc,g,"from",ht);let pm=0;Wc&&(pm|=sl),Pe.previousResidencyId&&(pm|=il);let Lb,o_=null;for(let wM in vs.indices){if(!o_){if(Lb=Pe.getValue(Kt,!0),!Lb)break;o_={}}o_[wM]=Lb[wM]}i_=ol(Pe.version,kr,zc,null,ht,Pe.user,Pe.type==="put"||Pe.type==="patch"?"invalidate":Pe.type,oi.encode(o_),pm,Wc,Pe.previousResidencyId,Pe.expiresAt)}function IM(){return ue.trace?.(s,"skipping audit record",Pe.recordId),G||(G=setTimeout(()=>{G=null,(n_||0)+kV/2<xt&&(uT&&ue.trace?.(s,"sending skipped sequence update",xt),e.send((0,at.encode)([xV,xt])))},kV).unref()),new Promise(setImmediate)}a(IM,"skipAuditRecord");let Ob=oi.typedStructs,Pb=oi.structures;if((Ob?.length!=Nt.typed_length||Pb?.length!=Nt.structure_length)&&(Nt.typed_length=Ob?.length,Nt.structure_length=Pb.length,ue.debug?.(s,"send table struct",Nt.typed_length,Nt.structure_length),Nt.sentName||(Nt.sentName=!0),e.send((0,at.encode)([MC,{typedStructs:Ob,structures:Pb,attributes:vs.attributes,schemaDefined:vs.schemaDefined},kr,Nt.table.tableName]))),Wc&&!t_[Wc]&&(e.send((0,at.encode)([MV,Cb,Wc])),t_[Wc]=!0),i_)C(i_.length),P(i_);else{let Gi=Pe.encoded;Pe.extendedType&Zr&&km(()=>Pe.getValue(Kt),pm=>Ua(pm,Pe.recordId),Kt.rootStore);let zc=Gi[0]===66?8:0;C(Gi.length-zc),P(Gi,zc),ue.trace?.("wrote record",Pe.recordId,"length:",Gi.length)}if(e._socket.writableNeedDrain){let Gi=performance.now();return wu=!0,Ut(),new Promise(zc=>{ue.debug?.(`Waiting for remote node ${g} to allow more commits ${e._socket.writableNeedDrain?"due to network backlog":"due to requested flow directive"}`),e._socket.once("drain",()=>{zc(),wu=!1,Ut()})})}else return qe>Hi?new Promise(Gi=>{Ar=Gi}):new Promise(setImmediate)},"sendAuditRecord"),AM=a(()=>{c-i>8?(e.send(o.subarray(i,c)),ue.debug?.(s,"Sent message, size:",c-i),u!=="system"&&Ve(c-i,"bytes-sent",`${g}.${u}`,"replication","egress")):ue.debug?.(s,"skipping empty transaction")},"sendQueuedData");Dn=new GC.EventEmitter,Dn.once("close",()=>{xe=!0,le?.end()});for(let{startTime:Pe}of pn)Pe<xt&&(xt=Pe);(ae||Promise.resolve()).then(async()=>{h=await h,f=h.auditStore,wt=h.tableById.map(Le),pt=[];for(let{name:tr,startTime:ht,endTime:kr}of pn){let Nt=XS(tr,f);ue.debug?.("subscription to",tr,"using local id",Nt,"starting",ht),pt[Nt]={startTime:ht,endTime:kr}}K(u),Ma||(Ma=Bl(tr=>{tr.databaseName===u&&K(u)}),ZE=jp(tr=>{tr===u&&(e.send((0,at.encode)([hh])),Fr())}),e.on("close",()=>{Ma?.remove(),ZE?.remove()})),e.send((0,at.encode)([vV,oh(h.auditStore),pn.map(({name:tr})=>tr)]));let Pe=!0;do{isFinite(xt)||(ue.warn?.("Invalid sequence id "+xt),Fr(1008,"Invalid sequence id"+xt));let tr;if(Pe&&!xe&&(Pe=!1,xt===0)){ue.info?.("Replicating all tables to",g);let ht=Date.now(),kr=mT(f);for(let Nt in E){if(!Le(Nt))continue;let vs=E[Nt];for(let Kt of vs.primaryStore.getRange({snapshot:!1,versions:!0})){if(xe)return;ue.trace?.(s,"Copying record from",u,Nt,Kt.key,Kt.localTime),ht=Math.max(Kt.localTime??1,ht),tr=!0,ii()[Eh]=1;let oi=ol(Kt.version,vs.tableId,Kt.key,null,kr,null,"put",km(()=>vs.primaryStore.encoder.encode(Kt.value),Lu=>Ua(Lu,Kt.key)),Kt.metadataFlags&-256,Kt.residencyId,null,Kt.expiresAt);await s_({recordId:Kt.key,tableId:vs.tableId,type:"put",getValue(){return Kt.value},encoded:oi,version:Kt.version,residencyId:Kt.residencyId,nodeId:kr,extendedType:Kt.metadataFlags},Kt.localTime)}}De.txnTime||(De.txnTime=ht,O(ht)),s_({type:"end_txn"},ht),ii()[Eh]=0,xt=ht}for(let{key:ht,value:kr}of f.getRange({start:xt||1,exclusiveStart:!0,snapshot:!1})){if(xe)return;let Nt=At(kr);ue.debug?.("sending audit record",ht,Nt.recordId),ii()[Eh]=ht,xt=ht,await s_(Nt,ht),Dn.startTime=ht,tr=!0}tr&&s_({type:"end_txn"},xt),ii()[Eh]=0,await U0(f)}while(!xe)}).catch(Pe=>{ue.error?.(s,"Error handling subscription to node",Pe),Fr(1008,"Error handling subscription to node")});break}}return}U.position=8;let w=!0,L,q;do{ii();let W=U.readInt();if(W===9&&U.getUint8(U.position)==Q_){U.position++,y=q=U.readFloat64(),m[FC]=y,m[kC]=Date.now(),m[HC]=XV,h.send({type:"end_txn",localTime:y,remoteNodeIds:S}),ue.trace?.("received remote sequence update",y,u);break}let Q=U.position,B=At(A,Q,Q+W),Ee=cm[B.tableId];Ee||ue.error?.(`No table found with an id of ${B.tableId}`);let fe;B.residencyId&&(fe=wb[B.residencyId],ue.trace?.(s,"received residency list",fe,B.type,B.recordId));let pe=B.recordId;try{k_(()=>{L={table:Ee.name,id:B.recordId,type:B.type,nodeId:Br.get(B.nodeId),residencyList:fe,timestamp:B.version,value:B.getValue(Ee),user:B.user,beginTxn:w,expiresAt:B.expiresAt}},f?.rootStore,re=>xa(re,pe))}catch(re){throw re.message+=" record id: "+pe,re.message+=" typed structures for current decoder"+JSON.stringify(Ee.decoder.typedStructs),re.message+=" structures for current decoder"+JSON.stringify(Ee.decoder.structures),re}w=!1,ue.debug?.(s,"received replication message",B.type,"id",L.id,"version",new Date(B.version),"nodeId",L.nodeId),m[FC]=B.version,m[kC]=Date.now(),m[HC]=ZV,h.send(L),U.position=Q+W}while(U.position<A.byteLength);Ds++,u!=="system"&&Ve(A.byteLength,"bytes-received",`${g}.${u}.${L?.table||"unknown_table"}`,"replication","ingest"),Ds>Nu&&!dm&&(dm=!0,e.pause(),ue.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),h.send({type:"end_txn",localTime:y,remoteNodeIds:S,async onCommit(){if(L){let W=Date.now()-L.timestamp;u!=="system"&&Ve(W,"replication-latency",g+"."+u+"."+L.table,L.type,"ingest")}Ds--,dm&&(dm=!1,e.resume(),ue.debug?.(`Replication resuming ${g}`)),Ye.length>0&&await Promise.all(Ye),ue.trace?.("All blobs finished"),!N&&q&&(ue.trace?.(s,"queuing confirmation of a commit at",q),setTimeout(()=>{e.send((0,at.encode)([BV,N])),ue.trace?.(s,"sent confirmation of a commit at",N),N=null},Aue)),N=q,ue.debug?.("last sequence committed",new Date(q),u)}})}catch(U){ue.error?.(s,"Error handling incoming replication message",U)}}a(fm,"onWSMessage"),e.on("ping",er),e.on("pong",()=>{if(t.connection){let A=performance.now()-ee;t.connection.latency=A,ii()&&(m[dT]=A),t.isSubscriptionConnection&&Hl({name:g,database:u,url:t.url,latency:A})}ee=null}),e.on("close",(A,U)=>{clearInterval(I),clearTimeout($),clearInterval(k),Dn&&Dn.emit("close"),Lo&&Lo.end();for(let[w,{reject:L}]of R)L(new Error(`Connection closed ${U?.toString()} ${A}`));ue.debug?.(s,"closed",A,U?.toString())});function Fr(A,U){try{e.isFinished=!0,ue.debug?.(s,"closing",g,u,A,U),e.close(A,U),t.connection?.emit("finished")}catch(w){ue.error?.(s,"Error closing connection",w)}}a(Fr,"close");let Ou=new Set;async function Ua(A,U){let w=B_(A);if(Ou.has(w)){ue.debug?.("Blob already being sent",w);return}Ou.add(w);try{let L;qe++;for await(let q of A.stream())L&&(ue.debug?.("Sending blob chunk",w,"length",L.length),e.send((0,at.encode)([lT,{fileId:w,size:A.size},L]))),L=q,e._socket.writableNeedDrain&&(ue.debug?.("draining",w),await new Promise(W=>e._socket.once("drain",W)),ue.debug?.("drained",w)),Ve(q.length,"bytes-sent",`${g}.${u}`,"replication","blob");ue.debug?.("Sending final blob chunk",w,"length",L.length),e.send((0,at.encode)([lT,{fileId:w,size:A.size,finished:!0},L]))}catch(L){ue.warn?.("Error sending blob",L,"blob id",w,"for record",U),e.send((0,at.encode)([lT,{fileId:w,finished:!0,error:vC(L)},Buffer.alloc(0)]))}finally{Ou.delete(w),qe--,qe<Hi&&Ar?.()}}a(Ua,"sendBlobs");function xa(A,U){let w=B_(A),L=be.get(w);ue.debug?.("Received transaction with blob",w,"has stream",!!L,"ended",!!L?.writableEnded),L?L.writableEnded&&be.delete(w):(L=new xC.PassThrough,be.set(w,L)),L.connectedToBlob=!0,L.lastChunk=Date.now(),L.recordId=U,A.size===void 0&&L.expectedSize&&(A.size=L.expectedSize);let q=L.blob??createBlob(L,A);L.blob=q;let W=Ho(()=>Fm(q).saving,h.auditStore?.rootStore);return W&&(W.blobId=w,Ye.push(W),W.finally(()=>{ue.debug?.(`Finished receiving blob stream ${w}`),Ye.splice(Ye.indexOf(W),1)})),q}a(xa,"receiveBlobs");function mm(){if(p||(p=!0,t.connection?.on("subscriptions-updated",mm)),!f&&h&&(f=h.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let A=new Map;f||(f=h?.auditStore);try{for(let L of h?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let q of L.value.nodes||[])q.lastTxnTime>(A.get(q.id)??0)&&A.set(q.id,q.lastTxnTime)}catch(L){if(!L.message.includes("Can not re"))throw L}let U=t.connection?.nodeSubscriptions?.[0];S=[];let w=t.connection?.nodeSubscriptions.map((L,q)=>{let W=[],{replicateByDefault:Q}=L;if(L.subscriptions){for(let pe of L.subscriptions)if(pe.subscribe&&(pe.schema||pe.database)===u){let re=pe.table;E?.[re]?.replicate!==!1&&W.push(re)}Q=!1}else for(let pe in E)(Q?E[pe].replicate===!1:E[pe].replicate)&&W.push(pe);let B=f&&XS(L.name,f),Ee=h?.dbisDB?.get([Symbol.for("seq"),B])??1,fe=Math.max(Ee?.seqId??1,(typeof L.startTime=="string"?new Date(L.startTime).getTime():L.startTime)??1);if(ue.debug?.("Starting time recorded in db",L.name,B,u,Ee?.seqId,"start time:",fe,new Date(fe)),U!==L){let pe=f&&XS(U.name,f),re=h?.dbisDB?.get([Symbol.for("seq"),pe])??1;for(let ie of re?.nodes||[])ie.name===L.name&&(fe=ie.seqId,ue.debug?.("Using sequence id from proxy node",U.name,fe))}return B===void 0?ue.warn("Starting subscription request from node",L,"but no node id found"):S.push(B),A.get(B)>fe&&(fe=A.get(B),ue.debug?.("Updating start time from more recent txn recorded",U.name,fe)),fe===1&&(L.isLeader?(ue.warn?.(`Requesting full copy of database ${u} from ${L.url}`),fe=0):fe=Date.now()-6e4),ue.trace?.(s,"defining subscription request",L.name,u,new Date(fe)),{name:L.name,replicateByDefault:Q,tables:W,startTime:fe,isLeader:L.isLeader,endTime:L.endTime}});if(w)if(ue.debug?.(s,"sending subscription request",w,h?.dbisDB?.path),clearTimeout(Y),w.length>0)e.send((0,at.encode)([LV,w]));else{let L=a(()=>{let q=performance.now();Y=setTimeout(()=>{ce<=q?Fr(1008,"Connection has no subscriptions and is no longer used"):L()},j).unref()},"scheduleClose");L()}}a(mm,"sendSubscriptionRequestUpdate");function r_(A,U){if(!A)return;let w=ve[A];return w||(w=U.getResidencyRecord(A),ve[A]=w),w}a(r_,"getResidence");function Ba(A){return!(pc&&pc!="*"&&!pc[A]&&!pc.includes?.(A)&&!pc.some?.(U=>U.name===A))}a(Ba,"checkDatabaseAccess");function Yc(A){if(h=h||d.get(A),!Ba(A))throw new Error(`Access to database "${A}" is not permitted`);h||ue.warn?.(`No database named "${A}" was declared and registered`),f=h?.auditStore,E||(E=ct()?.[A]);let U=tt();if(U===g)throw U?new Error("Should not connect to self",U):new Error("Node name not defined");return Pu(U,A),!0}a(Yc,"setDatabase");function Pu(A,U){let w=ct()?.[U],L=[];for(let q in w){let W=w[q];L.push({table:q,schemaDefined:W.schemaDefined,attributes:W.attributes.map(Q=>({name:Q.name,type:Q.type,isPrimaryKey:Q.isPrimaryKey}))})}ue.trace?.("Sending database info for node",A,"database name",U),e.send((0,at.encode)([DV,A,U,L]))}a(Pu,"sendNodeDBName");function K(A){let U=ct()?.[A],w=[];for(let L in U){if(pn&&!pn.some(W=>W.replicateByDefault?!W.tables.includes(L):W.tables.includes(L)))continue;let q=U[L];w.push({table:L,schemaDefined:q.schemaDefined,attributes:q.attributes.map(W=>({name:W.name,type:W.type,isPrimaryKey:W.isPrimaryKey}))})}e.send((0,at.encode)([FV,w,A]))}a(K,"sendDBSchema"),k=setInterval(()=>{for(let[A,U]of be)U.lastChunk+ge<Date.now()&&(ue.warn?.(`Timeout waiting for blob stream to finish ${A} for record ${U.recordId??"unknown"} from ${g}`),be.delete(A),U.end())},ge).unref();let _=1,T=[];return{end(){Lo&&Lo.end(),Dn&&Dn.emit("close")},getRecord(A){let U=_++;return new Promise((w,L)=>{let q=[UV,U,A.table.tableId,A.id];T[A.table.tableId]||(q.push(A.table.tableName),T[A.table.tableId]=!0),e.send((0,at.encode)(q)),ce=performance.now(),R.set(U,{tableId:A.table.tableId,key:A.id,resolve(W){let{table:Q,entry:B}=A;if(w(W),W)return Q._recordRelocate(B,W)},reject:L})})},sendOperation(A){let U=_++;return A.requestId=U,e.send((0,at.encode)([BC,A])),new Promise((w,L)=>{R.set(U,{resolve:w,reject:L})})}};function C(A){x(5),A<128?o[c++]=A:A<16384?(l.setUint16(c,A|32768),c+=2):A<1056964608?(l.setUint32(c,A|3221225472),c+=4):(o[c]=255,l.setUint32(c+1,A),c+=5)}function P(A,U=0,w=A.length){let L=w-U;x(L),A.copy(o,c,U,w),c+=L}function O(A){x(8),l.setFloat64(c,A),c+=8}function x(A){if(A+16>o.length-c){let U=Buffer.allocUnsafeSlow(c+A-i+65536>>10<<11);o.copy(U,0,i,c),c=c-i,i=0,o=U,l=new DataView(o.buffer,0,o.length)}}function D(A,U){let w=A.database??"data";U||(U={});let L=U.schemaDefined,q=!1,W=A.schemaDefined,Q=U.attributes||[];for(let B=0;B<A.attributes?.length;B++){let Ee=A.attributes[B],fe=Q.find(pe=>pe.name===Ee.name);(!fe||fe.type!==Ee.type)&&(L?ue.error?.(`Schema for '${u}.${A.table}' is defined locally, but attribute '${Ee.name}: ${Ee.type}' from '${g}' does not match local attribute ${fe?"'"+fe.name+": "+fe.type+"'":"which does not exist"}`):(q=!0,W||(Ee.indexed=!0),fe?Q[Q.indexOf(fe)]=Ee:Q.push(Ee)))}return q?(ue.debug?.("(Re)creating",A),Xe({table:A.table,database:A.database,schemaDefined:A.schemaDefined,attributes:Q,...U})):U}}var qV,at,$V,VV,KV,GC,YV,WV,qC,zV,xC,jV,bue,vC,ue,LV,DV,vV,hh,MV,MC,UV,aT,BC,cT,xV,BV,FV,lT,QV,FC,kC,Eh,dT,HC,JV,XV,ZV,$C,hc,uT,kV,Aue,HV,UC,Xd,GV,Zd,VC=se(()=>{we();$i();SC();sI();Ss();qV=b(me());H();al();at=require("msgpackr"),$V=require("ws"),VV=require("worker_threads"),KV=b(J());fh();GC=require("events"),YV=b(ys()),WV=b(require("node:tls"));Wd();qC=b(require("node:process")),zV=require("node:net");is();ss();xC=require("node:stream"),jV=require("lmdb"),{forComponent:bue,errorToString:vC}=KV.default,ue=bue("replication").conditional,LV=129,DV=140,vV=141,hh=142,MV=130,MC=132,UV=133,aT=134,BC=136,cT=137,xV=143,BV=144,FV=145,lT=146,QV=0,FC=1,kC=2,Eh=3,dT=4,HC=5,JV=6,XV=0,ZV=1,$C=new Map,hc=new Map,uT=!0,kV=300,Aue=2,HV=3e4;a(fT,"createWebSocket");GV=500,Zd=class extends GC.EventEmitter{static{a(this,"NodeReplicationConnection")}socket;startTime;retryTime=GV;retries=0;isConnected=!0;isFinished=!1;nodeSubscriptions;latency=0;replicateTablesByDefault;session;sessionResolve;sessionReject;url;subscription;databaseName;nodeName;authorization;constructor(t,r,n,s,i){super(),this.url=t,this.subscription=r,this.databaseName=n,this.authorization=i,this.nodeName=this.nodeName??yi(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await fT(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;ue.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${qC.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),ue[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=GV,this.nodeSubscriptions&&Hl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=_h(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this,isSubscriptionConnection:this.nodeSubscriptions!==void 0},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(ue.warn?.(`Can not connect to ${this.url}, this server does not have a certificate authority for the certificate provided by ${this.url}`),n.isHandled=!0):n.code!=="ECONNREFUSED"&&(n.code==="UNABLE_TO_VERIFY_LEAF_SIGNATURE"?ue.error?.(`Can not connect to ${this.url}, the certificate provided by ${this.url} is not trusted, this node needs to be added to the cluster, or a certificate authority needs to be added`):ue.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(this.nodeSubscriptions&&jd({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.removeAllListeners("subscriptions-updated"),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();ue.warn?.(`${r?"Disconnected from":"Failed to connect to"} ${this.url} (db: "${this.databaseName}"), due to ${i?'"'+i+'" ':""}(code: ${n})`)}r=null,this.resetSession(),setTimeout(()=>{this.connect()},this.retryTime).unref(),this.retryTime+=this.retryTime>>8})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};a(_h,"replicateOverWS")});function Ec(e,t){let r=e.toString("base64"),n=[`-----BEGIN ${t}-----`];for(let s=0;s<r.length;s+=64)n.push(r.substring(s,s+64));return n.push(`-----END ${t}-----`),n.join(`
17
+ `)}function r1(e){let t=[],r=e;for(;r?.raw;){let n={cert:r.raw};if(r.issuerCertificate&&r.issuerCertificate!==r&&r.issuerCertificate.raw&&(n.issuer=r.issuerCertificate.raw),t.push(n),r.issuerCertificate&&r.issuerCertificate!==r)r=r.issuerCertificate;else break}return t}function WC(e){try{let t=$l(e),n=mo.Certificate.fromBER(t).extensions?.find(c=>c.extnID==="2.5.29.31");if(!n)return sa.debug?.("Certificate has no CRL Distribution Points extension"),[];let s=ia.fromBER(n.extnValue.valueBlock.valueHexView);if(s.offset===-1)throw new Error("Failed to parse ASN.1 structure in CRL Distribution Points extension");let i=new mo.CRLDistributionPoints({schema:s.result}),o=[];for(let c of i.distributionPoints)if(c.distributionPoint&&Array.isArray(c.distributionPoint)){for(let l of c.distributionPoint)if(l.type===6&&typeof l.value=="string"){let u=l.value;(u.startsWith("http://")||u.startsWith("https://"))&&o.push(u)}}return sa.debug?.(`Found ${o.length} CRL distribution points: ${o}`),o}catch(t){return sa.warn?.(`Failed to extract CRL distribution points: ${t}`),[]}}function n1(e){try{let t=$l(e),r=mo.Certificate.fromBER(t),n=[],s=[];for(let i of r.extensions||[])if(i.extnID==="2.5.29.31")try{let o=ia.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1){let c=new mo.CRLDistributionPoints({schema:o.result});for(let l of c.distributionPoints)if(l.distributionPoint&&Array.isArray(l.distributionPoint)){for(let u of l.distributionPoint)if(u.type===6&&typeof u.value=="string"){let d=u.value;(d.startsWith("http://")||d.startsWith("https://"))&&n.push(d)}}}}catch(o){sa.warn?.(`Failed to parse CRL Distribution Points extension: ${o}`)}else if(i.extnID==="1.3.6.1.5.5.7.1.1")try{let o=ia.fromBER(i.extnValue.valueBlock.valueHexView);if(o.offset!==-1&&o.result instanceof ia.Sequence){for(let c of o.result.valueBlock.value)if(c instanceof ia.Sequence&&c.valueBlock.value.length>=2){let l=c.valueBlock.value[0],u=c.valueBlock.value[1];if(l instanceof ia.ObjectIdentifier&&l.valueBlock.toString()==="1.3.6.1.5.5.7.48.1"&&u.idBlock.tagNumber===6){let d=String.fromCharCode(...Array.from(u.valueBlock.valueHexView));(d.startsWith("http://")||d.startsWith("https://"))&&s.push(d)}}}}catch(o){sa.warn?.(`Failed to parse Authority Information Access extension: ${o}`)}return sa.debug?.(`Found ${n.length} CRL distribution points and ${s.length} OCSP responder URLs`),{crlUrls:n,ocspUrls:s}}catch(t){return sa.warn?.(`Failed to extract revocation URLs: ${t}`),{crlUrls:[],ocspUrls:[]}}}function $l(e){let t=e.replace(/-----BEGIN [^-]+-----/g,"").replace(/-----END [^-]+-----/g,"").replace(/\s/g,""),r=atob(t),n=new ArrayBuffer(r.length),s=new Uint8Array(n);for(let i=0;i<r.length;i++)s[i]=r.charCodeAt(i);return n}function pT(e,t,r,n){let s={certPem:e,issuerPem:t,method:r,...n},i=(0,YC.createHash)("sha256").update(JSON.stringify(s)).digest("hex");return`${r}:${i}`}function zC(e,t){return`${e}:${t}`}function s1(e){try{let t=$l(e),n=mo.Certificate.fromBER(t).serialNumber.valueBlock.valueHexView;return Array.from(n).map(s=>s.toString(16).padStart(2,"0")).join("")}catch(t){throw sa.error?.(`Failed to extract serial number: ${t}`),new Error(`Failed to extract certificate serial number: ${t.message}`)}}function jC(e){try{let t=$l(e),r=mo.Certificate.fromBER(t),n=r.extensions?.find(i=>i.extnID==="2.5.29.35");if(n){let i=new mo.AuthorityKeyIdentifier({schema:n.parsedValue});if(i.keyIdentifier){let o=i.keyIdentifier.valueBlock.valueHexView;return Array.from(o).map(c=>c.toString(16).padStart(2,"0")).join("")}}let s=r.issuer.typesAndValues.map(i=>`${i.type}=${i.value.valueBlock.value}`).join(",");return(0,YC.createHash)("sha256").update(s).digest("hex")}catch(t){throw sa.error?.(`Failed to extract issuer key ID: ${t}`),new Error(`Failed to extract issuer key ID: ${t.message}`)}}function hT(){return KC||(KC=Xe({table:"hdb_certificate_cache",database:"system",attributes:[{name:"certificate_id",isPrimaryKey:!0},{name:"status"},{name:"reason"},{name:"checked_at"},{name:"expiresAt",expiresAt:!0,indexed:!0},{name:"method"}]})),KC}var YC,mo,ia,t1,sa,KC,ET=se(()=>{YC=require("node:crypto"),mo=b(require("pkijs")),ia=b(require("asn1js")),t1=b(wr());we();sa=(0,t1.loggerWithTag)("cert-verification-utils");a(Ec,"bufferToPem");a(r1,"extractCertificateChain");a(WC,"extractCRLDistributionPoints");a(n1,"extractRevocationUrls");a($l,"pemToBuffer");a(pT,"createCacheKey");a(zC,"createRevokedCertificateId");a(s1,"extractSerialNumber");a(jC,"extractIssuerKeyId");KC=null;a(hT,"getCertificateCacheTable")});function i1(e){let{error:t,value:r}=Cue.validate(e,{abortEarly:!1,allowUnknown:!1});if(t){let n=t.details.map(s=>s.message).join("; ");throw new Error(`Invalid certificate verification configuration: ${n}`)}return r}var Yr,Iue,ef,tf,QC,wue,Nue,Cue,o1=se(()=>{Yr=b(require("joi")),Iue="fail-closed",ef={timeout:5e3,cacheTtl:36e5,errorCacheTtl:3e5,failureMode:"fail-closed"},tf={timeout:1e4,cacheTtl:864e5,failureMode:"fail-closed",gracePeriod:864e5},QC=Yr.default.string().valid("fail-open","fail-closed"),wue=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...tf}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(tf.timeout).messages({"number.min":"CRL timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(tf.cacheTtl).messages({"number.min":"CRL cacheTtl must be at least 1000ms (1 second)"}),failureMode:QC.default(tf.failureMode),gracePeriod:Yr.default.number().min(0).default(tf.gracePeriod).messages({"number.min":"CRL gracePeriod must be at least 0ms"})})),Nue=Yr.default.alternatives().try(Yr.default.boolean().custom(e=>e===!1?{enabled:!1}:{enabled:!0,...ef}),Yr.default.object({enabled:Yr.default.boolean().default(!0),timeout:Yr.default.number().min(1e3).default(ef.timeout).messages({"number.min":"OCSP timeout must be at least 1000ms (1 second)"}),cacheTtl:Yr.default.number().min(1e3).default(ef.cacheTtl).messages({"number.min":"OCSP cacheTtl must be at least 1000ms (1 second)"}),errorCacheTtl:Yr.default.number().min(1e3).default(ef.errorCacheTtl).messages({"number.min":"OCSP errorCacheTtl must be at least 1000ms (1 second)"}),failureMode:QC.default(ef.failureMode)})),Cue=Yr.default.object({failureMode:QC.default(Iue),crl:wue.default({enabled:!0,...tf}),ocsp:Nue.default({enabled:!0,...ef})});a(i1,"validateAndParseCertificateVerificationConfig")});function h1(e){if(typeof e=="boolean"||e==null){if(e===JC&&XC)return po.trace?.("Using cached validation error result (primitive) - returning disabled"),!1;if(e===JC&&_T!==null)return po.trace?.("Using cached certificate verification config (primitive)"),_T;po.trace?.("Parsing and caching certificate verification config (primitive)"),JC=e;try{return _T=l1(e),XC=null,_T}catch(n){return XC=n,po.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}if(c1.get(e))return po.trace?.("Using cached validation error result (object) - returning disabled"),!1;let r=a1.get(e);if(r!==void 0)return po.trace?.("Using cached certificate verification config (object)"),r;po.trace?.("Parsing and caching certificate verification config (object)");try{let n=l1(e);return a1.set(e,n),n}catch(n){return c1.set(e,n),po.error?.(`Certificate verification config validation failed - defaulting to disabled: ${n.message}`),!1}}function l1(e){if(po.trace?.(`getCertificateVerificationConfig called with: ${JSON.stringify({mtlsConfig:e})}`),!e)return!1;let t=e===!0?void 0:e.certificateVerification;return po.trace?.(`Certificate verification config: ${JSON.stringify({verificationConfig:t})}`),t==null||t===!1?!1:i1(t===!0?{}:t)}var u1,d1,po,f1,m1,p1,a1,JC,_T,c1,XC,ZC=se(()=>{u1=b(wr()),d1=b(yt());o1();po=(0,u1.loggerWithTag)("cert-verification-config"),f1=10080*60*1e3,m1=3e5,p1=`Harper/${d1.packageJson.version} CRL-Client`,a1=new WeakMap,JC=null,_T=null,c1=new WeakMap,XC=null;a(h1,"getCachedCertificateVerificationConfig");a(l1,"getCertificateVerificationConfig")});function gh(e){return e===_1||e===Oue}function Pue(e){return e===g1||e===S1}function eO(e){return e===_1?g1:S1}function Lue(){if(E1)return;E1=!0;let e=Vl.CryptoEngine.prototype,t=Vl.Certificate.prototype,r={getHashAlgorithm:e.getHashAlgorithm,getAlgorithmByOID:e.getAlgorithmByOID,getAlgorithmParameters:e.getAlgorithmParameters,verifyWithPublicKey:e.verifyWithPublicKey,certificateVerify:t.verify,getPublicKey:t.getPublicKey};e.getHashAlgorithm=function(...n){let[s]=n;return gh(s.algorithmId)?"UNUSED-EDDSA-BUILTIN-HASH":r.getHashAlgorithm.call(this,s)},e.getAlgorithmByOID=function(...n){let[s]=n;return gh(s)?{name:eO(s)}:r.getAlgorithmByOID.call(this,...n)},e.getAlgorithmParameters=function(...n){let[s,i]=n;return Pue(s)?{algorithm:{name:s},usages:i==="sign"?["sign"]:["verify"]}:r.getAlgorithmParameters.call(this,...n)},t.getPublicKey=async function(...n){let[,s=Vl.getCrypto(!0)]=n,i=this.subjectPublicKeyInfo.algorithm.algorithmId;if(gh(i)){let o=eO(i);return s.importKey("spki",this.subjectPublicKeyInfo.toSchema().toBER(!1),o,!0,["verify"])}return r.getPublicKey.call(this,...n)},t.verify=async function(...n){let[s]=n;if(gh(this.signatureAlgorithm.algorithmId))try{let i=this.toSchema().toBER(!1),o=s.toSchema().toBER(!1),c=new Sh.X509Certificate(Buffer.from(i)),l=new Sh.X509Certificate(Buffer.from(o));return c.verify(l.publicKey)}catch{return!1}return r.certificateVerify.call(this,...n)},r.verifyWithPublicKey&&(e.verifyWithPublicKey=async function(...n){let[s,i,o]=n,c=o.algorithm.algorithmId;if(gh(c)){let l=eO(c);try{let u=this.crypto?.subtle||this.subtle||Vl.getCrypto(!0)?.subtle||Sh.webcrypto?.subtle;if(!u)throw new Error("No crypto.subtle available");let d=await u.importKey("spki",o.toSchema().toBER(!1),l,!1,["verify"]),f=i.valueBlock.valueHexView;return"unusedBits"in i.valueBlock&&i.valueBlock.unusedBits>0&&(f=f.slice(0,f.length-1)),await u.verify(l,d,f,s)}catch{return!1}}return r.verifyWithPublicKey.call(this,...n)})}var Vl,Sh,_1,Oue,g1,S1,E1,T1=se(()=>{Vl=b(require("pkijs")),Sh=require("node:crypto"),_1="1.3.101.112",Oue="1.3.101.113",g1="Ed25519",S1="Ed448",E1=!1;a(gh,"isEd25519OrEd448");a(Pue,"isEdDSAAlgorithmName");a(eO,"getEdDSAAlgorithmName");a(Lue,"applyEd25519Patch");Lue()});var A1={};ye(A1,{CRLSignatureVerificationError:()=>Th,performCRLCheck:()=>Mue,verifyCRL:()=>nO});function Due(){return gT||(gT=hT(),gT.sourcedFrom(rf)),gT}function vue(){return ST||(ST=Xe({table:"hdb_crl_cache",database:"system",attributes:[{name:"distribution_point",isPrimaryKey:!0},{name:"issuer_dn"},{name:"crl_blob"},{name:"this_update"},{name:"next_update"},{name:"signature_valid"},{name:"expiresAt",expiresAt:!0,indexed:!0}]}),ST.sourcedFrom(rO)),ST}function R1(){return tO||(tO=Xe({table:"hdb_revoked_certificates",database:"system",attributes:[{name:"composite_id",isPrimaryKey:!0},{name:"serial_number",indexed:!0},{name:"issuer_key_id",indexed:!0},{name:"revocation_date"},{name:"revocation_reason"},{name:"crl_source",indexed:!0},{name:"crl_next_update"},{name:"expiresAt",expiresAt:!0,indexed:!0}]})),tO}async function nO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ec(e,"CERTIFICATE"),i=Ec(t,"CERTIFICATE"),o=n??WC(s);if(o.length===0)return{valid:!0,status:"no-crl-distribution-points",method:"crl"};let c=pT(s,i,"crl"),l=await Due().get(c,{certPem:s,issuerPem:i,distributionPoint:o[0],config:{crl:r??{}}});if(!l)return Pr.error?.("Cache fetch returned null - this indicates a source configuration issue"),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"crl"}:(Pr.warn?.("CRL cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"});let u=l,d=l.wasLoadedFromSource?.();return Pr.trace?.(`CRL ${d?"source fetch":"cache hit"} for certificate`),{valid:u.status==="good",status:u.status,cached:!d,method:u.method||"crl"}}catch(s){return Pr.error?.(`CRL verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"crl"}:(Pr.warn?.("CRL check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"crl"})}}async function Mue(e,t,r,n){let s=n??WC(e);if(s.length===0)return{status:"good"};let i=s1(e),o=jC(t),c=zC(o,i);try{let u=await R1().get(c);if(u){let f=Date.now(),m=u;return m.crl_next_update>f?{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}:m.crl_next_update+r.gracePeriod>f?(Pr.warn?.("Using expired CRL data within grace period"),{status:"revoked",reason:m.revocation_reason||"unspecified",source:m.crl_source}):(Pr.warn?.("CRL data is too old, treating as unknown"),{status:"unknown",reason:"crl-expired"})}let d=await Uue(s,t,r);return d.upToDate?{status:"good",source:d.source}:(Pr.warn?.("CRL data is stale or missing, treating as unknown"),{status:"unknown",reason:d.reason||"crl-unavailable"})}catch(l){return Pr.error?.(`CRL lookup error: ${l}`),{status:"unknown",reason:l.message}}}async function Uue(e,t,r){let n=Date.now();for(let s of e)try{let i=vue(),o=null,c=null;try{c=await i.get(s),(c&&c.next_update>n||c&&c.next_update+r.gracePeriod>n)&&(o=c)}catch{}o||(o=await b1(s,t,r.timeout));let l=o.next_update;if(l>n){if(!c)try{await i.put(s,o)}catch{}return{upToDate:!0,source:s}}else return l+r.gracePeriod>n?{upToDate:!0,source:s}:{upToDate:!1,reason:"crl-expired"}}catch(i){if(i instanceof Th)throw i}return{upToDate:!1,reason:"no-current-crl-data"}}async function b1(e,t,r){let n=new AbortController,s=setTimeout(()=>n.abort(),r);try{let i=await fetch(e,{signal:n.signal,headers:{"User-Agent":p1}});if(clearTimeout(s),!i.ok)throw new Error(`CRL download failed: ${i.status}`);let o=Buffer.from(await i.arrayBuffer()),c,l=o.toString("utf8");l.includes("-----BEGIN X509 CRL-----")?c=Buffer.from($l(l)):c=o;let u=TT.CertificateRevocationList.fromBER(c),d=TT.Certificate.fromBER($l(t)),f=await u.verify({issuerCertificate:d});if(!f){let g=`CRL signature verification failed for: ${e}`;throw Pr.error?.(g),new Th(g)}let m=u.thisUpdate.value.getTime(),p=u.nextUpdate?.value.getTime()??m+f1,h=d.issuer.typesAndValues.map(g=>`${g.type}=${g.value.valueBlock.value}`).join(","),E={distribution_point:e,issuer_dn:h,crl_blob:o,this_update:m,next_update:p,signature_valid:f,expiresAt:p};return xue(u,t,e,p).catch(g=>{Pr.error?.(`Error processing revoked certificates: ${g}`)}),E}finally{clearTimeout(s)}}async function xue(e,t,r,n){let s=R1(),i=jC(t),o=r;try{await Bue(s,o)}catch(c){Pr.warn?.(`Failed to clear existing CRL entries: ${c}`)}if(e.revokedCertificates)for(let c of e.revokedCertificates)try{let l=c.userCertificate.valueBlock.valueHexView;if(!l){Pr.warn?.("Could not extract serial number from revoked certificate");continue}let u=Array.from(l).map(h=>h.toString(16).padStart(2,"0")).join(""),d=zC(i,u),f=c.revocationDate.value.getTime(),p={composite_id:d,serial_number:u,issuer_key_id:i,revocation_date:f,revocation_reason:"unspecified",crl_source:o,crl_next_update:n,expiresAt:n};await s.create(p.composite_id,p)}catch(l){Pr.warn?.(`Failed to process revoked certificate: ${l}`)}}async function Bue(e,t){try{let r=e.search([{attribute:"crl_source",value:t}]);for await(let n of r)try{await e.delete(n.composite_id)}catch(s){Pr.warn?.(`Failed to delete revoked certificate entry: ${s}`)}}catch(r){throw Pr.error?.(`Failed to search for existing CRL entries: ${r}`),r}}var TT,y1,Th,Pr,gT,rO,ST,tO,sO=se(()=>{TT=b(require("pkijs")),y1=b(wr());we();Vo();ET();ZC();iO();Th=class extends Error{static{a(this,"CRLSignatureVerificationError")}constructor(t){super(t),this.name="CRLSignatureVerificationError"}},Pr=(0,y1.loggerWithTag)("crl-verification");a(Due,"getCertificateCacheTable");rO=class extends lr{static{a(this,"CertificateRevocationListSource")}async get(t){let n=this.getContext()?.requestContext;if(!n?.distributionPoint||!n?.issuerPem)throw new Error(`No CRL data provided for cache key: ${t}`);let{distributionPoint:s,issuerPem:i,config:o}=n;try{let c=await b1(s,i,o.timeout),l=c.next_update,u=Date.now()+o.cacheTtl,d=Math.min(l,u);return{...c,expiresAt:d}}catch(c){if(Pr.error?.(`CRL fetch error for: ${s} - ${c}`),o.failureMode==="fail-closed"){let l=Date.now()+m1;return{crl_id:t,distribution_point:s,issuer_dn:"unknown",crl_blob:Buffer.alloc(0),this_update:Date.now(),next_update:l,signature_valid:!1,expiresAt:l}}return Pr.warn?.("CRL fetch failed, not caching (fail-open mode)"),null}}};a(vue,"getCRLCacheTable");a(R1,"getRevokedCertificateTable");a(nO,"verifyCRL");a(Mue,"performCRLCheck");a(Uue,"checkCRLFreshness");a(b1,"downloadAndParseCRL");a(xue,"processRevokedCertificates");a(Bue,"clearExistingCRLEntries")});async function Fue(){oO||(oO=(await Promise.resolve().then(()=>(sO(),A1))).performCRLCheck),aO||(aO=(await Promise.resolve().then(()=>(cO(),w1))).performOCSPCheck)}var I1,Qxe,oO,aO,rf,iO=se(()=>{Vo();I1=b(wr()),Qxe=(0,I1.loggerWithTag)("cert-verification-source");a(Fue,"loadVerificationFunctions");rf=class extends lr{static{a(this,"CertificateVerificationSource")}async get(t){let r=t.id,s=this.getContext()?.requestContext;if(!s||!s.certPem||!s.issuerPem)return null;let{certPem:i,issuerPem:o,ocspUrls:c,config:l}=s,u;r.startsWith("crl:")?u="crl":r.startsWith("ocsp:")?u="ocsp":u="unknown",await Fue();let d,f;if(u==="crl"){f=l.crl;let p=s.distributionPoint?[s.distributionPoint]:void 0;d=await oO(i,o,f,p)}else if(u==="ocsp")f=l.ocsp,d=await aO(i,o,f,c);else throw new Error(`Unsupported verification method: ${u} for ID: ${r}`);let m=Date.now()+f.cacheTtl;return{certificate_id:r,status:d.status,reason:d.reason,checked_at:Date.now(),expiresAt:m,method:u}}}});var w1={};ye(w1,{performOCSPCheck:()=>Hue,verifyOCSP:()=>lO});function kue(){return RT||(RT=hT(),RT.sourcedFrom(rf)),RT}async function lO(e,t,r,n){if(r?.enabled===!1)return{valid:!0,status:"disabled",method:"disabled"};try{let s=Ec(e,"CERTIFICATE"),i=Ec(t,"CERTIFICATE"),o=pT(s,i,"ocsp"),c=await kue().get(o,{certPem:s,issuerPem:i,ocspUrls:n,config:{ocsp:r??{}}});if(!c)return r.failureMode==="fail-closed"?{valid:!1,status:"error",error:"Cache fetch failed",method:"ocsp"}:(yT.warn?.("OCSP cache fetch failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"});let l=c,u=c.wasLoadedFromSource?.();return yT.trace?.(`OCSP ${u?"source fetch":"cache hit"} for certificate`),{valid:l.status==="good",status:l.status,cached:!u,method:l.method||"ocsp"}}catch(s){return yT.error?.(`OCSP verification error: ${s}`),r.failureMode==="fail-closed"?{valid:!1,status:"error",error:s.message,method:"ocsp"}:(yT.warn?.("OCSP check failed, allowing connection (fail-open mode)"),{valid:!0,status:"error-allowed",method:"ocsp"})}}async function Hue(e,t,r,n){try{let s=await(0,N1.getCertStatus)(e,{ca:t,timeout:r.timeout,...n?.length&&{ocspUrl:n[0]}});switch(s.status){case"good":return{status:"good"};case"revoked":return{status:"revoked",reason:s.revocationReason?.toString()||"unspecified"};default:return{status:"unknown",reason:"unknown-status"}}}catch(s){return{status:"unknown",reason:s.name==="AbortError"?"timeout":"ocsp-error"}}}var N1,C1,yT,RT,cO=se(()=>{T1();N1=require("easy-ocsp"),C1=b(wr());ET();iO();yT=(0,C1.loggerWithTag)("ocsp-verification");a(kue,"getCertificateCacheTable");a(lO,"verifyOCSP");a(Hue,"performOCSPCheck")});async function nf(e,t){an.debug?.(`verifyCertificate called for: ${e.subject?.CN||"unknown"}`);let r=h1(t);if(r===!1)return an.debug?.("Certificate verification disabled"),{valid:!0,status:"disabled",method:"disabled"};let n=r1(e);if(an.trace?.(`Certificate chain length: ${n.length}`),n.length<2||!n[0].issuer)return an.debug?.("Certificate chain insufficient for revocation checking - need certificate and issuer"),{valid:!0,status:"no-issuer-cert",method:"disabled"};let s=Ec(n[0].cert,"CERTIFICATE"),{crlUrls:i,ocspUrls:o}=n1(s);if(an.debug?.(`Certificate extensions: CRL distribution points=${i.length}, OCSP URLs=${o.length}`),i.length>0)if(r.crl.enabled)try{an.debug?.("Attempting CRL verification");let c=await nO(n[0].cert,n[0].issuer,r.crl,i);if(c.status==="good"||c.status==="revoked")return an.debug?.(`CRL verification result: ${c.status}`),c;an.debug?.(`CRL verification inconclusive: ${c.status}, trying OCSP fallback`)}catch(c){an.warn?.(`CRL verification failed: ${c}`)}else an.debug?.("Skipping CRL - disabled in configuration");else an.debug?.("Skipping CRL - no distribution points in certificate");if(o.length>0)if(r.ocsp.enabled)try{an.debug?.("Attempting OCSP verification");let c=await lO(n[0].cert,n[0].issuer,r.ocsp,o);return an.debug?.(`OCSP verification result: ${c.status}`),c}catch(c){an.warn?.(`OCSP verification failed: ${c}`)}else an.debug?.("Skipping OCSP - disabled in configuration");else an.debug?.("Skipping OCSP - no responder URLs in certificate");return r.failureMode==="fail-closed"?{valid:!1,status:"no-verification-available",method:"disabled"}:{valid:!0,status:"verification-unavailable-allowed",method:"disabled"}}var O1,an,bT=se(()=>{O1=b(wr());ET();ZC();cO();sO();an=(0,O1.loggerWithTag)("cert-verification");a(nf,"verifyCertificate")});var ra={};ye(ra,{buildReplicationMtlsConfig:()=>F1,clearThisNodeName:()=>jue,disableReplication:()=>Vue,enabledDatabases:()=>pc,forEachReplicatedDatabase:()=>lc,getThisNodeId:()=>mT,getThisNodeName:()=>tt,getThisNodeUrl:()=>uc,hostnameToUrl:()=>NT,lastTimeInAuditStore:()=>ah,monitorNodeCAs:()=>k1,replicateOperation:()=>Jue,replicationCertificateAuthorities:()=>na,sendOperationToNode:()=>yh,servers:()=>que,setReplicator:()=>G1,start:()=>$ue,startOnMainThread:()=>TC,subscribeToNode:()=>dh,unsubscribeFromNode:()=>tT,urlToNodeName:()=>yi});function F1(e){return e?.mtls&&typeof e.mtls=="object"?e.mtls:!0}function $ue(e){if(!e.port&&!e.securePort&&(e.port=Ys.default.get(F.OPERATIONSAPI_NETWORK_PORT),e.securePort=Ys.default.get(F.OPERATIONSAPI_NETWORK_SECUREPORT)),!tt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let i of lh(e))t.set(yi(i.url),i);Kue(e);let r=F1(e);e={isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e,mtls:r};let n=Be.ws(async(i,o,c,l)=>{if(It.debug("Incoming WS connection received "+o.url),o.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return l(i,o,c);i._socket.unref(),_h(i,e,c.then(()=>o?.user)),i.on("error",u=>{u.code!=="ECONNREFUSED"&&It.error("Error in connection to "+this.url,u.message)})},e);e.runFirst=!0,Be.http(async(i,o)=>{if(i.isWebSocket&&i.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){It.debug("Incoming replication WS connection received, authorized: "+i.authorized),!i.authorized&&i._nodeRequest.socket.authorizationError&&It.error(`Incoming client connection from ${i.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,i._nodeRequest.socket.authorizationError);let c=Ht().primaryStore;if(i.authorized&&i.peerCertificate.subjectaltname){let l=(0,x1.getHostnamesFromCertificate)(i.peerCertificate),u;for(let d of l)if(u=d&&(c.get(d)||t.get(d)),u)break;if(u){let d=await nf(i.peerCertificate,e.mtls);if(!d.valid){It.warn("Certificate verification failed:",d.status,"for node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}if(u?.revoked_certificates?.includes(i.peerCertificate.serialNumber)){It.warn("Revoked certificate used in attempt to connect to node",u.name,"certificate serial number",i.peerCertificate.serialNumber);return}else i.user=u}else It.warn(`No node found for certificate common name/SANs: ${l}, available nodes are ${Array.from(c.getRange({}).filter(({value:d})=>d).map(({key:d})=>d)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let l=c.get(i.ip)||t.get(i.ip);l?i.user=l:It.warn(`No node found for IP address ${i.ip}, available nodes are ${Array.from(new Set([...c.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return o(i)},e);let s=[];for(let i of n)if(i.secureContexts){let o=a(()=>{let c=new Set(i.secureContexts.values());i.defaultContext&&c.add(i.defaultContext);for(let l of c)try{let u=Array.from(na);l.options.availableCAs&&u.push(...l.options.availableCAs.values());let d={...l.options,ca:u};l.updatedContext=wT.createSecureContext(d)}catch(u){It.error("Error creating replication TLS config",u)}},"updateContexts");i.secureContextsListeners.push(o),s.push(o),Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1&&o()}k1(()=>{for(let i of s)i()})}function k1(e){let t=0;Yd(r=>{r?.ca&&(na.add(r.ca),na.size!==t&&(t=na.size,e?.()))})}function Vue(e=!0){B1=e}function Kue(e){B1||(ct(),pc=e.databases,lc(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||hc;for(let[s,i]of IT){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];G1(r,s,e),$C.get(s)?.forEach(i=>i(s))}}))}function G1(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 H1 extends lr{static{a(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||hc,o=i.get(e),c=o?.tableById||[];c[t.tableId]=t;let l=o?.ready;if(It.trace("Setting up replicator subscription to database",e),!o?.auditStore)return this.subscription=o=new ns,i.set(e,o),o.tableById=c,o.auditStore=t.auditStore,o.dbisDB=t.dbisDB,o.databaseName=e,l&&l(o),o;this.subscription=o}static subscribeOnThisThread(i,o){return!0}static async load(i){if(i){let o=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),o]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let h of c){if(u.has(h)||h===Be.hostname)continue;let E=Wue(h,H1.subscription,e);if(E?.isConnected){let g=Kd(t.auditStore,e,h)[dT];(!d||g<m)&&(d=E,f=h,m=g)}}if(!d)throw l||new M1.ServerError(`No connection to any other nodes are available: ${c}`,502);let p={requestId:Gue++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(p)}catch(h){if(d.isConnected)throw h;It.warn("Error in load from node",Kl,h),l||(l=h)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function Yue(e,t,r,n,s,i){let o=t+"-"+e,c=IT.get(o);c||(c=new Map,IT.set(o,c));let l=c.get(n);if(l)return l;if(r)return c.set(n,l=new Zd(t,r,n,s,i)),l.connect(),l.once("finished",()=>c.delete(n)),l}function Wue(e,t,r){let n=P1.get(Kl);n||(n=new Map,P1.set(Kl,n));let s=n.get(r);if(s)return s;let i=Ht().primaryStore.get(e);return i?.url&&(s=new Zd(i.url,t,r,Kl,i.authorization),n.set(r,s),s.connect(),s.once("finished",()=>n.delete(r))),s}async function yh(e,t,r){r||(r={}),r.serverName=e.name;let n=await fT(e.url,r),s=_h(n,{},{});return new Promise((i,o)=>{n.on("open",()=>{It.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{o(c)}),n.on("close",c=>{It.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function dh(e){try{U1.isMainThread&&It.warn("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=hc.get(e.database);if(!t){let n;t=new Promise(s=>{It.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,hc.set(e.database,t)}let r=Yue(e.nodes[0].url,e.url,t,e.database,e.name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>ch(n,e.database)),e.replicateByDefault)}catch(t){It.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function tT({url:e,nodes:t,database:r}){It.trace("Unsubscribing from node",e,r,"nodes",Array.from(Ht().primaryStore.getRange({})));let n=e+"-"+(t[0]?.url??e),s=IT.get(n);if(s){let i=s.get(r);i&&(i.unsubscribe(),s.delete(r))}}function zue(){if(uO!==void 0)return uO;let e=Ys.default.get(F.OPERATIONSAPI_TLS_CERTIFICATE)||Ys.default.get(F.TLS_CERTIFICATE);if(e)return uO=new D1.X509Certificate((0,v1.readFileSync)(e)).subject?.match(/CN=(.*)/)?.[1]??null}function tt(){return Kl||(Kl=Ys.default.get("replication_hostname")??yi(Ys.default.get("replication_url"))??zue()??L1("operationsapi_network_secureport")??L1("operationsapi_network_port")??"127.0.0.1")}function jue(){Kl=void 0}function L1(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function AT(e){let t=Ys.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function mT(e){return oh(e)?.[tt()]}function uc(){let e=Ys.default.get("replication_url");return e||NT(tt())}function NT(e){let t=AT("replication_port");if(t)return`ws://${e}:${t}`;if(t=AT("replication_secureport"),t)return`wss://${e}:${t}`;if(t=AT("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=AT("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function yi(e){if(e)return new URL(e).hostname}function lc(e,t){for(let n of Object.getOwnPropertyNames(Me))r(n);return jp(n=>{r(n)}),Bl((n,s)=>{r(n.databaseName)});function r(n){let s=Me[n];It.trace("Checking replication status of ",n,e?.databases),e?.databases===void 0||e.databases==="*"||e.databases.includes(n)||e.databases.some?.(i=>i.name===n)||!s?t(s,n,!0):Que(n)&&t(s,n,!1)}a(r,"forDatabase")}function Que(e){let t=Me[e];for(let r in t)if(t[r].replicate)return!0}function ah(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function Jue(e){let t={message:""};if(e.replicated){e.replicated=!1,It.trace?.("Replicating operation",e.operation,"to nodes",Be.nodes.map(n=>n.name));let r=await Promise.allSettled(Be.nodes.map(n=>yh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=Be.nodes[s]?.name,i})}return t}var Ys,It,D1,v1,wT,M1,U1,x1,B1,Gue,que,na,pc,IT,P1,uO,Kl,Ss=se(()=>{we();Vo();Uu();VC();Hr();Ys=b(me()),It=b(J()),D1=require("crypto");bT();v1=require("fs");fh();Wd();H();SC();wT=b(require("node:tls")),M1=b(_e()),U1=require("worker_threads"),x1=b(ys()),Gue=1,que=[],na=Ys.default.get(F.REPLICATION_ENABLEROOTCAS)!==!1?new Set(wT.rootCertificates):new Set;a(F1,"buildReplicationMtlsConfig");a($ue,"start");a(k1,"monitorNodeCAs");a(Vue,"disableReplication");a(Kue,"assignReplicationSource");a(G1,"setReplicator");IT=new Map;a(Yue,"getSubscriptionConnection");P1=new Map;a(Wue,"getRetrievalConnectionByName");a(yh,"sendOperationToNode");a(dh,"subscribeToNode");a(tT,"unsubscribeFromNode");a(zue,"getCommonNameFromCert");a(tt,"getThisNodeName");a(jue,"clearThisNodeName");Object.defineProperty(Be,"hostname",{get(){return tt()}});a(L1,"getHostFromListeningPort");a(AT,"getPortFromListeningPort");a(mT,"getThisNodeId");Be.replication={getThisNodeId:mT,exportIdMapping:oh};a(uc,"getThisNodeUrl");a(NT,"hostnameToUrl");a(yi,"urlToNodeName");a(lc,"forEachReplicatedDatabase");a(Que,"hasExplicitlyReplicatedTable");a(ah,"lastTimeInAuditStore");a(Jue,"replicateOperation")});var DT=M((T0e,Y1)=>{"use strict";var sf=z$(),{validateBySchema:Rh}=mt(),{commonValidators:of,schemaRegex:dO}=Qi(),Er=require("joi"),Xue=J(),Zue=require("uuid").v4,PT=Wo(),af=(H(),v(z)),ede=require("util"),_c=fs(),{handleHDBError:oa,hdbErrors:tde,ClientError:Yl}=_e(),{HDB_ERROR_MSGS:CT,HTTP_STATUS_CODES:aa}=tde,{SchemaEventMsg:LT}=ls(),q1=_r(),{getDatabases:rde}=(we(),v(ft)),{transformReq:cf}=oe(),{replicateOperation:$1}=(Ss(),v(ra)),{cleanupOrphans:nde}=(ss(),v(H_)),OT=Er.string().min(1).max(of.schema_length.maximum).pattern(dO).messages({"string.pattern.base":"{:#label} "+of.schema_format.message}),sde=Er.string().min(1).max(of.schema_length.maximum).pattern(dO).messages({"string.pattern.base":"{:#label} "+of.schema_format.message}).required(),ide=Er.string().min(1).max(of.schema_length.maximum).pattern(dO).messages({"string.pattern.base":"{:#label} "+of.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();Y1.exports={createSchema:ode,createSchemaStructure:V1,createTable:ade,createTableStructure:K1,createAttribute:fde,dropSchema:cde,dropTable:lde,dropAttribute:ude,getBackup:mde,cleanupOrphanBlobs:pde};async function ode(e){let t=await V1(e);return PT.signalSchemaChange(new LT(process.pid,e.operation,e.schema)),t}a(ode,"createSchema");async function V1(e){let t=Rh(e,Er.object({database:OT,schema:OT}));if(t)throw new Yl(t.message);if(cf(e),!await sf.checkSchemaExists(e.schema))throw oa(new Error,CT.SCHEMA_EXISTS_ERR(e.schema),aa.BAD_REQUEST,af.LOG_LEVELS.ERROR,CT.SCHEMA_EXISTS_ERR(e.schema),!0);return await _c.createSchema(e),`database '${e.schema}' successfully created`}a(V1,"createSchemaStructure");async function ade(e){return cf(e),e.hash_attribute=e.primary_key??e.hash_attribute,await K1(e)}a(ade,"createTable");async function K1(e){let t=Rh(e,Er.object({database:OT,schema:OT,table:sde,residence:Er.array().items(Er.string().min(1)).optional(),hash_attribute:ide}));if(t)throw new Yl(t.message);if(!await sf.checkSchemaTableExists(e.schema,e.table))throw oa(new Error,CT.TABLE_EXISTS_ERR(e.schema,e.table),aa.BAD_REQUEST,af.LOG_LEVELS.ERROR,CT.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Zue(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await _c.createTable(n,e);else throw oa(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",aa.BAD_REQUEST);else await _c.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(K1,"createTableStructure");async function cde(e){let t=Rh(e,Er.object({database:Er.string(),schema:Er.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Yl(t.message);cf(e);let r=await sf.checkSchemaExists(e.schema);if(r)throw oa(new Error,r,aa.NOT_FOUND,af.LOG_LEVELS.ERROR,r,!0);let n=await sf.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await _c.dropSchema(e),PT.signalSchemaChange(new LT(process.pid,e.operation,e.schema)),await q1.purgeSchemaTableStreams(e.schema,s);let i=await $1(e);return i.message=`successfully deleted '${e.schema}'`,i}a(cde,"dropSchema");async function lde(e){let t=Rh(e,Er.object({database:Er.string(),schema:Er.string(),table:Er.string().required()}));if(t)throw new Yl(t.message);cf(e);let r=await sf.checkSchemaTableExists(e.schema,e.table);if(r)throw oa(new Error,r,aa.NOT_FOUND,af.LOG_LEVELS.ERROR,r,!0);await _c.dropTable(e),await q1.purgeTableStream(e.schema,e.table);let n=await $1(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}a(lde,"dropTable");async function ude(e){let t=Rh(e,Er.object({database:Er.string(),schema:Er.string(),table:Er.string().required(),attribute:Er.string().required()}));if(t)throw new Yl(t.message);cf(e);let r=await sf.checkSchemaTableExists(e.schema,e.table);if(r)throw oa(new Error,r,aa.NOT_FOUND,af.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw oa(new Error,"You cannot drop a hash attribute",aa.BAD_REQUEST,void 0,void 0,!0);if(af.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw oa(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,aa.BAD_REQUEST,void 0,void 0,!0);try{return await _c.dropAttribute(e),dde(e),PT.signalSchemaChange(new LT(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw Xue.error(`Got an error deleting attribute ${ede.inspect(e)}.`),n}}a(ude,"dropAttribute");function dde(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(dde,"dropAttributeFromGlobal");async function fde(e){cf(e);let t=rde()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw oa(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,aa.BAD_REQUEST,void 0,void 0,!0);return await _c.createAttribute(e),PT.signalSchemaChange(new LT(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(fde,"createAttribute");function mde(e){return _c.getBackup(e)}a(mde,"getBackup");function pde(e){if(!e.database)throw new Yl('Must provide "database" name for search for orphaned blobs');if(!databases[e.database])throw new Yl(`Unknown database '${e.database}'`);return nde(databases[e.database]),{message:"Orphaned blobs cleanup started, check logs for progress"}}a(pde,"cleanupOrphanBlobs")});var z1=M((R0e,W1)=>{"use strict";var{OPERATIONS_ENUM:hde}=(H(),v(z)),fO=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=hde.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};W1.exports=fO});var mO=M((I0e,Z1)=>{"use strict";var Ede=fs(),A0e=z1(),vT=oe(),MT=(H(),v(z)),_de=me(),{handleHDBError:j1,hdbErrors:gde}=_e(),{HDB_ERROR_MSGS:Q1,HTTP_STATUS_CODES:J1}=gde,Sde=Object.values(MT.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),X1="To use this operation audit log must be enabled in harperdb-config.yaml";Z1.exports=Tde;async function Tde(e){if(vT.isEmpty(e.schema))throw new Error(Q1.SCHEMA_REQUIRED_ERR);if(vT.isEmpty(e.table))throw new Error(Q1.TABLE_REQUIRED_ERR);if(!_de.get(MT.CONFIG_PARAMS.LOGGING_AUDITLOG))throw j1(new Error,X1,J1.BAD_REQUEST,MT.LOG_LEVELS.ERROR,X1,!0);let t=vT.checkSchemaTableExist(e.schema,e.table);if(t)throw j1(new Error,t,J1.NOT_FOUND,MT.LOG_LEVELS.ERROR,t,!0);if(!vT.isEmpty(e.search_type)&&Sde.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Ede.readAuditLog(e)}a(Tde,"readAuditLog")});var tK=M((N0e,eK)=>{"use strict";var{OPERATIONS_ENUM:yde}=(H(),v(z)),pO=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=yde.GET_BACKUP,this.schema=t,this.table=r}};eK.exports=pO});var sK=M((L0e,nK)=>{"use strict";var Rde=fs(),O0e=tK(),hO=oe(),bde=(H(),v(z)),P0e=me(),{handleHDBError:Ade,hdbErrors:Ide}=_e(),{HDB_ERROR_MSGS:rK,HTTP_STATUS_CODES:wde}=Ide;nK.exports=Nde;async function Nde(e){if(hO.isEmpty(e.schema))throw new Error(rK.SCHEMA_REQUIRED_ERR);if(hO.isEmpty(e.table))throw new Error(rK.TABLE_REQUIRED_ERR);let t=hO.checkSchemaTableExist(e.schema,e.table);if(t)throw Ade(new Error,t,wde.NOT_FOUND,bde.LOG_LEVELS.ERROR,t,!0);return await Rde.getBackup(readAuditLogObject)}a(Nde,"getBackup")});var cK=M((v0e,aK)=>{"use strict";var Cde=me(),gc=require("joi"),Ode=mt(),iK=require("moment"),Pde=require("fs-extra"),EO=require("path"),Lde=require("lodash"),bh=(H(),v(z)),{LOG_LEVELS:Wl}=(H(),v(z)),Dde="YYYY-MM-DD hh:mm:ss",vde=EO.resolve(__dirname,"../logs");aK.exports=function(e){return Ode.validateBySchema(e,Mde)};var Mde=gc.object({from:gc.custom(oK),until:gc.custom(oK),level:gc.valid(Wl.NOTIFY,Wl.FATAL,Wl.ERROR,Wl.WARN,Wl.INFO,Wl.DEBUG,Wl.TRACE),order:gc.valid("asc","desc"),limit:gc.number().min(1),start:gc.number().min(0),log_name:gc.custom(Ude)});function oK(e,t){if(iK(e,iK.ISO_8601).format(Dde)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(oK,"validateDatetime");function Ude(e,t){if(Lde.invert(bh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Cde.get(bh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?bh.LOG_NAMES.HDB:e,i=s===bh.LOG_NAMES.INSTALL?EO.join(vde,bh.LOG_NAMES.INSTALL):EO.join(n,s);return Pde.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Ude,"validateReadLogPath")});var gO=M((U0e,uK)=>{"use strict";var UT=(H(),v(z)),xde=J(),Bde=me(),Fde=cK(),_O=require("path"),lK=require("fs-extra"),{once:kde}=require("events"),{handleHDBError:Hde,hdbErrors:Gde}=_e(),{PACKAGE_ROOT:qde}=yt(),{replicateOperation:$de}=(Ss(),v(ra)),Vde=_O.join(qde,"logs"),Kde=1e3,Yde=200;uK.exports=Wde;async function Wde(e){let t=Fde(e);if(t)throw Hde(t,t.message,Gde.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=$de(e),n=Bde.get(UT.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?UT.LOG_NAMES.HDB:e.log_name,i=s===UT.LOG_NAMES.INSTALL?_O.join(Vde,UT.LOG_NAMES.INSTALL):_O.join(n,s),o=e.level!==void 0,c=o?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?Kde:e.limit,p=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,E=h+m,g=0;p==="desc"&&!u&&!f&&(g=Math.max(lK.statSync(i).size-(E+5)*Yde,0));let R=lK.createReadStream(i,{start:g});R.on("error",G=>{xde.error(G)});let S=0,y=[],N="",I;R.on("data",G=>{let k=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=N+G;let j=0,Y;for(;(Y=k.exec(G))&&!R.destroyed;){I&&(I.message=G.slice(j,Y.index),$(I));let[ce,de,te]=Y,ge=te.split("] ["),be=ge[0],Ye=ge[1];ge.splice(0,2),I={timestamp:de,thread:be,level:Ye,tags:ge,message:""},j=Y.index+ce.length}N=G.slice(j)}),R.on("end",G=>{R.destroyed||I&&(I.message=N.trim(),$(I))}),R.resume();function $(G){let k,j,Y;switch(!0){case(o&&l&&d):k=new Date(G.timestamp),j=new Date(u),Y=new Date(f),G.level===c&&k>=j&&k<=Y&&S<h?S++:G.level===c&&k>=j&&k<=Y&&(ho(G,p,y),S++,S===E&&R.destroy());break;case(o&&l):k=new Date(G.timestamp),j=new Date(u),G.level===c&&k>=j&&S<h?S++:G.level===c&&k>=j&&(ho(G,p,y),S++,S===E&&R.destroy());break;case(o&&d):k=new Date(G.timestamp),Y=new Date(f),G.level===c&&k<=Y&&S<h?S++:G.level===c&&k<=Y&&(ho(G,p,y),S++,S===E&&R.destroy());break;case(l&&d):k=new Date(G.timestamp),j=new Date(u),Y=new Date(f),k>=j&&k<=Y&&S<h?S++:k>=j&&k<=Y&&(ho(G,p,y),S++,S===E&&R.destroy());break;case o:G.level===c&&S<h?S++:G.level===c&&(ho(G,p,y),S++,S===E&&R.destroy());break;case l:k=new Date(G.timestamp),j=new Date(u),k>=j&&S<h?S++:k>=j&&S>=h&&(ho(G,p,y),S++,S===E&&R.destroy());break;case d:k=new Date(G.timestamp),Y=new Date(f),k<=Y&&S<h?S++:k<=Y&&S>=h&&(ho(G,p,y),S++,S===E&&R.destroy());break;default:S<h?S++:(ho(G,p,y),S++,S===E&&R.destroy())}}a($,"onLogMessage"),await kde(R,"close");let ee=await r;if(ee.replicated){for(let G of y)G.node=server.hostname;for(let G of ee.replicated){let k=G.node;if(G.status==="failed")ho({timestamp:new Date().toISOString(),level:"error",node:k,message:`Error retrieving logs: ${G.reason}`},p,y);else for(let j of G.results)j.node=k,ho(j,p,y)}}return y}a(Wde,"readLog");function ho(e,t,r){t==="desc"?zde(e,r):t==="asc"?jde(e,r):r.push(e)}a(ho,"pushLineToResult");function zde(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(zde,"insertDescending");function jde(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(jde,"insertAscending")});var xT=M((G0e,pK)=>{"use strict";var SO=require("joi"),{string:lf,boolean:dK,date:Qde}=SO.types(),Jde=mt(),{validateSchemaExists:B0e,validateTableExists:F0e,validateSchemaName:k0e}=Qi(),Xde=(H(),v(z)),Zde=Ct(),fK=me();fK.initSync();var H0e=lf.invalid(fK.get(Xde.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(Zde.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),mK={operation:lf.valid("add_node","update_node","set_node_replication"),node_name:lf.optional(),subscriptions:SO.array().items({table:lf.optional(),schema:lf.optional(),database:lf.optional(),subscribe:dK.required(),publish:dK.required().custom(tfe),start_time:Qde.iso()})};function efe(e){return Jde.validateBySchema(e,SO.object(mK))}a(efe,"addUpdateNodeValidator");function tfe(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(tfe,"checkForFalsy");pK.exports={addUpdateNodeValidator:efe,validationSchema:mK}});var uf=M(($0e,hK)=>{"use strict";var TO=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},yO=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};hK.exports={Node:TO,NodeSubscription:yO}});var _K=M((K0e,EK)=>{"use strict";var rfe=(H(),v(z)).OPERATIONS_ENUM,RO=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=rfe.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};EK.exports=RO});var Ah=M((W0e,gK)=>{"use strict";var bO=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},AO=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)}};gK.exports={RemotePayloadObject:bO,RemotePayloadSubscription:AO}});var TK=M((j0e,SK)=>{"use strict";var IO=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}};SK.exports=IO});var RK=M((tBe,yK)=>{"use strict";var nfe=TK(),J0e=Yt(),X0e=Et(),sfe=J(),{getSchemaPath:Z0e,getTransactionAuditStorePath:eBe}=Rt(),{getDatabases:ife}=(we(),v(ft));yK.exports=ofe;async function ofe(e){let t=new nfe;try{let r=ife()[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){sfe.warn(`unable to stat table dbi due to ${r}`)}return t}a(ofe,"lmdbGetTableSize")});var AK=M((nBe,bK)=>{"use strict";var wO=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}};bK.exports=wO});var wh=M((lBe,CK)=>{"use strict";var afe=require("fs-extra"),cfe=require("path"),bn=require("systeminformation"),Sc=J(),IK=_r(),iBe=Ct(),df=(H(),v(z)),lfe=RK(),ufe=kl(),{getThreadInfo:wK}=st(),Ih=me();Ih.initSync();var dfe=AK(),{openEnvironment:oBe}=Et(),{getSchemaPath:aBe}=Rt(),{database:cBe,databases:NO}=(we(),v(ft)),BT;CK.exports={getHDBProcessInfo:LO,getNetworkInfo:vO,getDiskInfo:DO,getMemoryInfo:PO,getCPUInfo:OO,getTimeInfo:CO,getSystemInformation:MO,systemInformation:ffe,getTableSize:UO,getMetrics:xO};function CO(){return bn.time()}a(CO,"getTimeInfo");async function OO(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:l,cache:u,...d}=await bn.cpu();d.cpu_speed=await bn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:p,rawCurrentloadNice:h,rawCurrentloadSystem:E,rawCurrentloadUser:g,cpus:R,...S}=await bn.currentLoad();return S.cpus=[],R.forEach(y=>{let{rawLoad:N,rawLoadIdle:I,rawLoadIrq:$,rawLoadNice:ee,rawLoadSystem:G,rawLoadUser:k,...j}=y;S.cpus.push(j)}),d.current_load=S,d}catch(e){return Sc.error(`error in getCPUInfo: ${e}`),{}}}a(OO,"getCPUInfo");async function PO(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await bn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Sc.error(`error in getMemoryInfo: ${e}`),{}}}a(PO,"getMemoryInfo");async function LO(){let e={core:[],clustering:[]};try{let t=await bn.processes(),r;try{r=Number.parseInt(await afe.readFile(cfe.join(Ih.get(df.CONFIG_PARAMS.ROOTPATH),df.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===df.NODE_ERROR_CODES.ENOENT)Sc.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 Sc.error(`error in getHDBProcessInfo: ${t}`),e}}a(LO,"getHDBProcessInfo");async function DO(){let e={};try{if(!Ih.get(df.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await bn.disksIO();e.io=i;let{rxSec:o,txSec:c,wxSec:l,...u}=await bn.fsStats();return e.read_write=u,e.size=await bn.fsSize(),e}catch(t){return Sc.error(`error in getDiskInfo: ${t}`),e}}a(DO,"getDiskInfo");async function vO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return Ih.get(df.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await bn.networkInterfaceDefault(),e.latency=await bn.inetChecksite("google.com"),(await bn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await bn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:o,...c}=n;e.stats.push(c)})),e}catch(t){return Sc.error(`error in getNetworkInfo: ${t}`),e}}a(vO,"getNetworkInfo");async function MO(){if(BT!==void 0)return BT;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await bn.osInfo();e=c;let l=await bn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,BT=e,BT}catch(t){return Sc.error(`error in getSystemInformation: ${t}`),e}}a(MO,"getSystemInformation");async function UO(){let e=[],t=await ufe.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await lfe(n));return e}a(UO,"getTableSize");async function xO(){let e={};for(let t in NO){let r=e[t]={},n=r.tables={};for(let s in NO[t])try{let i=NO[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let o=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=o[l];n[s]=c}catch(i){Sc.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(xO,"getMetrics");async function NK(){if(Ih.get(df.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await IK.getNATSReferences(),t=await IK.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(NK,"getNatsStreamInfo");async function ffe(e){let t=new dfe;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await MO(),t.time=CO(),t.cpu=await OO(),t.memory=await PO(),t.disk=await DO(),t.network=await vO(),t.harperdb_processes=await LO(),t.table_size=await UO(),t.metrics=await xO(),t.threads=await wK(),t.replication=await NK(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await MO();break;case"time":t.time=CO();break;case"cpu":t.cpu=await OO();break;case"memory":t.memory=await PO();break;case"disk":t.disk=await DO();break;case"network":t.network=await vO();break;case"harperdb_processes":t.harperdb_processes=await LO();break;case"table_size":t.table_size=await UO();break;case"database_metrics":case"metrics":t.metrics=await xO();break;case"threads":t.threads=await wK();break;case"replication":t.replication=await NK();break;default:break}return t}a(ffe,"systemInformation")});var ca=M((pBe,DK)=>{"use strict";var mfe=Vn(),BO=oe(),pfe=require("util"),zl=(H(),v(z)),OK=me();OK.initSync();var hfe=tC(),PK=gn(),{Node:dBe,NodeSubscription:fBe}=uf(),Efe=cd(),_fe=_K(),{RemotePayloadObject:gfe,RemotePayloadSubscription:Sfe}=Ah(),{handleHDBError:Tfe,hdbErrors:yfe}=_e(),{HTTP_STATUS_CODES:Rfe,HDB_ERROR_MSGS:bfe}=yfe,Afe=mi(),Ife=wh(),{packageJson:wfe}=yt(),{getDatabases:Nfe}=(we(),v(ft)),mBe=pfe.promisify(hfe.authorize),Cfe=PK.searchByHash,Ofe=PK.searchByValue;DK.exports={isEmpty:Pfe,getNodeRecord:Lfe,upsertNodeRecord:Dfe,buildNodePayloads:vfe,checkClusteringEnabled:Mfe,getAllNodeRecords:Ufe,getSystemInfo:xfe,reverseSubscription:LK};function Pfe(e){return e==null}a(Pfe,"isEmpty");async function Lfe(e){let t=new Efe(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Cfe(t)}a(Lfe,"getNodeRecord");async function Dfe(e){let t=new _fe(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return mfe.upsert(t)}a(Dfe,"upsertNodeRecord");function LK(e){if(BO.isEmpty(e.subscribe)||BO.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(LK,"reverseSubscription");function vfe(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=BO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=LK(c),p=Nfe()[l]?.[u],h=new Sfe(l,u,d,m,f,c.start_time,p.schemaDefined?p.attributes:void 0);s.push(h)}return new gfe(r,t,s,n)}a(vfe,"buildNodePayloads");function Mfe(){if(!OK.get(zl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Tfe(new Error,bfe.CLUSTERING_NOT_ENABLED,Rfe.BAD_REQUEST,void 0,void 0,!0)}a(Mfe,"checkClusteringEnabled");async function Ufe(){let e=new Afe(zl.SYSTEM_SCHEMA_NAME,zl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Ofe(e))}a(Ufe,"getAllNodeRecords");async function xfe(){let e=await Ife.getSystemInformation();return{hdb_version:wfe.version,node_version:e.node_version,platform:e.platform}}a(xfe,"getSystemInfo")});var FO=M((EBe,HK)=>{"use strict";var FT=_r(),vK=oe(),MK=Ct(),UK=(H(),v(z)),kT=J(),xK=DT(),Bfe=hp(),{RemotePayloadObject:Ffe}=Ah(),{handleHDBError:BK,hdbErrors:kfe}=_e(),{HTTP_STATUS_CODES:FK}=kfe,{NodeSubscription:kK}=uf();HK.exports=Hfe;async function Hfe(e,t){let r;try{r=await FT.request(`${t}.${MK.REQUEST_SUFFIX}`,new Ffe(UK.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),kT.trace("Response from remote describe all request:",r)}catch(o){kT.error(`addNode received error from describe all request to remote node: ${o}`);let c=FT.requestErrorHandler(o,"add_node",t);throw BK(new Error,c,FK.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===MK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw BK(new Error,o,FK.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===UK.SYSTEM_SCHEMA_NAME){await FT.createLocalTableStream(l,c);let h=new kK(l,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let u=vK.doesSchemaExist(l),d=n[l]!==void 0,f=c?vK.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(o);continue}if(!u&&d&&(kT.trace(`addNode creating schema: ${l}`),await xK.createSchema({operation:"create_schema",schema:l})),!f&&m){kT.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let h=new Bfe(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(h.attributes=n[l][c].attributes),await xK.createTable(h)}await FT.createLocalTableStream(l,c);let p=new kK(l,c,o.publish,o.subscribe);p.start_time=o.start_time,i.push(p)}return{added:i,skipped:s}}a(Hfe,"reviewSubscriptions")});var ff={};ye(ff,{addNodeBack:()=>kO,removeNodeBack:()=>HO,setNode:()=>Vfe});async function Vfe(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=yi(t)):t=NT(r);let n=(0,qK.validateBySchema)(e,$fe);if(n)throw(0,la.handleHDBError)(n,n.message,qfe.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new la.ClientError("url or hostname is required for remove_node operation");let p=r,h=Ht(),E=await h.get(p);if(!E)throw new la.ClientError(p+" does not exist");try{await yh({url:E.url},{operation:V.REMOVE_NODE_BACK,name:E?.subscriptions?.length>0?tt():p},void 0)}catch(g){Rs.warn(`Error removing node from target node ${p}, if it is offline and we be online in the future, you may need to clean up this node manually, or retry:`,g)}return await h.delete(p),`Successfully removed '${p}' from cluster`}if(!t)throw new la.ClientError("url required for this operation");let s=uc();if(s==null)throw new la.ClientError("replication url is missing from harperdb-config.yaml");let i,o,c;if(t?.startsWith("wss:")){i=await(0,Ws.getReplicationCert)();let p=await(0,Ws.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(o=await(0,Ws.createCsr)(),Rs.info("Sending CSR to target node:",t)):p&&(c=p.certificate,Rs.info("Sending CA named",p.name,"to target node",t))}let l={operation:V.ADD_NODE_BACK,hostname:(0,yc.get)(F.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:o,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,yc.get)(F.REPLICATION_SHARD)!==void 0&&(l.shard=(0,yc.get)(F.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(GK):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let p=GK(e);l.subscribe=p.subscribe,l.publish=p.publish}e?.authorization?.username&&e?.authorization?.password&&(e.authorization="Basic "+Buffer.from(e.authorization.username+":"+e.authorization.password).toString("base64"));let u,d;try{u=await yh({url:t},l,e)}catch(p){p.message=`Error returned from ${t}: `+p.message,Rs.warn("Error adding node:",t,"to cluster:",p),d=p}if(o&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);o&&(Rs.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ws.setCertTable)({name:Gfe.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ws.setCertTable)({name:tt(),uses:["https","operations","wss"],certificate:u.certificate,private_key_name:i?.options?.key_file,is_authority:!1,is_self_signed:!1}),c=u.signingCA);let f={url:t,ca:u?.usingCA};if(e.hostname&&(f.name=e.hostname),e.subscriptions?f.subscriptions=e.subscriptions:f.replicates=!0,e.start_time&&(f.start_time=typeof e.start_time=="string"?new Date(e.start_time).getTime():e.start_time),e.retain_authorization&&(f.authorization=e.authorization),e.revoked_certificates&&(f.revoked_certificates=e.revoked_certificates),u?.shard!==void 0?f.shard=u.shard:e.shard!==void 0&&(f.shard=e.shard),f.replicates){let p={url:s,ca:c,replicates:!0,subscriptions:null};(0,yc.get)(F.REPLICATION_SHARD)!==void 0&&(p.shard=(0,yc.get)(F.REPLICATION_SHARD)),e.retain_authorization&&(p.authorization=e.authorization),e.start_time&&(p.start_time=e.start_time),await ea(tt(),p)}await ea(u?u.nodeName:f.name??yi(t),f);let m;return e.operation==="update_node"?m=`Successfully updated '${t}'`:m=`Successfully added '${t}' to cluster`,d&&(m+=" but there was an error updating target node: "+d.message),m}async function kO(e){Rs.trace("addNodeBack received request:",e);let t=await(0,Ws.signCertificate)(e),r;e.csr?(r=t.signingCA,Rs.info("addNodeBack received CSR from node:",e.url,"this node will use and respond with CA that was used to issue CSR")):(r=e?.cert_auth,Rs.info("addNodeBack received CA from node:",e.url));let n={url:e.url,ca:r};e.subscriptions?n.subscriptions=e.subscriptions:(n.replicates=!0,n.subscriptions=null),e.start_time&&(n.start_time=e.start_time),e.authorization&&(n.authorization=e.authorization),e.shard!==void 0&&(n.shard=e.shard);let s=await(0,Ws.getReplicationCertAuth)();if(n.replicates){let i={url:uc(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,yc.get)(F.REPLICATION_SHARD)!==void 0&&(i.shard=(0,yc.get)(F.REPLICATION_SHARD),t.shard=i.shard),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await ea(tt(),i)}return await ea(e.hostname,n),t.nodeName=tt(),t.usingCA=s?.certificate,Rs.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function HO(e){Rs.trace("removeNodeBack received request:",e),await Ht().delete(e.name)}function GK(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ws,qK,Tc,yc,Rs,la,Gfe,qfe,$fe,mf=se(()=>{Ws=b(ys()),qK=b(mt()),Tc=b(require("joi")),yc=b(me());H();fh();Wd();Ss();Rs=b(J()),la=b(_e()),{pki:Gfe}=require("node-forge"),{HTTP_STATUS_CODES:qfe}=la.hdbErrors,$fe=Tc.default.object({hostname:Tc.default.string(),verify_tls:Tc.default.boolean(),replicates:Tc.default.boolean(),subscriptions:Tc.default.array(),revoked_certificates:Tc.default.array(),shard:Tc.default.number()});a(Vfe,"setNode");a(kO,"addNodeBack");a(HO,"removeNodeBack");a(GK,"reverseSubscription")});var VT=M((IBe,VK)=>{"use strict";var{handleHDBError:HT,hdbErrors:Kfe}=_e(),{HTTP_STATUS_CODES:GT}=Kfe,{addUpdateNodeValidator:Yfe}=xT(),qT=J(),$T=(H(),v(z)),$K=Ct(),Wfe=oe(),Nh=_r(),Ch=ca(),GO=me(),zfe=FO(),{Node:jfe,NodeSubscription:Qfe}=uf(),{broadcast:Jfe}=st(),{setNode:Xfe}=(mf(),v(ff)),bBe=me(),ABe=(H(),v(z)),Zfe="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",eme="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",tme=GO.get($T.CONFIG_PARAMS.CLUSTERING_NODENAME);VK.exports=rme;async function rme(e,t=!1){if(qT.trace("addNode called with:",e),GO.get($T.CONFIG_PARAMS.REPLICATION_URL)||GO.get($T.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Xfe(e);Ch.checkClusteringEnabled();let r=Yfe(e);if(r)throw HT(r,r.message,GT.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Ch.getNodeRecord(n);if(!Wfe.isEmptyOrZeroLength(f))throw HT(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,GT.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await zfe(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=Zfe,o;let c=Ch.buildNodePayloads(s,tme,$T.OPERATIONS_ENUM.ADD_NODE,await Ch.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let p=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new Qfe(p.schema,p.table,p.publish,p.subscribe))}qT.trace("addNode sending remote payload:",c);let u;try{u=await Nh.request(`${n}.${$K.REQUEST_SUFFIX}`,c)}catch(f){qT.error(`addNode received error from request: ${f}`);for(let p=0,h=s.length;p<h;p++){let E=s[p];E.publish=!1,E.subscribe=!1,await Nh.updateRemoteConsumer(E,n)}let m=Nh.requestErrorHandler(f,"add_node",n);throw HT(new Error,m,GT.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===$K.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw HT(new Error,f,GT.INTERNAL_SERVER_ERROR,"error",f)}qT.trace(u);for(let f=0,m=s.length;f<m;f++){let p=s[f];await Nh.updateRemoteConsumer(p,n),p.subscribe===!0&&await Nh.updateConsumerIterator(p.schema,p.table,n,"start")}let d=new jfe(n,l,u.system_info);return await Ch.upsertNodeRecord(d),Jfe({type:"nats_update"}),i.length>0?o.message=eme:o.message=`Successfully added '${n}' to manifest`,o}a(rme,"addNode")});var KO=M((CBe,YK)=>{"use strict";var{handleHDBError:qO,hdbErrors:nme}=_e(),{HTTP_STATUS_CODES:$O}=nme,{addUpdateNodeValidator:sme}=xT(),Oh=J(),KT=(H(),v(z)),KK=Ct(),NBe=oe(),Ph=_r(),Lh=ca(),VO=me(),{cloneDeep:ime}=require("lodash"),ome=FO(),{Node:ame,NodeSubscription:cme}=uf(),{broadcast:lme}=st(),{setNode:ume}=(mf(),v(ff)),dme="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",fme="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mme=VO.get(KT.CONFIG_PARAMS.CLUSTERING_NODENAME);YK.exports=pme;async function pme(e){if(Oh.trace("updateNode called with:",e),VO.get(KT.CONFIG_PARAMS.REPLICATION_URL)??VO.get(KT.CONFIG_PARAMS.REPLICATION_HOSTNAME))return ume(e);Lh.checkClusteringEnabled();let t=sme(e);if(t)throw qO(t,t.message,$O.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Lh.getNodeRecord(r);s.length>0&&(n=ime(s));let{added:i,skipped:o}=await ome(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=dme,c;let l=Lh.buildNodePayloads(i,mme,KT.OPERATIONS_ENUM.UPDATE_NODE,await Lh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Oh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Oh.trace("updateNode sending remote payload:",l);let u;try{u=await Ph.request(`${r}.${KK.REQUEST_SUFFIX}`,l)}catch(d){Oh.error(`updateNode received error from request: ${d}`);let f=Ph.requestErrorHandler(d,"update_node",r);throw qO(new Error,f,$O.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===KK.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw qO(new Error,d,$O.INTERNAL_SERVER_ERROR,"error",d)}Oh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Ph.updateRemoteConsumer(m,r),m.subscribe===!0?await Ph.updateConsumerIterator(m.schema,m.table,r,"start"):await Ph.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new ame(r,[],u.system_info)]),await hme(n[0],i,u.system_info),o.length>0?c.message=fme:c.message=`Successfully updated '${r}'`,c}a(pme,"updateNode");async function hme(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 cme(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Lh.upsertNodeRecord(n),lme({type:"nats_update"})}a(hme,"updateNodeTable")});var JK=M((PBe,QK)=>{"use strict";var jK=require("joi"),{string:WK}=jK.types(),Eme=mt(),zK=(H(),v(z)),_me=me(),gme=Ct();QK.exports=Sme;function Sme(e){let t=WK.invalid(_me.get(zK.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(gme.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=jK.object({operation:WK.valid(zK.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Eme.validateBySchema(e,r)}a(Sme,"removeNodeValidator")});var YT=M((DBe,rY)=>{"use strict";var{handleHDBError:XK,hdbErrors:Tme}=_e(),{HTTP_STATUS_CODES:ZK}=Tme,yme=JK(),Dh=J(),eY=ca(),Rme=oe(),pf=(H(),v(z)),tY=Ct(),YO=_r(),WO=me(),{RemotePayloadObject:bme}=Ah(),{NodeSubscription:Ame}=uf(),Ime=pp(),wme=Nl(),{broadcast:Nme}=st(),{setNode:Cme}=(mf(),v(ff)),Ome=WO.get(pf.CONFIG_PARAMS.CLUSTERING_NODENAME);rY.exports=Pme;async function Pme(e){if(Dh.trace("removeNode called with:",e),WO.get(pf.CONFIG_PARAMS.REPLICATION_URL)??WO.get(pf.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Cme(e);eY.checkClusteringEnabled();let t=yme(e);if(t)throw XK(t,t.message,ZK.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await eY.getNodeRecord(r);if(Rme.isEmptyOrZeroLength(n))throw XK(new Error,`Node '${r}' was not found.`,ZK.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new bme(pf.OPERATIONS_ENUM.REMOVE_NODE,Ome,[]),i,o=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await YO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await YO.updateRemoteConsumer(new Ame(d.schema,d.table,!1,!1),r)}catch(f){Dh.error(f)}}try{i=await YO.request(`${r}.${tY.REQUEST_SUFFIX}`,s),Dh.trace("Remove node reply from remote node:",r,i)}catch(l){Dh.error("removeNode received error from request:",l),o=!0}let c=new Ime(pf.SYSTEM_SCHEMA_NAME,pf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await wme.deleteRecord(c),Nme({type:"nats_update"}),i?.status===tY.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Dh.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(Pme,"removeNode")});var iY=M((MBe,sY)=>{"use strict";var nY=require("joi"),{string:Lme,array:Dme}=nY.types(),vme=mt(),Mme=xT();sY.exports=Ume;function Ume(e){let t=nY.object({operation:Lme.valid("configure_cluster").required(),connections:Dme.items(Mme.validationSchema).required()});return vme.validateBySchema(e,t)}a(Ume,"configureClusterValidator")});var zO=M((xBe,uY)=>{"use strict";var oY=(H(),v(z)),WT=J(),xme=oe(),Bme=me(),Fme=YT(),kme=VT(),Hme=ca(),Gme=iY(),{handleHDBError:aY,hdbErrors:qme}=_e(),{HTTP_STATUS_CODES:cY}=qme,$me="Configure cluster complete.",Vme="Failed to configure the cluster. Check the logs for more details.",Kme="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uY.exports=Yme;async function Yme(e){WT.trace("configure cluster called with:",e);let t=Gme(e);if(t)throw aY(t,t.message,cY.BAD_REQUEST,void 0,void 0,!0);let r=await Hme.getAllNodeRecords(),n=[];if(Bme.get(oY.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await lY(Fme,{operation:oY.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}WT.trace("All results from configure_cluster remove node:",n)}let s=[],i=e.connections.length;for(let d=0;d<i;d++){let f=e.connections[d],m=await lY(kme,f,f.node_name);s.push(m)}WT.trace("All results from configure_cluster add node:",s);let o=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(WT.error(m.node_name,m?.error?.message,m?.error?.stack),o.includes(m.node_name)||o.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(xme.isEmptyOrZeroLength(o))return{message:$me,connections:c};if(l)return{message:Kme,failed_nodes:o,connections:c};throw aY(new Error,Vme,cY.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Yme,"configureCluster");async function lY(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(lY,"functionWrapper")});var pY=M((FBe,mY)=>{"use strict";var vh=require("joi"),Wme=mt(),{validateSchemaExists:dY,validateTableExists:zme,validateSchemaName:fY}=Qi(),jme=vh.object({operation:vh.string().valid("purge_stream"),schema:vh.string().custom(dY).custom(fY).optional(),database:vh.string().custom(dY).custom(fY).optional(),table:vh.string().custom(zme).required()});function Qme(e){return Wme.validateBySchema(e,jme)}a(Qme,"purgeStreamValidator");mY.exports=Qme});var jO=M((HBe,hY)=>{"use strict";var{handleHDBError:Jme,hdbErrors:Xme}=_e(),{HTTP_STATUS_CODES:Zme}=Xme,epe=pY(),tpe=_r(),rpe=ca();hY.exports=npe;async function npe(e){e.schema=e.schema??e.database;let t=epe(e);if(t)throw Jme(t,t.message,Zme.BAD_REQUEST,void 0,void 0,!0);rpe.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await tpe.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(npe,"purgeStream")});var XO=M((qBe,bY)=>{"use strict";var JO=ca(),spe=_r(),jT=me(),hf=(H(),v(z)),jl=Ct(),ipe=oe(),QO=J(),{RemotePayloadObject:ope}=Ah(),{ErrorCode:EY}=require("nats"),{parentPort:_Y}=require("worker_threads"),{onMessageByType:ape}=st(),{getThisNodeName:cpe}=(Ss(),v(ra)),{requestClusterStatus:lpe}=(fh(),v(lV)),{getReplicationSharedStatus:upe,getHDBNodeTable:dpe}=(Wd(),v(rV)),{CONFIRMATION_STATUS_POSITION:fpe,RECEIVED_VERSION_POSITION:gY,RECEIVED_TIME_POSITION:mpe,SENDING_TIME_POSITION:ppe,RECEIVING_STATUS_POSITION:hpe,RECEIVING_STATUS_RECEIVING:Epe,BACK_PRESSURE_RATIO_POSITION:_pe}=(VC(),v(e1)),SY=jT.get(hf.CONFIG_PARAMS.CLUSTERING_ENABLED),TY=jT.get(hf.CONFIG_PARAMS.CLUSTERING_NODENAME);bY.exports={clusterStatus:gpe,buildNodeStatus:RY};var yY;ape("cluster-status",async e=>{yY(e)});async function gpe(){if(jT.get(hf.CONFIG_PARAMS.REPLICATION_URL)||jT.get(hf.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;_Y?(_Y.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{yY=i})):n=lpe();for(let i of n.connections){let o=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=upe(u,l,o);c.lastCommitConfirmed=zT(d[fpe]),c.lastReceivedRemoteTime=zT(d[gY]),c.lastReceivedLocalTime=zT(d[mpe]),c.lastReceivedVersion=d[gY],c.sendingMessage=zT(d[ppe]),c.backPressurePercent=d[_pe]*100,c.lastReceivedStatus=d[hpe]===Epe?"Receiving":"Waiting"}}n.node_name=cpe();let s=dpe().primaryStore.get(n.node_name);return s?.shard&&(n.shard=s.shard),s?.url&&(n.url=s.url),n.is_enabled=!0,n}let e={node_name:TY,is_enabled:SY,connections:[]};if(!SY)return e;let t=await JO.getAllNodeRecords();if(ipe.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(RY(t[n],e.connections));return await Promise.allSettled(r),e}a(gpe,"clusterStatus");function zT(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}a(zT,"asDate");async function RY(e,t){let r=e.name,n=new ope(hf.OPERATIONS_ENUM.CLUSTER_STATUS,TY,void 0,await JO.getSystemInfo()),s,i,o=jl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await spe.request(jl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===jl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=jl.CLUSTER_STATUS_STATUSES.CLOSED,QO.error(`Error getting node status from ${r} `,s))}catch(l){QO.warn(`Error getting node status from ${r}`,l),l.code===EY.NoResponders?o=jl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===EY.Timeout?o=jl.CLUSTER_STATUS_STATUSES.TIMEOUT:o=jl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Spe(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!==hf.PRE_4_0_0_VERSION&&await JO.upsertNodeRecord(l)}catch(l){QO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}a(RY,"buildNodeStatus");function Spe(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(Spe,"NodeStatusObject")});var eP=M((VBe,AY)=>{"use strict";var{handleHDBError:Tpe,hdbErrors:ype}=_e(),{HTTP_STATUS_CODES:Rpe}=ype,bpe=_r(),Ape=ca(),ZO=oe(),QT=require("joi"),Ipe=mt(),wpe=2e3,Npe=QT.object({timeout:QT.number().min(1),connected_nodes:QT.boolean(),routes:QT.boolean()});AY.exports=Cpe;async function Cpe(e){Ape.checkClusteringEnabled();let t=Ipe.validateBySchema(e,Npe);if(t)throw Tpe(t,t.message,Rpe.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||ZO.autoCastBoolean(n),o=s===void 0||ZO.autoCastBoolean(s),c={nodes:[]},l=await bpe.getServerList(r??wpe),u={};if(i)for(let d=0,f=l.length;d<f;d++){let m=l[d].statsz;m&&(u[l[d].server.name]=m.routes)}for(let d=0,f=l.length;d<f;d++){if(l[d].statsz)continue;let m=l[d].server,p=l[d].data;if(m.name.endsWith("-hub")){let h={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(h.connected_nodes=[],u[m.name]&&u[m.name].forEach(E=>{h.connected_nodes.includes(E.name.slice(0,-4))||h.connected_nodes.push(E.name.slice(0,-4))})),o&&(h.routes=p.cluster?.urls?p.cluster?.urls.map(E=>({host:E.split(":")[0],port:ZO.autoCast(E.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Cpe,"clusterNetwork")});var CY=M((YBe,NY)=>{"use strict";var tP=require("joi"),IY=mt(),{routeConstraints:wY}=Ww();NY.exports={setRoutesValidator:Ope,deleteRoutesValidator:Ppe};function Ope(e){let t=tP.object({server:tP.valid("hub","leaf"),routes:wY.required()});return IY.validateBySchema(e,t)}a(Ope,"setRoutesValidator");function Ppe(e){let t=tP.object({routes:wY.required()});return IY.validateBySchema(e,t)}a(Ppe,"deleteRoutesValidator")});var JT=M((zBe,UY)=>{"use strict";var ua=gt(),rP=oe(),zs=(H(),v(z)),Ef=me(),OY=CY(),{handleHDBError:PY,hdbErrors:Lpe}=_e(),{HTTP_STATUS_CODES:LY}=Lpe,DY="cluster routes successfully set",vY="cluster routes successfully deleted";UY.exports={setRoutes:vpe,getRoutes:Mpe,deleteRoutes:Upe};function Dpe(e){let t=ua.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=rP.autoCast(l.port);let u=r.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);u||d?s.push(l):(r.push(l),i.push(l))}return e.server==="hub"?ua.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):ua.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:DY,set:i,skipped:s}}a(Dpe,"setRoutesNats");function vpe(e){let t=OY.setRoutesValidator(e);if(t)throw PY(t,t.message,LY.BAD_REQUEST,void 0,void 0,!0);if(Ef.get(zs.CONFIG_PARAMS.CLUSTERING_ENABLED))return Dpe(e);let r=[],n=[],s=Ef.get(zs.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{MY(s,i)?n.push(i):(s.push(i),r.push(i))}),ua.updateConfigValue(zs.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:DY,set:r,skipped:n}}a(vpe,"setRoutes");function MY(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(MY,"existsInArray");function Mpe(){if(Ef.get(zs.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=ua.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Ef.get(zs.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}a(Mpe,"getRoutes");function Upe(e){let t=OY.deleteRoutesValidator(e);if(t)throw PY(t,t.message,LY.BAD_REQUEST,void 0,void 0,!0);if(Ef.get(zs.CONFIG_PARAMS.CLUSTERING_ENABLED))return xpe(e);let r=[],n=[],s=Ef.get(zs.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(o=>{MY(e.routes,o)?r.push(o):(i.push(o),n.push(o))}),ua.updateConfigValue(zs.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:vY,deleted:r,skipped:n}}a(Upe,"deleteRoutes");function xpe(e){let t=ua.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],o=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,p=r.length;m<p;m++){let h=r[m];if(d.host===h.host&&d.port===h.port){r.splice(m,1),f=!0,o=!0,s.push(d);break}}if(!f){let m=!0;for(let p=0,h=n.length;p<h;p++){let E=n[p];if(d.host===E.host&&d.port===E.port){n.splice(p,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return o&&(r=rP.isEmptyOrZeroLength(r)?null:r,ua.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=rP.isEmptyOrZeroLength(n)?null:n,ua.updateConfigValue(zs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:vY,deleted:s,skipped:i}}a(xpe,"deleteRoutesNats")});var BY=M((QBe,xY)=>{"use strict";var Bpe=Ct(),nP=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f,m,p,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Bpe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:l}},this.accounts={SYS:{users:p},HDB:{users:h}},this.system_account="SYS"}};xY.exports=nP});var HY=M((XBe,kY)=>{"use strict";var FY=Ct(),sP=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+FY.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+FY.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};kY.exports=sP});var qY=M((eFe,GY)=>{"use strict";var iP=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};GY.exports=iP});var VY=M((rFe,$Y)=>{"use strict";var Fpe=Ct(),oP=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Fpe.SERVER_SUFFIX.ADMIN,this.password=r}};$Y.exports=oP});var ty=M((sFe,WY)=>{"use strict";var Ql=require("path"),Jl=require("fs-extra"),kpe=BY(),Hpe=HY(),Gpe=qY(),qpe=VY(),aP=Es(),gf=oe(),zn=gt(),ZT=(H(),v(z)),Mh=Ct(),{CONFIG_PARAMS:ir}=ZT,Sf=J(),Uh=me(),KY=no(),cP=_r(),$pe=ys(),_f="clustering",Vpe=1e4,YY=50;WY.exports={generateNatsConfig:Ype,removeNatsConfig:Wpe,getHubConfigPath:Kpe};function Kpe(){let e=Uh.get(ir.ROOTPATH);return Ql.join(e,_f,Mh.NATS_CONFIG_FILES.HUB_SERVER)}a(Kpe,"getHubConfigPath");async function Ype(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=Uh.get(ir.ROOTPATH);Jl.ensureDirSync(Ql.join(r,"clustering","leaf")),Uh.initSync();let n=zn.getConfigFromFile(ir.CLUSTERING_TLS_CERT_AUTH),s=zn.getConfigFromFile(ir.CLUSTERING_TLS_PRIVATEKEY),i=zn.getConfigFromFile(ir.CLUSTERING_TLS_CERTIFICATE);!await Jl.exists(i)&&!await Jl.exists(!n)&&await $pe.createNatsCerts();let o=Ql.join(r,_f,Mh.PID_FILES.HUB),c=Ql.join(r,_f,Mh.PID_FILES.LEAF),l=zn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Ql.join(r,_f,Mh.NATS_CONFIG_FILES.HUB_SERVER),d=Ql.join(r,_f,Mh.NATS_CONFIG_FILES.LEAF_SERVER),f=zn.getConfigFromFile(ir.CLUSTERING_TLS_INSECURE),m=zn.getConfigFromFile(ir.CLUSTERING_TLS_VERIFY),p=zn.getConfigFromFile(ir.CLUSTERING_NODENAME),h=zn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cP.checkNATSServerInstalled()||ey("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let E=await aP.listUsers(),g=zn.getConfigFromFile(ir.CLUSTERING_USER),R=await aP.getClusterUser();(gf.isEmpty(R)||R.active!==!0)&&ey(`Invalid cluster user '${g}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await XT(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await XT(ir.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await XT(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),await XT(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT));let S=[],y=[];for(let[j,Y]of E.entries())Y.role?.role===ZT.ROLE_TYPES_ENUM.CLUSTER_USER&&Y.active&&(S.push(new qpe(Y.username,KY.decrypt(Y.hash))),y.push(new Gpe(Y.username,KY.decrypt(Y.hash))));let N=[],{hub_routes:I}=zn.getClusteringRoutes();if(!gf.isEmptyOrZeroLength(I))for(let j of I)N.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${j.host}:${j.port}`);let $=new kpe(zn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_NETWORK_PORT),p,o,i,s,n,f,m,h,zn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NAME),zn.getConfigFromFile(ir.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),N,S,y);n==null&&(delete $.tls.ca_file,delete $.leafnodes.tls.ca_file),t=gf.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ZT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Jl.writeJson(u,$),Sf.trace(`Hub server config written to ${u}`));let ee=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,G=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,k=new Hpe(zn.getConfigFromFile(ir.CLUSTERING_LEAFSERVER_NETWORK_PORT),p,c,l,[ee],[G],S,y,i,s,n,f);n==null&&delete k.tls.ca_file,(t===void 0||t===ZT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Jl.writeJson(d,k),Sf.trace(`Leaf server config written to ${d}`))}a(Ype,"generateNatsConfig");async function XT(e){let t=Uh.get(e);return gf.isEmpty(t)&&ey(`port undefined for '${e}'`),await gf.isPortTaken(t)&&ey(`'${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(XT,"isPortAvailable");function ey(e){let t=`Error generating clustering config: ${e}`;Sf.error(t),console.error(t),process.exit(1)}a(ey,"generateNatsConfigError");async function Wpe(e){let{port:t,config_file:r}=cP.getServerConfig(e),{username:n,decrypt_hash:s}=await aP.getClusterUser(),i=0,o=2e3;for(;i<YY;){try{let d=await cP.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){Sf.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=YY)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&&Sf.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await gf.asyncSetTimeout(u)}let c="0".repeat(Vpe),l=Ql.join(Uh.get(ir.ROOTPATH),_f,r);await Jl.writeFile(l,c),await Jl.remove(l),Sf.notify(e,"started.")}a(Wpe,"removeNatsConfig")});var ZY=M((oFe,XY)=>{"use strict";var bs=me(),et=(H(),v(z)),xh=Ct(),da=require("path"),{PACKAGE_ROOT:ny}=yt(),zY=me(),ry=oe(),Tf="/dev/null",zpe=da.join(ny,"launchServiceScripts"),jY=da.join(ny,"utility/scripts"),jpe=da.join(jY,et.HDB_RESTART_SCRIPT),QY=da.resolve(ny,"dependencies",`${process.platform}-${process.arch}`,xh.NATS_BINARY_NAME);function JY(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0,...process.env};return ry.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=ry.getEnvCliRootPath()),{name:et.PROCESS_DESCRIPTORS.HDB,script:et.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:e,execArgv:process.execArgv,cwd:ny}}a(JY,"generateMainServerConfig");var Qpe=9930;function Jpe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=da.join(e,"clustering",xh.NATS_CONFIG_FILES.HUB_SERVER),r=da.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=zY.get(et.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=xh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Qpe?"-"+n:""),binFile:QY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Tf,i.error_file=Tf),i}a(Jpe,"generateNatsHubServerConfig");var Xpe=9940;function Zpe(){bs.initSync(!0);let e=bs.get(et.CONFIG_PARAMS.ROOTPATH),t=da.join(e,"clustering",xh.NATS_CONFIG_FILES.LEAF_SERVER),r=da.join(bs.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY),et.LOG_NAMES.HDB),n=zY.get(et.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=xh.LOG_LEVEL_FLAGS[bs.get(et.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==Xpe?"-"+n:""),binFile:QY,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Tf,i.error_file=Tf),i}a(Zpe,"generateNatsLeafServerConfig");function ehe(){bs.initSync();let e=da.join(bs.get(et.CONFIG_PARAMS.LOGGING_ROOT),et.LOG_NAMES.HDB),t={name:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,binFile:et.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:zpe,autorestart:!1};return bs.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Tf,t.error_file=Tf),t}a(ehe,"generateClusteringUpgradeV4ServiceConfig");function the(){let e={[et.PROCESS_NAME_ENV_PROP]:et.PROCESS_DESCRIPTORS.RESTART_HDB};return ry.noBootFile()&&(e[et.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=ry.getEnvCliRootPath()),{...{name:et.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:jY},script:jpe}}a(the,"generateRestart");function rhe(){return{apps:[JY()]}}a(rhe,"generateAllServiceConfigs");XY.exports={generateAllServiceConfigs:rhe,generateMainServerConfig:JY,generateRestart:the,generateNatsHubServerConfig:Jpe,generateNatsLeafServerConfig:Zpe,generateClusteringUpgradeV4ServiceConfig:ehe}});var yf=M((lFe,oW)=>{"use strict";var Lr=(H(),v(z)),cFe=oe(),ma=ty(),sy=_r(),fa=Ct(),Rc=ZY(),uP=me(),bc=J(),nhe=ca(),{startWorker:eW,onMessageFromWorkers:she}=st(),tW=require("fs"),ihe=require("node:path"),ohe=(H(),v(z)),{setTimeout:ahe}=require("node:timers/promises"),{execFile:che,fork:lhe}=require("node:child_process");oW.exports={start:Ac,restart:dhe,kill:hhe,startAllServices:Ehe,startService:nW,restartHdb:fhe,startClusteringProcesses:sW,startClusteringThreads:iW,isHdbRestartRunning:mhe,getHdbPid:phe,cleanupChildrenProcesses:Bh,reloadClustering:ghe,expectedRestartOfChildren:rW};she(e=>{e.type==="restart"&&uP.initSync(!0)});var Eo=[],uhe=10,lP;function Ac(e,t=!1){let r=typeof e.args=="string"?e.args.split(" "):e.args;e.silent=!0,e.detached=!0;let n=e.script?lhe(e.script,r,e):che(e.binFile,r,e);n.name=e.name,n.config=e,n.on("error",(o,c)=>{console.error(o,c)}),n.on("exit",async o=>{let c=Eo.indexOf(n);c>-1&&Eo.splice(c,1),!lP&&o!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<uhe&&(tW.existsSync(ma.getHubConfigPath())?Ac(e):(await ma.generateNatsConfig(!0),Ac(e),await new Promise(l=>setTimeout(l,3e3)),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function i(o){let c=uP.get(Lr.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),l=/\[\d+][^\[]+\[(\w+)]/g,u,d=0,f;for(;u=l.exec(o);){if(u.index&&fa.LOG_LEVEL_HIERARCHY[c]>=fa.LOG_LEVEL_HIERARCHY[f||"info"]){let h=f===fa.LOG_LEVELS.ERR||f===fa.LOG_LEVELS.WRN?bc.OUTPUTS.STDERR:bc.OUTPUTS.STDOUT;bc.logCustomLevel(f||"info",h,s,o.slice(d,u.index).trim())}let[m,p]=u;d=u.index+m.length,f=fa.LOG_LEVELS[p]}if(fa.LOG_LEVEL_HIERARCHY[c]>=fa.LOG_LEVEL_HIERARCHY[f||"info"]){let m=f===fa.LOG_LEVELS.ERR||f===fa.LOG_LEVELS.WRN?bc.OUTPUTS.STDERR:bc.OUTPUTS.STDOUT;bc.logCustomLevel(f||"info",m,s,o.toString().slice(d).trim())}}a(i,"extractMessages"),n.stdout.on("data",i),n.stderr.on("data",i),n.unref(),Eo.length===0&&(t||(process.on("exit",Bh),process.on("SIGINT",Bh),process.on("SIGQUIT",Bh),process.on("SIGTERM",Bh))),Eo.push(n)}a(Ac,"start");function Bh(e=!0){if(!lP&&(lP=!0,Eo.length!==0))if(bc.info("Killing child processes..."),Eo.map(t=>t.kill()),e)process.exit(0);else return ahe(2e3)}a(Bh,"cleanupChildrenProcesses");function dhe(e){rW();for(let t of Eo)t.name===e&&t.kill()}a(dhe,"restart");function rW(){for(let e of Eo)e.config&&(e.config.restarts=0)}a(rW,"expectedRestartOfChildren");async function fhe(){await Ac(Rc.generateRestart())}a(fhe,"restartHdb");async function mhe(){let e=await list();for(let t in e)if(e[t].name===Lr.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(mhe,"isHdbRestartRunning");function phe(){let e=uP.getHdbBasePath();if(!e)return;let t=ihe.join(e,ohe.HDB_PID_FILE),r=She(t);if(!(!r||r===process.pid)&&The(r))return r}a(phe,"getHdbPid");function hhe(){for(let e of Eo)e.kill();Eo=[]}a(hhe,"kill");async function Ehe(){await sW(),await iW(),await Ac(Rc.generateAllServiceConfigs())}a(Ehe,"startAllServices");async function nW(e,t=!1){let r;switch(e=e.toLowerCase(),e){case Lr.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Rc.generateMainServerConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Rc.generateNatsIngestServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Rc.generateNatsReplyServiceConfig();break;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Rc.generateNatsHubServerConfig(),await Ac(r,t),await ma.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Rc.generateNatsLeafServerConfig(),await Ac(r,t),await ma.removeNatsConfig(e);return;case Lr.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Rc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}Ac(r,t)}a(nW,"startService");var _he;async function sW(e=!1){for(let t in Lr.CLUSTERING_PROCESSES){let r=Lr.CLUSTERING_PROCESSES[t];await nW(r,e)}}a(sW,"startClusteringProcesses");async function iW(){_he=eW(Lr.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Lr.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await sy.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await sy.updateLocalStreams();let e=await nhe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Lr.PRE_4_0_0_VERSION){bc.info("Starting clustering upgrade 4.0.0 process"),eW(Lr.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(iW,"startClusteringThreads");async function ghe(){await ma.generateNatsConfig(!0),await sy.reloadNATSHub(),await sy.reloadNATSLeaf(),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ma.removeNatsConfig(Lr.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(ghe,"reloadClustering");function She(e){try{return Number.parseInt(tW.readFileSync(e,"utf8"),10)}catch{return null}}a(She,"readPidFile");function The(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}a(The,"isProcessRunning")});var mP={};ye(mP,{compactOnStart:()=>yhe,copyDb:()=>fW});async function yhe(){Ic.notify("Running compact on start"),console.log("Running compact on start");let e=(0,dP.get)(F.ROOTPATH),t=new Map,r=ct();(0,fP.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);try{for(let n in r){if(n==="system"||n.endsWith("-copy"))continue;let s;for(let l in r[n]){s=r[n][l].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,iy.join)(e,"backup",n+".mdb"),o=(0,iy.join)(e,jc,n+"-copy.mdb"),c=0;try{c=await aW(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Ic.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:o,backupDest:i,recordCount:c}),await fW(n,o),console.log("Backing up",n,"to",i);try{await(0,Xl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Od()}catch(n){Ic.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n)}for(let[n,{dbPath:s,copyDest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,Xl.move)(i,s,{overwrite:!0}),await(0,Xl.remove)((0,iy.join)(e,jc,`${n}-copy.mdb-lock`));try{Od()}catch(n){Ic.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Ic.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,fP.updateConfigValue)(F.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,Xl.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Od(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let o=!0,c=await aW(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}.
18
18
  Total record count before compaction: ${i}, total after: ${c}.
19
- Database backup has not been removed and can be found here: ${s}`;Ic.error(l),console.error(l)}(0,dP.get)(F.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Xl.remove)(s))}}async function aW(e){let t=await(0,dW.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function Rf(){}async function fW(e,t){console.log(`Copying database ${e} to ${t}`);let r=ct()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=Rf,m.primaryStore.remove=Rf;for(let p in m.indices){let h=m.indices[p];h.put=Rf,h.remove=Rf}m.auditStore&&(m.auditStore.put=Rf,m.auditStore.remove=Rf),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,o=(0,cW.open)(new lW.default(t)),c=o.openDB(oy.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=yS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let R=new uW.OpenDBIObject(!h,h);R.encoding="binary",R.compression=E;let S=n.openDB(m,R);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",R.compression=g;let y=o.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,y,h,d)}if(i){let m=n.openDB(oy.AUDIT_STORE_NAME,$m);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,R=0,S=1e7,y=null;for(;S-- >0;)try{for(let N of m.getKeys({start:y,transaction:E}))try{y=N;let{value:I,version:$}=m.getEntry(N,{transaction:E});l=p.put(N,I,h?$:void 0),g++,E.openTimer&&(E.openTimer=0),R+=(N?.length||10)+I.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(I){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,I)}console.log("finish copying, copied",g,"entries",R,"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(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var cW,iy,Xl,dP,lW,uW,oy,dW,fP,Ic,pP=ne(()=>{we();cW=require("lmdb"),iy=require("path"),Xl=require("fs-extra"),dP=b(me()),lW=b(rp()),uW=b(tp()),oy=b(Yt());H();$i();dW=b(kl()),fP=b(gt()),Ic=b(J());a(yhe,"compactOnStart");a(aW,"getTotalDBRecordCount");a(Rf,"noop");a(fW,"copyDb")});var EP=M((hFe,mW)=>{"use strict";var Fh=me();Fh.initSync();var bf=require("fs-extra"),hP=require("path"),Af=(H(),v(z)),Rhe=require("crypto"),bhe=require("uuid").v4;mW.exports=Ahe;function Ahe(){if(Fh.getHdbBasePath()!==void 0){let e=hP.join(Fh.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=hP.join(Fh.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=hP.join(Fh.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PASSPHRASE_NAME);try{bf.accessSync(r),bf.accessSync(e),bf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=bhe(),i=Rhe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});bf.writeFileSync(r,s),bf.writeFileSync(e,i.privateKey),bf.writeFileSync(t,i.publicKey)}else throw n}}}a(Ahe,"checkJWTTokenExist")});var hW=M((_Fe,pW)=>{"use strict";var _P=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};pW.exports={HdbInfoInsertObject:_P}});var gW=M((SFe,_W)=>{"use strict";var EW=(H(),v(z)),gP=class{static{a(this,"UpgradeObject")}constructor(t,r){this[EW.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[EW.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};_W.exports={UpgradeObject:gP}});var ay=M((yFe,TW)=>{"use strict";var js=require("prompt"),If=require("chalk"),SW=J(),Ai=require("os"),SP=Qc(),TP=["yes","y"];async function Ihe(e){let t=`${Ai.EOL}`+If.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ai.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ai.EOL}${Ai.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ai.EOL}`;js.override=SP(["CONFIRM_UPGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:If.magenta(`${Ai.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await js.get([r])}catch(s){return SW.error("There was an error when prompting user about an upgrade."),SW.error(s),!1}return TP.includes(n.CONFIRM_UPGRADE)}a(Ihe,"forceUpdatePrompt");async function whe(e){let t=`${Ai.EOL}`+If.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ai.EOL}`);js.override=SP(["CONFIRM_DOWNGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:If.magenta(`${Ai.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await js.get([r]);return TP.includes(n.CONFIRM_DOWNGRADE)}a(whe,"forceDowngradePrompt");async function Nhe(){let e=`${Ai.EOL}`+If.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");js.override=SP(["GENERATE_CERTS"]),js.start(),js.message=e;let t={properties:{GENERATE_CERTS:{description:If.magenta(`${Ai.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await js.get([t]);return TP.includes(r.GENERATE_CERTS)}a(Nhe,"upgradeCertsPrompt");TW.exports={forceUpdatePrompt:Ihe,forceDowngradePrompt:whe,upgradeCertsPrompt:Nhe}});var cy=M((bFe,yW)=>{"use strict";var yP=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};yW.exports=yP});var bW=M((OFe,RW)=>{"use strict";var Che=oe(),Ohe=gt(),IFe=J(),wFe=require("path"),NFe=require("fs"),CFe=(H(),v(z));RW.exports={getOldPropsValue:Phe};function Phe(e,t,r=!1){let n=t.getRaw(e);return Che.isNotEmptyAndHasValue(n)?n:r?Ohe.getDefaultConfig(e):""}a(Phe,"getOldPropsValue")});var NW=M((LFe,wW)=>{"use strict";var wc=require("path"),Nc=require("fs-extra"),Lhe=require("properties-reader"),Dhe=cy(),gr=J(),{getOldPropsValue:St}=bW(),{HDB_SETTINGS_NAMES:Te,CONFIG_PARAMS:Zl}=(H(),v(z)),eu=gt(),ly=me(),AW=oe(),_o=(H(),v(z)),RP=new Dhe("3.1.0"),IW=[];function vhe(){let e=Lhe(ly.get(Te.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),gr.info(t);let r=` ;Settings for the HarperDB process.
19
+ Database backup has not been removed and can be found here: ${s}`;Ic.error(l),console.error(l)}(0,dP.get)(F.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,Xl.remove)(s))}}async function aW(e){let t=await(0,dW.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}function Rf(){}async function fW(e,t){console.log(`Copying database ${e} to ${t}`);let r=ct()[e];if(!r)throw new Error(`Source database not found: ${e}`);let n;for(let f in r){let m=r[f];m.primaryStore.put=Rf,m.primaryStore.remove=Rf;for(let p in m.indices){let h=m.indices[p];h.put=Rf,h.remove=Rf}m.auditStore&&(m.auditStore.put=Rf,m.auditStore.remove=Rf),n=m.primaryStore.rootStore}if(!n)throw new Error(`Source database does not have any tables: ${e}`);let s=n.dbisDb,i=n.auditStore,o=(0,cW.open)(new lW.default(t)),c=o.openDB(oy.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:p}of s.getRange({transaction:d})){let h=p.is_hash_attribute||p.isPrimaryKey,E,g;if(h&&(E=p.compression,g=yS(),g?p.compression=g:delete p.compression,E?.dictionary?.toString()===g?.dictionary?.toString()&&(E=null,g=null)),c.put(m,p),!(h||p.indexed))continue;let R=new uW.OpenDBIObject(!h,h);R.encoding="binary",R.compression=E;let S=n.openDB(m,R);S.decoder=null,S.decoderCopies=!1,S.encoding="binary",R.compression=g;let y=o.openDB(m,R);y.encoder=null,console.log("copying",m,"from",e,"to",t),await f(S,y,h,d)}if(i){let m=n.openDB(oy.AUDIT_STORE_NAME,$m);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,p,h,E){let g=0,R=0,S=1e7,y=null;for(;S-- >0;)try{for(let N of m.getKeys({start:y,transaction:E}))try{y=N;let{value:I,version:$}=m.getEntry(N,{transaction:E});l=p.put(N,I,h?$:void 0),g++,E.openTimer&&(E.openTimer=0),R+=(N?.length||10)+I.length,u++>5e3&&(await l,console.log("copied",g,"entries",R,"bytes"),u=0)}catch(I){console.error("Error copying record",typeof N=="symbol"?"symbol":N,"from",e,"to",t,I)}console.log("finish copying, copied",g,"entries",R,"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(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),o.close()}}var cW,iy,Xl,dP,lW,uW,oy,dW,fP,Ic,pP=se(()=>{we();cW=require("lmdb"),iy=require("path"),Xl=require("fs-extra"),dP=b(me()),lW=b(rp()),uW=b(tp()),oy=b(Yt());H();$i();dW=b(kl()),fP=b(gt()),Ic=b(J());a(yhe,"compactOnStart");a(aW,"getTotalDBRecordCount");a(Rf,"noop");a(fW,"copyDb")});var EP=M((hFe,mW)=>{"use strict";var Fh=me();Fh.initSync();var bf=require("fs-extra"),hP=require("path"),Af=(H(),v(z)),Rhe=require("crypto"),bhe=require("uuid").v4;mW.exports=Ahe;function Ahe(){if(Fh.getHdbBasePath()!==void 0){let e=hP.join(Fh.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=hP.join(Fh.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=hP.join(Fh.getHdbBasePath(),Af.LICENSE_KEY_DIR_NAME,Af.JWT_ENUM.JWT_PASSPHRASE_NAME);try{bf.accessSync(r),bf.accessSync(e),bf.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=bhe(),i=Rhe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});bf.writeFileSync(r,s),bf.writeFileSync(e,i.privateKey),bf.writeFileSync(t,i.publicKey)}else throw n}}}a(Ahe,"checkJWTTokenExist")});var hW=M((_Fe,pW)=>{"use strict";var _P=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};pW.exports={HdbInfoInsertObject:_P}});var gW=M((SFe,_W)=>{"use strict";var EW=(H(),v(z)),gP=class{static{a(this,"UpgradeObject")}constructor(t,r){this[EW.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[EW.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};_W.exports={UpgradeObject:gP}});var ay=M((yFe,TW)=>{"use strict";var js=require("prompt"),If=require("chalk"),SW=J(),Ai=require("os"),SP=Qc(),TP=["yes","y"];async function Ihe(e){let t=`${Ai.EOL}`+If.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ai.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ai.EOL}${Ai.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ai.EOL}`;js.override=SP(["CONFIRM_UPGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_UPGRADE:{description:If.magenta(`${Ai.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await js.get([r])}catch(s){return SW.error("There was an error when prompting user about an upgrade."),SW.error(s),!1}return TP.includes(n.CONFIRM_UPGRADE)}a(Ihe,"forceUpdatePrompt");async function whe(e){let t=`${Ai.EOL}`+If.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ai.EOL}`);js.override=SP(["CONFIRM_DOWNGRADE"]),js.start(),js.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:If.magenta(`${Ai.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await js.get([r]);return TP.includes(n.CONFIRM_DOWNGRADE)}a(whe,"forceDowngradePrompt");async function Nhe(){let e=`${Ai.EOL}`+If.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");js.override=SP(["GENERATE_CERTS"]),js.start(),js.message=e;let t={properties:{GENERATE_CERTS:{description:If.magenta(`${Ai.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await js.get([t]);return TP.includes(r.GENERATE_CERTS)}a(Nhe,"upgradeCertsPrompt");TW.exports={forceUpdatePrompt:Ihe,forceDowngradePrompt:whe,upgradeCertsPrompt:Nhe}});var cy=M((bFe,yW)=>{"use strict";var yP=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};yW.exports=yP});var bW=M((OFe,RW)=>{"use strict";var Che=oe(),Ohe=gt(),IFe=J(),wFe=require("path"),NFe=require("fs"),CFe=(H(),v(z));RW.exports={getOldPropsValue:Phe};function Phe(e,t,r=!1){let n=t.getRaw(e);return Che.isNotEmptyAndHasValue(n)?n:r?Ohe.getDefaultConfig(e):""}a(Phe,"getOldPropsValue")});var NW=M((LFe,wW)=>{"use strict";var wc=require("path"),Nc=require("fs-extra"),Lhe=require("properties-reader"),Dhe=cy(),gr=J(),{getOldPropsValue:St}=bW(),{HDB_SETTINGS_NAMES:Te,CONFIG_PARAMS:Zl}=(H(),v(z)),eu=gt(),ly=me(),AW=oe(),_o=(H(),v(z)),RP=new Dhe("3.1.0"),IW=[];function vhe(){let e=Lhe(ly.get(Te.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),gr.info(t);let r=` ;Settings for the HarperDB process.
20
20
 
21
21
  ;The directory selected during install where the database files reside.
22
22
  ${Te.HDB_ROOT_KEY} = ${St(Te.HDB_ROOT_KEY,e)}
@@ -89,17 +89,17 @@ ${Te.MAX_CUSTOM_FUNCTION_PROCESSES} = ${eu.getDefaultConfig(Zl.HTTP_THREADS)}
89
89
 
90
90
  Reindexing upgrade started for transaction logs`),pa.notify("Reindexing upgrade started for transaction logs"),await OW(bP,!0,e)),pa.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Hh?", but errors occurred":"")}a(qhe,"reindexUpgrade");async function OW(e,t,r){let n=await go.readdir(e),s=n.length;for(let i=0;i<s;i++){let o=n[i],c=ha.join(e,o.toString());if(o===".DS_Store")continue;let l=await go.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&go.statSync(ha.join(c,f)).isDirectory())try{await $he(o,f,t),An.info(`Reindexing started for ${o}.${f}`),pa.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${f}`),await Khe(o,f,c,t,r),An.info(`Reindexing completed for ${o}.${f}`),pa.notify(`Reindexing completed for ${o}.${f}`)}catch(m){Hh=!0,m.schema_path=c,m.table_name=f,pa.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),pa.error(m),An.error(m),console.error(m)}}}if(!Hh)try{await go.rm(dy,{recursive:!0})}catch{}}a(OW,"processTables");async function $he(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=ha.join(dy,s);await go.ensureDir(dy),await go.writeFile(i,""),An=Hhe({level:"debug",formatters:{bindings(){}}},i)}a($he,"initPinoLogger");var Vhe=20;async function Khe(e,t,r,n,s){let i;try{i=await As.openEnvironment(r,t,n)}catch(S){if(S.message==="MDB_INVALID: File is not an LMDB file"){pa.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`),An.error(S);return}throw S}let o=zhe(i.dbis),c=As.openDBI(i,o),l=Object.keys(i.dbis),u=As.statDBI(i,o);An.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new khe.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});d.start(u.entryCount,0,{});let f=await As.createEnvironment(r,t,!1);As.createDBI(f,o,!1,!0);let m=[];try{for(let S of c.getRange({start:!1}))S.value={...S.value},m.push(S),n||e==="system"&&(t==="hdb_schema"&&(S.key=S.key.toString(),S.value.name=S.value.name.toString()),t==="hdb_table"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.name=S.value.name.toString()),t==="hdb_attribute"&&(S.key=S.key.toString(),S.value.schema=S.value.schema.toString(),S.value.table=S.value.table.toString(),S.value.attribute=S.value.attribute.toString())),m.length>Vhe&&await p();await p()}catch(S){throw Hh=!0,An.error(S),S}async function p(){let S,y=m.map(({value:I})=>I);n?S=await Promise.all(y.map(I=>Yhe(f,I))):S=await Uhe(f,o,l.filter(I=>I!=="__blob__"),y,!1);for(let I=0,$=m.length;I<$;I++){let{key:ee,value:G}=m[I];An.info(`Record hash value: ${ee} hash: ${o}`);let k;n?k=S[I]:k=S.written_hashes.indexOf(ee)>-1,kh(k,!0),Whe(f,o,G[o],n),An.info(`Insert success, written hashes: ${S.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&pa.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),An.info(`${d.value}/${d.total} records inserted`)}a(p,"finishOutstanding"),d.stop();let h=As.statDBI(i,o),E=As.statDBI(f,o);if(An.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${E.entryCount}`),kh.deepStrictEqual(h.entryCount,E.entryCount),await As.closeEnvironment(i),await As.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let S=ha.join(r,t),y=ha.join(S,"data.mdb"),N=ha.join(S,"lock.mdb");await go.unlink(y),await go.unlink(N),await go.rmdir(S),An.info(`Deleted old environment files from schema folder: ${y}, ${N}`)}let g=await As.openEnvironment(r,t),R=As.statDBI(g,o);An.info(`New stats: ${JSON.stringify(E)}. New stats after move: ${JSON.stringify(R)}`),kh.deepStrictEqual(R.entryCount,E.entryCount),await As.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}a(Khe,"processTable");async function Yhe(e,t){As.initializeDBIs(e,Cc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Cc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Cc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Cc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),Fhe.isEmpty(t.user_name)||e.dbis[Cc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[Cc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}a(Yhe,"insertTransaction");function Whe(e,t,r,n){let i=e.dbis[t].get(r);kh.deepStrictEqual(typeof i,"object");let o;if(n){let c={[Cc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Cc.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&&!Bhe.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];PW(e,c,f,r)}else PW(e,c,l,r)}a(Whe,"validateIndices");function PW(e,t,r,n){try{let s=!1,i=xhe.getIndexedValues(r);if(!i)return;for(let o of i)s=e.dbis[t].doesExist(o,n),s||An.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${n}`),kh.deepStrictEqual(s,!0)}catch(s){Hh=!0,An.error(s),console.error(s)}}a(PW,"validateIndex");function zhe(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(zhe,"getHashDBI")});var BW=M((xFe,xW)=>{"use strict";var fy=require("path"),Oc=require("fs-extra"),jhe=cy(),tu=J(),vW=gt(),AP=me(),Ii=(H(),v(z)),my=oe(),Qhe=require("properties-reader"),Jhe=mi(),Xhe=vS(),Zhe=gn(),UFe=require("util"),eEe=Zhe.searchByValue,tEe=Vn(),rEe=JT(),nEe=Ct(),sEe=DW(),MW=ys(),iEe=ay(),$h=new jhe("4.0.0"),UW=[],Gh,qh;async function oEe(){try{if(await iEe.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Gh){let t=my.changeExtension(Gh,".bak");await Oc.move(Gh,t)}if(qh){let t=my.changeExtension(qh,".bak");await Oc.move(qh,t)}await MW.generateKeys()}else console.log("Using existing certificates."),MW.updateConfigCert(Gh,qh,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(oEe,"generateNewKeys");async function aEe(){console.log("Updating HarperDB nodes."),tu.info("Updating HarperDB nodes.");let e=[];try{let t=new Jhe(Ii.SYSTEM_SCHEMA_NAME,Ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await eEe(t)),n=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!nEe.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let d=`Node name '${node_record.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(d),d}let l={host:c.host,port:c.port};e.push(l);let u=[];for(let d=0,f=c.subscriptions.length;d<f;d++){let m=c.subscriptions[d],p=m.channel.split(":");u.push({schema:p[0],table:p[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ii.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(my.isEmptyOrZeroLength(n))return;let s=new Xhe(Ii.SYSTEM_SCHEMA_NAME,Ii.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await tEe.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{rEe.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(aEe,"updateNodes");async function cEe(){let e=AP.get(Ii.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(fy.join("config","settings.js"))){tu.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),tu.info(t);let r=fy.dirname(e),n=AP.get(Ii.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=fy.join(n,"backup","4_0_0_upgrade_settings.bak"),i=fy.join(n,Ii.HDB_CONFIG_FILE);try{tu.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),Oc.copySync(e,s)}catch(f){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),f}try{tu.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),tu.info("Updating env variables with new settings values");let f=vW.initOldConfig(e);Gh=f[Ii.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],qh=f[Ii.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],vW.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let o=my.getPropsFilePath();Oc.accessSync(o,Oc.constants.F_OK|Oc.constants.R_OK);let l=Qhe(o).get(Ii.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
91
91
  install_user = ${l}`;try{Oc.writeFileSync(o,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{AP.initSync(!0)}catch(f){throw console.error("Unable to initialize new properties. Please check the log for details."),f}let d="New settings file for 4.0.0 upgrade successfully created.";try{Oc.removeSync(r),console.log(d),tu.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}a(cEe,"updateSettingsFile400");$h.async_functions.push(cEe);$h.async_functions.push(oEe);$h.async_functions.push(sEe);$h.async_functions.push(aEe);UW.push($h);xW.exports=UW});var GW=M((FFe,HW)=>{var lEe=cy(),{databases:uEe,table:dEe}=(we(),v(ft)),fEe=Xi(),IP=J(),FW=new lEe("4.7.0"),kW=[];async function mEe(){let e=uEe.system?.hdb_license;if(!e){IP.debug?.("system.hdb_license table not found; no migration necessary");return}return IP.debug?.("Dropping existing system.hdb_license table"),await e.dropTable(),IP.debug?.("Creating new usage block system.hdb_license table"),dEe(fEe.hdb_license)}a(mEe,"convertToUsageBlockLicenses");FW.async_functions.push(mEe);kW.push(FW);HW.exports=kW});var wP=M((HFe,YW)=>{"use strict";var ru=oe(),pEe=(H(),v(z)),qW=J(),{DATA_VERSION:hEe,UPGRADE_VERSION:EEe}=pEe.UPGRADE_JSON_FIELD_NAMES_ENUM,$W=NW(),py=BW(),VW=GW(),Pc=new Map;$W&&$W.forEach(e=>{Pc.set(e.version,e)});py&&py.forEach(e=>{Pc.set(e.version,e)});py&&py.forEach(e=>{Pc.set(e.version,e)});VW&&VW.forEach(e=>{Pc.set(e.version,e)});function _Ee(){return[...Pc.keys()].sort(ru.compareVersions)}a(_Ee,"getSortedVersions");function KW(e){let t=e[hEe],r=e[EEe];return ru.isEmptyOrZeroLength(t)||ru.isEmptyOrZeroLength(r)?(qW.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),qW.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."),[]):[...Pc.keys()].sort(ru.compareVersions).filter(function(n){return ru.compareVersions(n,t)>0&&ru.compareVersions(n,r)<=0})}a(KW,"getVersionsForUpgrade");function gEe(e){return KW(e).length>0}a(gEe,"hasUpgradesRequired");function SEe(e){return ru.isEmptyOrZeroLength(e)?null:Pc.has(e)?Pc.get(e):null}a(SEe,"getDirectiveByVersion");YW.exports={getSortedVersions:_Ee,getDirectiveByVersion:SEe,getVersionsForUpgrade:KW,hasUpgradesRequired:gEe}});var Ey=M((qFe,JW)=>{"use strict";var TEe=require("util"),NP=require("chalk"),yEe=require("os"),zW=Vn(),REe=gn(),Is=(H(),v(z)),jW=hW(),OP=Aw(),{UpgradeObject:WW}=gW(),{forceDowngradePrompt:bEe}=ay(),{packageJson:AEe}=yt(),hy=J(),wf=oe(),PP=to(),IEe=(we(),v(ft)),wEe=wP(),NEe=TEe.promisify(PP.setSchemaDataToGlobal),CEe=REe.searchByValue,OEe="info_id",PEe="2.9.9",LEe="3.0.0";async function DEe(e){let t=new jW.HdbInfoInsertObject(1,e,e),r=new OP.InsertObject(Is.OPERATIONS_ENUM.INSERT,Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Is.INFO_TABLE_HASH_ATTRIBUTE,[t]);return PP.setSchemaDataToGlobal(),zW.insert(r)}a(DEe,"insertHdbInstallInfo");async function CP(e){let t,r=await QW(),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 jW.HdbInfoInsertObject(i,e,e);let o=new OP.InsertObject(Is.OPERATIONS_ENUM.INSERT,Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Is.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await NEe(),zW.insert(o)}a(CP,"insertHdbUpgradeInfo");async function QW(){let e=new OP.NoSQLSeachObject(Is.SYSTEM_SCHEMA_NAME,Is.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,OEe,Is.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await CEe(e))}catch(r){console.error(r)}return t}a(QW,"getAllHdbInfoRecords");async function vEe(){let e=await QW();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(vEe,"getLatestHdbInfoRecord");async function MEe(){hy.info("Checking if HDB software has been updated");try{let e=AEe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await vEe(),r;if(wf.isEmpty(t))r=PEe;else if(r=t.data_version_num,wf.compareVersions(r.toString(),e.toString())>0){if(!wf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(NP.yellow(`This instance's data was last run on version ${r}`)),console.error(NP.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.${yEe.EOL}${Is.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");wf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(NP.yellow(`This instance's data was last run on version ${r}`)),await bEe(new WW(r,e))?await CP(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(PP.setSchemaDataToGlobal(),UEe(r),e.toString()===r.toString())return;let n=new WW(r,e);if(wEe.hasUpgradesRequired(n))return n;wf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await CP(n.upgrade_version),hy.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw hy.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),hy.fatal(e),e}}a(MEe,"getVersionUpdateInfo");function UEe(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 ${Is.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in IEe.databases.system))throw console.log(t),new Error(t);if(!wf.isEmpty(e)&&e<LEe)throw console.log(t),new Error(t)}a(UEe,"checkIfInstallIsSupported");JW.exports={insertHdbInstallInfo:DEe,insertHdbUpgradeInfo:CP,getVersionUpdateInfo:MEe}});var tz=M((VFe,ez)=>{"use strict";var _y=require("joi"),{boolean:xEe,string:LP,number:BEe}=_y.types(),XW=require("fs-extra"),Vh=(H(),v(z)),ZW=require("path"),FEe=mt();ez.exports=kEe;function kEe(e){let t=LP.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=_y.object({[Vh.INSTALL_PROMPTS.ROOTPATH]:_y.custom(HEe),[Vh.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:_y.alternatives([BEe.min(0),LP]).allow("null",null),[Vh.INSTALL_PROMPTS.TC_AGREEMENT]:LP.valid("yes","YES","Yes"),[Vh.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Vh.INSTALL_PROMPTS.CLUSTERING_ENABLED]:xEe});return FEe.validateBySchema(e,r)}a(kEe,"installValidator");function HEe(e,t){if(XW.existsSync(ZW.join(e,"system/hdb_user/data.mdb"))||XW.existsSync(ZW.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(HEe,"validateRootAvailable")});var nz=M((YFe,rz)=>{"use strict";var{mkdirpSync:GEe,copySync:qEe}=require("fs-extra"),Lc=require("path"),Kh=(H(),v(z)),{PACKAGE_ROOT:$Ee}=yt(),vP=J(),VEe=fs(),DP=Xi(),KEe=Rt(),{NON_REPLICATING_SYSTEM_TABLES:YEe}=(we(),v(ft));rz.exports=WEe;async function WEe(e){vP.trace("Mounting HarperDB"),nu(e),nu(Lc.join(e,"backup")),nu(Lc.join(e,"keys")),nu(Lc.join(e,"keys",Kh.LICENSE_FILE_NAME)),nu(Lc.join(e,"log")),nu(Lc.join(e,"database")),nu(Lc.join(e,"components")),qEe(Lc.resolve($Ee,"./utility/install/README.md"),Lc.join(e,"README.md")),await zEe()}a(WEe,"mountHdb");async function zEe(){let e=hp(),t=Object.keys(DP);for(let r of t){let n=DP[r].hash_attribute;try{KEe.initSystemSchemaPaths(Kh.SYSTEM_SCHEMA_NAME,r);let s=new e(Kh.SYSTEM_SCHEMA_NAME,r,n);s.attributes=DP[r].attributes;let i=s.attributes.find(({attribute:o})=>o===n);i.isPrimaryKey=!0,YEe.includes(r)||(s.audit=!0),await VEe.createTable(r,s)}catch(s){throw vP.error(`issue creating environment for ${Kh.SYSTEM_SCHEMA_NAME}.${r}: ${s}`),s}}}a(zEe,"createLMDBTables");function nu(e){GEe(e,{mode:Kh.HDB_FILE_PERMISSIONS}),vP.info(`Directory ${e} created`)}a(nu,"makeDirectory")});var _z=M((QFe,Ez)=>{"use strict";var xP=require("os"),cz=require("inquirer"),Js=require("fs-extra"),jEe=require("properties-reader"),iu=require("chalk"),To=require("path"),QEe=require("human-readable-ids").hri,MP,JEe=require("yaml"),Sr=J(),Dc=me(),Yh=oe(),Sy=Qc(),lz=Ey(),{packageJson:uz}=yt(),he=(H(),v(z)),{CONFIG_PARAM_MAP:zFe,CONFIG_PARAMS:qt}=he,XEe=tz(),ZEe=nz(),BP=gt(),e_e=Es(),t_e=Jp(),r_e=EP(),n_e=to(),s_e=require("util").promisify,i_e=s_e(n_e.setSchemaDataToGlobal),sz=ys(),su=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),ln=a(e=>iu.magenta.bold(e),"HDB_PROMPT_MSG"),o_e="https://harperdb.io/legal/end-user-license-agreement",vc=xP.EOL,Ea="",a_e="yes",iz="Starting HarperDB install...",oz="HarperDB installation was successful.",az="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",c_e="An out of date version of HarperDB is already installed.",UP="It appears that HarperDB is already installed. Exiting install...",l_e="Aborting install",jFe=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])$/),u_e=new RegExp(/^[^\s.,*>]+$/),d_e=xP.homedir(),f_e=To.join(d_e,he.HDB_ROOT_DIR_NAME),m_e="HDB_ADMIN",p_e="CLUSTER_USER",h_e="dev",E_e="localhost",gy={[qt.HTTP_CORS]:!0,[qt.HTTP_CORSACCESSLIST]:["*"],[qt.HTTP_PORT]:9926,[qt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[qt.THREADS_COUNT]:1,[qt.THREADS_DEBUG]:!0,[qt.LOGGING_STDSTREAMS]:!0,[qt.LOGGING_LEVEL]:"info",[qt.OPERATIONSAPI_NETWORK_PORT]:9925,[qt.LOCALSTUDIO_ENABLED]:!0},cn={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:"},Mc=Sy([he.INSTALL_PROMPTS.HDB_CONFIG]),So,dz=!1,FP=!1,fz=!1;Ez.exports={install:mz,updateConfigEnv:N_e,setIgnoreExisting:C_e};mz.createSuperUser=hz;async function mz(){console.log(ln(vc+iz+vc)),Sr.notify(iz);let e;Mc[he.INSTALL_PROMPTS.HDB_CONFIG]&&(e=__e());let t=S_e();Object.assign(t,e),t[he.INSTALL_PROMPTS.TC_AGREEMENT]&&t[he.INSTALL_PROMPTS.ROOTPATH]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[he.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(fz=!0,t[he.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=XEe(t);if(r)throw r.message;await T_e(),await y_e(t);let n=await g_e(t);So=n[he.INSTALL_PROMPTS.ROOTPATH],Mc[he.INSTALL_PROMPTS.HDB_CONFIG]&&To.dirname(Mc[he.INSTALL_PROMPTS.HDB_CONFIG])===So&&(dz=!0),!FP&&!Mc[he.INSTALL_PROMPTS.HDB_CONFIG]&&await Js.pathExists(To.join(So,he.HDB_CONFIG_FILE))&&(console.error(UP),process.exit()),MP||(MP=(await import("ora")).default);let s=MP({prefixText:ln("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Yh.isEmpty(So))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Dc.setHdbBasePath(So),await ZEe(So),await R_e(),await b_e(n),Sr.initLogSettings(!0),await hz(n),await I_e(n),await sz.updateConfigCert(),await sz.generateCertsKeys(),await w_e(),r_e(),s.stop(),console.log(ln(vc+oz+vc)),Sr.notify(oz)}a(mz,"install");function __e(){let e=JEe.parseDocument(Js.readFileSync(Mc[he.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=BP.flattenConfig(e.toJSON());return t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[he.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(__e,"getConfigFromFile");async function g_e(e){Sr.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:su,when:_a(e[he.INSTALL_PROMPTS.ROOTPATH],cn.DESTINATION),name:he.INSTALL_PROMPTS.ROOTPATH,prefix:Ea,default:f_e,validate:a(async s=>Qs(s)?Qs(s):await Js.pathExists(To.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:ln(cn.DESTINATION)},{type:"input",transformer:su,when:_a(e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],cn.HDB_USERNAME),name:he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Ea,default:m_e,validate:a(s=>Qs(s)?Qs(s):(t=s,!0),"validate"),message:ln(cn.HDB_USERNAME)},{type:"password",when:_a(e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],cn.HDB_PASS),name:he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Ea,validate:a(s=>Qs(s)?Qs(s):!0,"validate"),message:ln(cn.HDB_PASS)},{type:"input",transformer:su,when:_a(e[he.INSTALL_PROMPTS.DEFAULTS_MODE],cn.DEFAULTS_MODE),name:he.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:Ea,default:h_e,validate:a(s=>Qs(s)?Qs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:ln(cn.DEFAULTS_MODE)}];if(fz||r.push({type:"input",name:he.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:su,when:_a(e[he.INSTALL_PROMPTS.REPLICATION_HOSTNAME],cn.REPLICATION_HOSTNAME),prefix:Ea,default:E_e,message:ln(cn.REPLICATION_HOSTNAME)}),Yh.autoCastBoolean(e[he.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:su,when:_a(e[he.INSTALL_PROMPTS.CLUSTERING_NODENAME],cn.NODE_NAME),name:he.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Ea,default:QEe.random(),validate:a(i=>u_e.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:ln(cn.NODE_NAME)},{type:"input",transformer:su,when:_a(e[he.INSTALL_PROMPTS.CLUSTERING_USER],cn.CLUSTER_USERNAME),name:he.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Ea,default:p_e,validate:a(i=>Qs(i)?Qs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:ln(cn.CLUSTER_USERNAME)},{type:"password",when:_a(e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD],cn.CLUSTER_PASS),name:he.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Ea,validate:a(i=>Qs(i)?Qs(i):!0,"validate"),message:ln(cn.CLUSTER_PASS)}];r.push(...s)}let n=await cz.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(g_e,"installPrompts");function _a(e,t){return e!==void 0?(t.includes("password")?(console.log(`${ln(t)} ${iu.gray("[hidden]")}`),Sr.trace(`${ln(t)} [hidden]`)):(console.log(`${ln(t)} ${e}`),Sr.trace(`${ln(t)} ${e}`)),!1):!0}a(_a,"displayCmdEnvVar");function Qs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Qs,"checkForEmptyValue");function S_e(){let e=Object.keys(he.INSTALL_PROMPTS),t=Sy(e),r=Sy(Object.keys(he.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=he.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}a(S_e,"checkForPromptOverride");async function T_e(){Sr.trace("Checking for existing install.");let e=Yh.getPropsFilePath(),t=await Js.pathExists(e),r;if(t){Sr.trace(`Install found an existing boot prop file at:${e}`);let n=jEe(e),s=BP.getConfigValue(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(he.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Js.pathExists(s)}if(!t&&Yh.noBootFile()&&(r=!0),r&&!FP){if(Sr.trace(`Install found existing HDB config at:${e}`),await lz.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${uz.version}. Exiting install...`;console.log(vc+iu.magenta.bold(c_e)),console.log(iu.magenta.bold(s)),Sr.error(s)}else console.log(vc+iu.magenta.bold(UP)),Sr.error(UP);process.exit(0)}}a(T_e,"checkForExistingInstall");async function y_e(e){Sr.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${o_e}${vc}and can be viewed by typing or copying and pasting the URL into your web browser.${vc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:Ea,transformer:su,when:_a(e[he.INSTALL_PROMPTS.TC_AGREEMENT],t),name:he.INSTALL_PROMPTS.TC_AGREEMENT,message:ln(t),validate:a(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:iu.yellow("Please enter 'yes' or 'no'"),"validate")},n=await cz.prompt([r]);n[he.INSTALL_PROMPTS.TC_AGREEMENT]&&n[he.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==a_e&&(console.log(iu.yellow(az)),Sr.error(az),process.exit(0))}a(y_e,"termsAgreement");async function R_e(){let e=To.join(So,he.HDB_CONFIG_FILE),t;try{t=xP.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}
92
- install_user = ${t}`,n=Yh.getHomeDir(),s=To.join(n,he.HDB_HOME_DIR_NAME),i=To.join(s,he.LICENSE_KEY_DIR_NAME);try{Js.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),Js.mkdirpSync(i,{mode:he.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${he.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=To.join(s,he.BOOT_PROPS_FILE_NAME);try{await Js.writeFile(o,r)}catch(c){throw Sr.error(`There was an error creating the boot file at path: ${o}`),c}Dc.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Dc.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Dc.setProperty(Dc.BOOT_PROPS_FILE_PATH,o)}}a(R_e,"createBootPropertiesFile");async function b_e(e){Sr.trace("Creating HarperDB config file");let t=Sy(Object.keys(he.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[he.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in gy){if(r===qt.HTTP_PORT&&t[qt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??gy[r],t[qt.HTTP_SECUREPORT]=null;continue}else if(r===qt.HTTP_PORT)continue;if(r===qt.OPERATIONSAPI_NETWORK_PORT&&t[qt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??gy[r],t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===qt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=gy[r])}}else t[qt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[qt.HTTP_PORT.toLowerCase()]&&(t[qt.HTTP_SECUREPORT]=null);try{Mc[he.INSTALL_PROMPTS.HDB_CONFIG]||BP.createConfigFile(t),Dc.initSync()}catch(r){A_e(r)}}a(b_e,"createConfigFile");function A_e(e){Sr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(l_e);let t=To.resolve(Dc.get(Dc.BOOT_PROPS_FILE_PATH),"../");t&&Js.removeSync(t),So&&(dz?Js.readdirSync(So,{withFileTypes:!0}).forEach(n=>{let s=To.join(n.path,n.name);s!==Mc[he.INSTALL_PROMPTS.HDB_CONFIG]&&Js.removeSync(s)}):Js.removeSync(So)),process.exit(1)}a(A_e,"rollbackInstall");async function pz(e,t){Sr.trace("Creating admin user"),await i_e();let r;try{r=await t_e.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 e_e.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(pz,"createAdminUser");async function hz(e){Sr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await pz(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(hz,"createSuperUser");async function I_e(e){Sr.trace("Creating Cluster user.");let t;e[he.INSTALL_PROMPTS.CLUSTERING_USER]&&e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[he.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await pz({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(I_e,"createClusterUser");async function w_e(){let e=uz.version;if(e)await lz.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(w_e,"insertHdbVersionInfo");function N_e(e){Mc[he.INSTALL_PROMPTS.HDB_CONFIG]=e}a(N_e,"updateConfigEnv");function C_e(e){FP=e}a(C_e,"setIgnoreExisting")});var HP={};ye(HP,{isHdbInstalled:()=>O_e});function O_e(e,t){try{kP.default.statSync((0,Ty.getPropsFilePath)()),kP.default.statSync(e.get(gm.SETTINGS_PATH_KEY))}catch(r){if((0,Ty.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var kP,Ty,GP=ne(()=>{H();kP=b(require("node:fs")),Ty=b(oe());a(O_e,"isHdbInstalled")});var Tz=M((ZFe,Sz)=>{"use strict";var qP=oe(),ws=J(),gz=wP();Sz.exports={processDirectives:P_e};async function P_e(e){console.log("Starting upgrade process...");let t=gz.getVersionsForUpgrade(e),r=v_e(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ws.notify(c),console.log(c);let l=[],u=[];try{l=L_e(o.sync_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await D_e(o.async_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(P_e,"processDirectives");function L_e(e){if(qP.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ws.info(`Running function ${r.name}`),!(r instanceof Function)){ws.info("Variable being processed is not a function");continue}let n=r();ws.info(n),t.push(n)}return t}a(L_e,"runSyncFunctions");async function D_e(e){if(qP.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ws.info(`Running function ${s.name}`),!(s instanceof Function)){ws.info("Variable being processed is not a function");continue}let i=await s();ws.info(i),t.push(i)}return t}a(D_e,"runAsyncFunctions");function v_e(e){if(qP.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=gz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(v_e,"getUpgradeDirectivesToInstall")});var wz=M((rke,Iz)=>{"use strict";var bz=me();bz.initSync();var M_e=require("chalk"),ga=J(),Nf=(H(),v(z)),U_e=Tz(),tke=oe(),x_e=(GP(),v(HP)),Az=Ey(),B_e=ay(),F_e=to(),{packageJson:yz}=yt(),k_e=require("util").promisify,H_e=k_e(F_e.setSchemaDataToGlobal),Rz,{UPGRADE_VERSION:$P}=Nf.UPGRADE_JSON_FIELD_NAMES_ENUM;Iz.exports={upgrade:G_e};async function G_e(e){await H_e(),Rz===void 0&&(Rz=yf()),x_e.isHdbInstalled(bz,ga)||(yy("Harper is not installed. Harper must be installed before running an upgrade.",Nf.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await Az.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),yy(`This version of HarperDB is ${yz.version}`,Nf.LOG_LEVELS.INFO);let n=r[$P]??yz.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Nf.HDB_SUPPORT_ADDRESS}`),ga.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await B_e.forceUpdatePrompt(r)}catch(o){ga.error("There was an error when prompting user about upgrade."),ga.error(o),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),ga.info(`Starting upgrade to version ${n}`),await q_e(r),yy(`HarperDB was successfully upgraded to version ${r[$P]}`,Nf.LOG_LEVELS.INFO)}a(G_e,"upgrade");async function q_e(e){try{await U_e.processDirectives(e)}catch(t){throw yy("There was an error during the data upgrade. Please check the logs.",Nf.LOG_LEVELS.ERROR),t}try{await Az.insertHdbUpgradeInfo(e[$P])}catch(t){ga.error("Error updating the 'hdb_info' system table."),ga.error(t)}}a(q_e,"runUpgrade");function yy(e,t=void 0){t||(t=ga.info),ga[t](e),console.log(M_e.magenta(e))}a(yy,"printToLogAndConsole")});var Nz={};ye(Nz,{SERVERS:()=>Cf,portServer:()=>VP,setPortServerMap:()=>Ry});function Ry(e,t){let r=VP.get(e)??[];VP.set(e,[...r,t])}var Cf,VP,KP=ne(()=>{Cf={},VP=new Map;a(Ry,"setPortServerMap")});function V_e(e){if(typeof e!="string")throw new by(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new by(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new Of(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=$_e.getKey();if(!(0,Iy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new WP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function K_e(e){if(e?.typ!=="Harper-License")throw new Wh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new Wh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function Y_e(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function W_e(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!Y_e(t[r],e[r]))throw new Ay(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function Oz(e){let{header:t,payload:r}=V_e(e),n;try{n=JSON.parse(t)}catch(i){let o=new Wh;throw o.cause=i,o}K_e(n);let s;try{s=JSON.parse(r)}catch(i){let o=new Ay;throw o.cause=i,o}return W_e(s),s}var Iy,Cz,YP,by,Of,WP,Wh,Ay,$_e,Pz=ne(()=>{Iy=require("node:crypto"),Cz=b(me());H();YP=class{static{a(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
92
+ install_user = ${t}`,n=Yh.getHomeDir(),s=To.join(n,he.HDB_HOME_DIR_NAME),i=To.join(s,he.LICENSE_KEY_DIR_NAME);try{Js.mkdirpSync(s,{mode:he.HDB_FILE_PERMISSIONS}),Js.mkdirpSync(i,{mode:he.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${he.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=To.join(s,he.BOOT_PROPS_FILE_NAME);try{await Js.writeFile(o,r)}catch(c){throw Sr.error(`There was an error creating the boot file at path: ${o}`),c}Dc.setProperty(he.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Dc.setProperty(he.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Dc.setProperty(Dc.BOOT_PROPS_FILE_PATH,o)}}a(R_e,"createBootPropertiesFile");async function b_e(e){Sr.trace("Creating HarperDB config file");let t=Sy(Object.keys(he.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[he.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in gy){if(r===qt.HTTP_PORT&&t[qt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??gy[r],t[qt.HTTP_SECUREPORT]=null;continue}else if(r===qt.HTTP_PORT)continue;if(r===qt.OPERATIONSAPI_NETWORK_PORT&&t[qt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??gy[r],t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===qt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=gy[r])}}else t[qt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[qt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[qt.HTTP_PORT.toLowerCase()]&&(t[qt.HTTP_SECUREPORT]=null);try{Mc[he.INSTALL_PROMPTS.HDB_CONFIG]||BP.createConfigFile(t),Dc.initSync()}catch(r){A_e(r)}}a(b_e,"createConfigFile");function A_e(e){Sr.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(l_e);let t=To.resolve(Dc.get(Dc.BOOT_PROPS_FILE_PATH),"../");t&&Js.removeSync(t),So&&(dz?Js.readdirSync(So,{withFileTypes:!0}).forEach(n=>{let s=To.join(n.path,n.name);s!==Mc[he.INSTALL_PROMPTS.HDB_CONFIG]&&Js.removeSync(s)}):Js.removeSync(So)),process.exit(1)}a(A_e,"rollbackInstall");async function pz(e,t){Sr.trace("Creating admin user"),await i_e();let r;try{r=await t_e.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 e_e.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}a(pz,"createAdminUser");async function hz(e){Sr.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await pz(t,r),delete e[he.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[he.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(hz,"createSuperUser");async function I_e(e){Sr.trace("Creating Cluster user.");let t;e[he.INSTALL_PROMPTS.CLUSTERING_USER]&&e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[he.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await pz({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[he.INSTALL_PROMPTS.CLUSTERING_USER],delete e[he.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(I_e,"createClusterUser");async function w_e(){let e=uz.version;if(e)await lz.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(w_e,"insertHdbVersionInfo");function N_e(e){Mc[he.INSTALL_PROMPTS.HDB_CONFIG]=e}a(N_e,"updateConfigEnv");function C_e(e){FP=e}a(C_e,"setIgnoreExisting")});var HP={};ye(HP,{isHdbInstalled:()=>O_e});function O_e(e,t){try{kP.default.statSync((0,Ty.getPropsFilePath)()),kP.default.statSync(e.get(gm.SETTINGS_PATH_KEY))}catch(r){if((0,Ty.noBootFile)())return!0;if(r.code==="ENOENT")return!1;throw t.error(`Error checking for HDB install - ${r}`),r}return!0}var kP,Ty,GP=se(()=>{H();kP=b(require("node:fs")),Ty=b(oe());a(O_e,"isHdbInstalled")});var Tz=M((ZFe,Sz)=>{"use strict";var qP=oe(),ws=J(),gz=wP();Sz.exports={processDirectives:P_e};async function P_e(e){console.log("Starting upgrade process...");let t=gz.getVersionsForUpgrade(e),r=v_e(t),n=[],s=r.length;for(let i=0;i<s;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;ws.notify(c),console.log(c);let l=[],u=[];try{l=L_e(o.sync_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}try{u=await D_e(o.async_functions)}catch(d){throw ws.error(`Error while running an upgrade script for ${o.version}`),d}n.push(...l,...u)}return n}a(P_e,"processDirectives");function L_e(e){if(qP.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(ws.info(`Running function ${r.name}`),!(r instanceof Function)){ws.info("Variable being processed is not a function");continue}let n=r();ws.info(n),t.push(n)}return t}a(L_e,"runSyncFunctions");async function D_e(e){if(qP.isEmptyOrZeroLength(e))return ws.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return ws.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(ws.info(`Running function ${s.name}`),!(s instanceof Function)){ws.info("Variable being processed is not a function");continue}let i=await s();ws.info(i),t.push(i)}return t}a(D_e,"runAsyncFunctions");function v_e(e){if(qP.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=gz.getDirectiveByVersion(r);n&&t.push(n)}return t}a(v_e,"getUpgradeDirectivesToInstall")});var wz=M((rke,Iz)=>{"use strict";var bz=me();bz.initSync();var M_e=require("chalk"),ga=J(),Nf=(H(),v(z)),U_e=Tz(),tke=oe(),x_e=(GP(),v(HP)),Az=Ey(),B_e=ay(),F_e=to(),{packageJson:yz}=yt(),k_e=require("util").promisify,H_e=k_e(F_e.setSchemaDataToGlobal),Rz,{UPGRADE_VERSION:$P}=Nf.UPGRADE_JSON_FIELD_NAMES_ENUM;Iz.exports={upgrade:G_e};async function G_e(e){await H_e(),Rz===void 0&&(Rz=yf()),x_e.isHdbInstalled(bz,ga)||(yy("Harper is not installed. Harper must be installed before running an upgrade.",Nf.LOG_LEVELS.ERROR),process.exit(1));let r=e;r||(r=await Az.getVersionUpdateInfo(),r||(console.log("HarperDB version is current"),process.exit(0))),yy(`This version of HarperDB is ${yz.version}`,Nf.LOG_LEVELS.INFO);let n=r[$P]??yz.version;n||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Nf.HDB_SUPPORT_ADDRESS}`),ga.notify("Missing new version field from upgrade info object"),process.exit(1));let s,i=0;try{s=await B_e.forceUpdatePrompt(r)}catch(o){ga.error("There was an error when prompting user about upgrade."),ga.error(o),s=!1,i=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(i)),ga.info(`Starting upgrade to version ${n}`),await q_e(r),yy(`HarperDB was successfully upgraded to version ${r[$P]}`,Nf.LOG_LEVELS.INFO)}a(G_e,"upgrade");async function q_e(e){try{await U_e.processDirectives(e)}catch(t){throw yy("There was an error during the data upgrade. Please check the logs.",Nf.LOG_LEVELS.ERROR),t}try{await Az.insertHdbUpgradeInfo(e[$P])}catch(t){ga.error("Error updating the 'hdb_info' system table."),ga.error(t)}}a(q_e,"runUpgrade");function yy(e,t=void 0){t||(t=ga.info),ga[t](e),console.log(M_e.magenta(e))}a(yy,"printToLogAndConsole")});var Nz={};ye(Nz,{SERVERS:()=>Cf,portServer:()=>VP,setPortServerMap:()=>Ry});function Ry(e,t){let r=VP.get(e)??[];VP.set(e,[...r,t])}var Cf,VP,KP=se(()=>{Cf={},VP=new Map;a(Ry,"setPortServerMap")});function V_e(e){if(typeof e!="string")throw new by(`License must be a string; received ${typeof e}: ${e}`);let t;try{t=e.split(".")}catch(l){let u=new by(`Unable to split license into components; license must be a string with three dot-separated parts; got: ${e}`);throw u.cause=l,u}if(t.length!==3)throw new Of(`License must have three dot-separated parts; got ${t.length}`);let[r,n,s]=t,i=$_e.getKey();if(!(0,Iy.verify)(null,Buffer.from(r+"."+n,"utf8"),i,Buffer.from(s,"base64url")))throw new WP("License signature is invalid");return{header:c(r),payload:c(n),signature:c(s)};function c(l){return Buffer.from(l,"base64url").toString("utf8")}}function K_e(e){if(e?.typ!=="Harper-License")throw new Wh(`Invalid license header; typ must be 'Harper-License'; got: ${e?.typ}`);if(e?.alg!=="EdDSA")throw new Wh(`Invalid license header; alg must be 'EdDSA'; got: ${e?.alg}`)}function Y_e(e,t){return e.required?typeof t===e.type:typeof t>"u"||typeof t===e.type}function W_e(e){let t={id:{required:!0,type:"string"},region:{required:!1,type:"string"},expiration:{required:!0,type:"string"},level:{required:!0,type:"number"},reads:{required:!0,type:"number"},writes:{required:!0,type:"number"},readBytes:{required:!0,type:"number"},writeBytes:{required:!0,type:"number"},realTimeMessages:{required:!0,type:"number"},realTimeBytes:{required:!0,type:"number"},cpuTime:{required:!0,type:"number"},storage:{required:!0,type:"number"},autoRenew:{required:!1,type:"boolean"}};for(let r in t){let{required:n,type:s}=t[r],i=n?`required attribute '${r}'`:`optional attribute '${r}', when present,`;if(!Y_e(t[r],e[r]))throw new Ay(`Invalid license payload; ${i} must be a ${s}; got: ${typeof e[r]}`)}}function Oz(e){let{header:t,payload:r}=V_e(e),n;try{n=JSON.parse(t)}catch(i){let o=new Wh;throw o.cause=i,o}K_e(n);let s;try{s=JSON.parse(r)}catch(i){let o=new Ay;throw o.cause=i,o}return W_e(s),s}var Iy,Cz,YP,by,Of,WP,Wh,Ay,$_e,Pz=se(()=>{Iy=require("node:crypto"),Cz=b(me());H();YP=class{static{a(this,"PublicKey")}pem;constructor(t){t&&(t==="test"||t==="development")?this.pem=`-----BEGIN PUBLIC KEY-----
93
93
  MCowBQYDK2VwAyEAO301jvpO12znGdK/Izrre518pgmQNk9hSMXf4wDMucM=
94
94
  -----END PUBLIC KEY-----
95
95
  `:this.pem=`-----BEGIN PUBLIC KEY-----
96
96
  MCowBQYDK2VwAyEAMtpzMn9YfS0fGaDLcAmYQx2OH8kVevwbNyQ1RIj5cvw=
97
97
  -----END PUBLIC KEY-----
98
- `}getKey(){return(0,Iy.createPublicKey)(this.pem)}toString(){return this.pem}},by=class extends TypeError{static{a(this,"LicenseEncodingError")}},Of=class extends TypeError{static{a(this,"InvalidLicenseError")}},WP=class extends Of{static{a(this,"InvalidLicenseSignatureError")}},Wh=class extends Of{static{a(this,"InvalidHeaderError")}},Ay=class extends Of{static{a(this,"InvalidPayloadError")}},$_e=new YP(Cz.get(F.LICENSE_MODE));a(V_e,"validateLicenseSignature");a(K_e,"validateLicenseHeader");a(Y_e,"valid");a(W_e,"validateLicensePayload");a(Oz,"validateLicense")});var wy={};ye(wy,{getActiveLicense:()=>XP,getUsageLicenses:()=>Hz,getUsageLicensesOp:()=>eL,installUsageLicense:()=>JP,installUsageLicenseOp:()=>QP,isActiveLicense:()=>Fz,isLicensed:()=>ZP,loadAndWatchLicensesDir:()=>Q_e,recordUsage:()=>kz});async function QP(e){let t=e.license;try{await JP(t)}catch(r){let n=new vz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function JP(e){let t=Oz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new jP(`A usage license with ${r} already exists`);return yo.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function Fz(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function XP(){let e=Mz.get(F.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(Fz(n))return n}async function ZP(){return await XP()!==void 0}async function kz(e){Sa=yo.forComponent("license"),Sa.trace?.("Recording usage into license from analytics");let t,r=(await XP())?.id;if(r){Sa.trace?.("Found license to record usage into:",r);let n={};bt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(Sa.trace?.("Processing analytics record:",s),s.metric){case"db-read":Sa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Sa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Sa.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Sa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Sa.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Lz||(console.error(n),Lz=!0),Dz===void 0&&(Dz=setInterval(()=>{yo.notify(n)},z_e).unref())}}function eL(e){let t={};return e.region&&(t.region=e.region),Hz(t)}function Hz(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function j_e(e){yo.trace?.("Loading usage license from file:",e);let t=await xz.readFile(e,{encoding:"utf-8"});try{await JP(t)}catch(r){yo.error?.("Failed to install usage license from file:",e,r)}}function Q_e(){let e=zP.default.join(zP.default.dirname(Uz.getConfigFilePath()),"licenses");(0,Bz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",j_e)}var vz,yo,Mz,zP,Uz,xz,Bz,jP,Lz,Dz,z_e,Sa,zh=ne(()=>{Pz();vz=b(_e()),yo=b(J());is();Ga();Mz=b(me());H();we();zP=b(require("node:path")),Uz=b(gt()),xz=b(require("node:fs/promises")),Bz=require("chokidar"),jP=class extends Error{static{a(this,"ExistingLicenseError")}};a(QP,"installUsageLicenseOp");a(JP,"installUsageLicense");Lz=!1,z_e=6e5;a(Fz,"isActiveLicense");a(XP,"getActiveLicense");a(ZP,"isLicensed");a(kz,"recordUsage");kA(kz);a(eL,"getUsageLicensesOp");a(Hz,"getUsageLicenses");a(j_e,"loadLicenseFile");a(Q_e,"loadAndWatchLicensesDir")});var Dy={};ye(Dy,{deliverSocket:()=>Xz,getHttpOptions:()=>ege,getRequestId:()=>rj,handleApplication:()=>Z_e,httpServer:()=>cL,logRequest:()=>Jh,proxyRequest:()=>tge,registerServer:()=>oL,suppressHandleApplicationWarning:()=>X_e});function Z_e(e){Xh=e.options.getAll(),e.options.on("change",t=>{Xh=e.options.getAll()})}function ege(){return Xh}function Xz(e,t,r){let n=e?.read?e:new Kz.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Cf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Cf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ta.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function tge(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Gz.get(s),r){case"connection":i=Xz(void 0,t),Gz.set(s,i),i.write=(c,l,u)=>(Cy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Cy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Cy.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function oL(e,t,r=!0){t||(t=Dr.default.get(F.HTTP_PORT));let n=Cf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",Vz),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Cf[t]=e;e.on("unhandled",Vz)}function aL(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=[],Dr.default.get(F.HTTP_PORT)!=null&&t.push({port:Dr.default.get(F.HTTP_PORT),secure:Dr.default.get(F.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dr.default.get(F.HTTP_SECUREPORT)!=null&&t.push({port:Dr.default.get(F.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Dr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Yz.resolvePath)(Dr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function cL(e,t){let r=[];for(let{port:n,secure:s}of aL(t))r.push(Zz(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?sL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,oL(e,n,!1)),Oy[n]=Py(sL,n);return r}function Zz(e,t,r,n){if(Ry(e,{protocol_name:t?"HTTPS":"HTTP",name:vy()}),!Ny[e]){let s=r?"operationsApi_network":"http",i=Dr.default.get(s+"_keepAliveTimeout"),o=Dr.default.get(s+"_timeout"),c=Dr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Dr.default.get(F.HTTP_MAXHEADERSIZE)},u=Dr.default.get(s+"_mtls"),d=Dr.default.get(s+"_mtls_required"),f;if(t){let E=Dr.default.get("tls");f=Dr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,Wz.getTicketKeys)(),SNICallback:(0,zz.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,g)=>{let R=performance.now(),S=0;try{let N=new cc(E,g);r&&(N.isOperationsServer=!0),Xh.logging?.id&&(N.requestId=S=rj());let I=await Oy[e](N);if(!I){if(N._nodeResponse.statusCode){Jh(E,N._nodeResponse.statusCode,S,performance.now()-R);return}I=ej(N)}if(I.headers?.set||(I.headers=new Gs(I.headers)),await ZP()?I.headers.set("Server","HarperDB"):I.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),I.status===-1){for(let te of I.headers||[])g.setHeader(te[0],te[1]);return E.baseRequest=N,g.baseResponse=I,Ny[e].emit("unhandled",E,g)}let $=I.status||200;g.statusCode=$;let ee=performance.now(),G=ee-R,k=I.body,j,Y=!1;if(!I.handlesHeaders){let te=I.headers||new Gs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),j=!0):k instanceof Ms&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",be=>{g.headersSent||g.setHeader("Content-Length",be)})),k=k.stream()):(te.set("Content-Length","0"),j=!0);let ge=`hdb;dur=${G.toFixed(2)}`;if(I.wasCacheMiss&&(ge+=", miss"),Fp(te,"Server-Timing",ge,!0),!g.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[be,Ye]of te)g.setHeader(be,Ye);else for(let be in te)g.setHeader(be,te[be])}else g.writeHead($,te&&(te[Symbol.iterator]?Array.from(te):te));j&&g.end(k)}let ce=N.handlerPath,de=N.method;if(Ve(G,"duration",ce,de,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),tn($<400,"success",ce,de),tn(1,"response_"+$,ce,de),Jh(E,$,S,G),!j)if(k instanceof ReadableStream&&(k=nL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=nL.Readable.from(k)),k?.pipe){k.pipe(g),k.destroy&&g.on("close",()=>{k.destroy()});let te=0;k.on("data",ge=>{te+=ge.length}),k.on("end",()=>{Ve(performance.now()-ee,"transfer",ce,de),Ve(te,"bytes-sent",ce,de)})}else k?.then?k.then(te=>{g.end(te)},y):g.end(k)}catch(N){y(N)}function y(N){let I=N.headers,$=N.statusCode||500;g.writeHead($,I&&(I[Symbol.iterator]?Array.from(I):I)),g.end(J_e(N)),Jh(E,$,S,performance.now()-R),N.statusCode?N.statusCode===500?Ta.default.warn(N):Ta.default.info(N):Ta.default.error(N)}a(y,"onError")},"requestHandler"),p=oS(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Ve(!0,"service-unavailable",e)},Dr.default.get(s+"_requestQueueLimit")),h=Ny[e]=(t?f?jz.createSecureServer:Qz.createServer:Ly.createServer)(l,(E,g)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Ve(performance.now()-E._parent.startTime,"tls-handshake",e),Ve(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),oL(h,e)}return Ny[e]}function Py(e,t){let r=ej;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),"nextCallback")}}return r}function ej(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Gs}}function rge(e,t){cL(e,{requestOnly:!0,...t})}function tj(e,t){for(let{port:r}of aL(t))qz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),iL[r]=Py(qz,r)}function nge(e,t){let r=[];for(let{port:n,secure:s}of aL(t)){Ry(n,{protocol_name:s?"WSS":"WS",name:vy()});let i=Zz(n,s,t?.isOperationsServer,t?.mtls);jh[n]||(jh[n]=new Jz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),jh[n].on("connection",(o,c)=>{try{let l=new cc(c);l.isWebSocket=!0;let u=Oy[n](l);Ta.default.debug("Received WS connection, calling listeners",tL),$z[n](o,l,u)}catch(l){Ta.default.warn("Error in handling WS connection",l)}}),tj((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):jh[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),jh[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{iL[n]&&iL[n](o,c,l)})),r.push(i),tL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),$z[n]=Py(tL,n),Oy[n]=Py(sL,n)}return r}function Vz(e,t){t.writeHead(404),t.end(`Not found
99
- `),Jh(e,404,0,e.requestId)}function Jh(e,t,r,n){let s=Xh.logging;if(s){rL||(rL=Ta.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";rL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+sge(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function sge(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function rj(){return Qh||(Qh=new BigInt64Array([1n]),Qh=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",Qh.buffer))),Number(Atomics.add(Qh,0,1n))}var Kz,Ta,Cy,Dr,Yz,Wz,zz,jz,Qz,Ly,nL,Jz,J_e,jh,Ny,Oy,sL,Xh,X_e,Gz,qz,iL,tL,$z,rL,Qh,lL=ne(()=>{Kz=require("node:net"),Ta=b(J()),Cy=require("node:worker_threads"),Dr=b(me());H();Yz=b(gt()),Wz=b(nt()),zz=b(ys()),jz=require("node:http2"),Qz=require("node:https"),Ly=require("node:http");Zp();kp();ss();is();nL=require("node:stream");Hr();KP();Zh();_N();Jz=require("ws");zh();({errorToString:J_e}=Ta.default);Be.http=cL;Be.request=rge;Be.ws=nge;Be.upgrade=tj;jh={},Ny={},Oy={},sL=[],Xh={},X_e=!0;a(Z_e,"handleApplication");a(ege,"getHttpOptions");a(Xz,"deliverSocket");Gz=new Map;a(tge,"proxyRequest");a(oL,"registerServer");a(aL,"getPorts");a(cL,"httpServer");a(Zz,"getHTTPServer");a(Py,"makeCallbackChain");a(ej,"unhandled");a(rge,"onRequest");Object.defineProperty(Ly.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});qz=[],iL={};a(tj,"onUpgrade");tL=[],$z={};a(nge,"onWebSocket");a(Vz,"defaultNotFound");a(Jh,"logRequest");a(sge,"headersToString");a(rj,"getRequestId")});var dL=M(tE=>{"use strict";Gb();var{isMainThread:uL,parentPort:nj,threadId:My,workerData:ige}=require("node:worker_threads"),{createServer:oge}=require("node:net"),{unlinkSync:ij,existsSync:age}=require("fs"),oj;tE.whenComponentsLoaded=new Promise(e=>{oj=e});var wi=J(),Xs=me(),Ns=(H(),v(z)),{server:cge}=(Hr(),v(Tm)),{createServer:lge}=require("node:tls"),{restartNumber:uge,getWorkerIndex:Pf}=nt(),{createReuseportFd:eE}=(Zp(),v(i$)),{createTLSSelector:dge}=ys(),{resolvePath:fge}=gt(),{startupLog:mge}=Uy(),{SERVERS:Lf,setPortServerMap:sj,portServer:pge}=(KP(),v(Nz)),hge=(lL(),v(Dy)),Ege=ci(),aj=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG),_ge=Xs.get(Ns.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);cge.socket=gge;if(aj){let e;if(uL)e=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wi.info("Could not close debugger",t)}});else{let t=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Pf()>=0&&(e=t+Pf())}if(e){let t=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&uL)try{require("inspector").open(9229)}catch(e){uge<=1&&wi.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"&&wi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:Rke,CONFIG_PARAMS:bke}=Ns;Xs.initSync();tE.globals=Ege;tE.listenOnPorts=lj;tE.startServers=cj;function cj(){let e=Xs.get(Ns.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=By().loadRootComponents(!0).then(()=>{nj?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)deliverSocket(i,s,o);else if(n.requestId)hge.proxyRequest(n);else if(n.type===Ns.ITC_EVENT_TYPES.SHUTDOWN){wi.trace("received shutdown request",My);for(let c in Lf){let l=Lf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?wi.info(`Closing ${E.length} idle connections`):h&&wi.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,R=E.length;g<R;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
98
+ `}getKey(){return(0,Iy.createPublicKey)(this.pem)}toString(){return this.pem}},by=class extends TypeError{static{a(this,"LicenseEncodingError")}},Of=class extends TypeError{static{a(this,"InvalidLicenseError")}},WP=class extends Of{static{a(this,"InvalidLicenseSignatureError")}},Wh=class extends Of{static{a(this,"InvalidHeaderError")}},Ay=class extends Of{static{a(this,"InvalidPayloadError")}},$_e=new YP(Cz.get(F.LICENSE_MODE));a(V_e,"validateLicenseSignature");a(K_e,"validateLicenseHeader");a(Y_e,"valid");a(W_e,"validateLicensePayload");a(Oz,"validateLicense")});var wy={};ye(wy,{getActiveLicense:()=>XP,getUsageLicenses:()=>Hz,getUsageLicensesOp:()=>eL,installUsageLicense:()=>JP,installUsageLicenseOp:()=>QP,isActiveLicense:()=>Fz,isLicensed:()=>ZP,loadAndWatchLicensesDir:()=>Q_e,recordUsage:()=>kz});async function QP(e){let t=e.license;try{await JP(t)}catch(r){let n=new vz.ClientError("Failed to install usage license; "+r.message);throw n.cause=r,n}return"Successfully installed usage license"}async function JP(e){let t=Oz(e),{id:r}=t;if(await Me.system.hdb_license.get(r))throw new jP(`A usage license with ${r} already exists`);return yo.info?.("Installing usage license:",t),Me.system.hdb_license.put(r,t)}function Fz(e){return(e.usedReads??0)<e.reads&&(e.usedReadBytes??0)<e.readBytes&&(e.usedWrites??0)<e.writes&&(e.usedWriteBytes??0)<e.writeBytes&&(e.usedRealTimeMessages??0)<e.realTimeMessages&&(e.usedRealTimeBytes??0)<e.realTimeBytes&&(e.usedCpuTime??0)<e.cpuTime&&(e.usedStorage??0)<e.storage||e.reads===-1&&e.readBytes===-1&&e.writes===-1&&e.writeBytes===-1&&e.realTimeMessages===-1&&e.realTimeBytes===-1&&e.cpuTime===-1&&e.storage===-1}async function XP(){let e=Mz.get(F.LICENSE_REGION),t={sort:{attribute:"__createdtime__"},conditions:[{attribute:"expiration",comparator:"greater_than",value:new Date().toISOString()}]};e!==void 0&&t.conditions.push({attribute:"region",comparator:"equals",value:e});let r=Me.system.hdb_license?.search(t);for await(let n of r??[])if(Fz(n))return n}async function ZP(){return await XP()!==void 0}async function kz(e){Sa=yo.forComponent("license"),Sa.trace?.("Recording usage into license from analytics");let t,r=(await XP())?.id;if(r){Sa.trace?.("Found license to record usage into:",r);let n={};bt(n,()=>{t=Me.system.hdb_license.update(r,n);for(let s of e)switch(Sa.trace?.("Processing analytics record:",s),s.metric){case"db-read":Sa.trace?.("Recording read usage into license"),t.addTo("usedReads",s.count),t.addTo("usedReadBytes",s.mean*s.count);break;case"db-write":Sa.trace?.("Recording write usage into license"),t.addTo("usedWrites",s.count),t.addTo("usedWriteBytes",s.mean*s.count);break;case"db-message":Sa.trace?.("Recording message usage into license"),t.addTo("usedRealTimeMessages",s.count),t.addTo("usedRealTimeBytes",s.mean*s.count);break;case"cpu-usage":s.path==="user"&&(Sa.trace?.("Recording CPU usage into license"),t.addTo("usedCpuTime",s.mean*s.count/3600));break;default:Sa.trace?.("Skipping metric:",s.metric)}})}else if(!process.env.DEV_MODE){let n="This server does not have valid usage licenses, this should only be used for educational and development purposes.";Lz||(console.error(n),Lz=!0),Dz===void 0&&(Dz=setInterval(()=>{yo.notify(n)},z_e).unref())}}function eL(e){let t={};return e.region&&(t.region=e.region),Hz(t)}function Hz(e){let t=[],r=typeof e=="object"?Object.keys(e):[];return r.length>0&&r.forEach(n=>{t.push({attribute:n,comparator:"equals",value:e[n]})}),Me.system.hdb_license.search({sort:{attribute:"__createdtime__"},conditions:t})}async function j_e(e){yo.trace?.("Loading usage license from file:",e);let t=await xz.readFile(e,{encoding:"utf-8"});try{await JP(t)}catch(r){yo.error?.("Failed to install usage license from file:",e,r)}}function Q_e(){let e=zP.default.join(zP.default.dirname(Uz.getConfigFilePath()),"licenses");(0,Bz.watch)(e,{persistent:!1,ignoreInitial:!1,depth:0,ignored:a((r,n)=>n?.isFile()&&!r.endsWith(".txt"),"ignored")}).on("add",j_e)}var vz,yo,Mz,zP,Uz,xz,Bz,jP,Lz,Dz,z_e,Sa,zh=se(()=>{Pz();vz=b(_e()),yo=b(J());is();Ga();Mz=b(me());H();we();zP=b(require("node:path")),Uz=b(gt()),xz=b(require("node:fs/promises")),Bz=require("chokidar"),jP=class extends Error{static{a(this,"ExistingLicenseError")}};a(QP,"installUsageLicenseOp");a(JP,"installUsageLicense");Lz=!1,z_e=6e5;a(Fz,"isActiveLicense");a(XP,"getActiveLicense");a(ZP,"isLicensed");a(kz,"recordUsage");kA(kz);a(eL,"getUsageLicensesOp");a(Hz,"getUsageLicenses");a(j_e,"loadLicenseFile");a(Q_e,"loadAndWatchLicensesDir")});var Dy={};ye(Dy,{deliverSocket:()=>Xz,getHttpOptions:()=>ege,getRequestId:()=>rj,handleApplication:()=>Z_e,httpServer:()=>cL,logRequest:()=>Jh,proxyRequest:()=>tge,registerServer:()=>oL,suppressHandleApplicationWarning:()=>X_e});function Z_e(e){Xh=e.options.getAll(),e.options.on("change",t=>{Xh=e.options.getAll()})}function ege(){return Xh}function Xz(e,t,r){let n=e?.read?e:new Kz.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=Cf[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Cf[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Ta.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function tge(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=Gz.get(s),r){case"connection":i=Xz(void 0,t),Gz.set(s,i),i.write=(c,l,u)=>(Cy.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(Cy.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Cy.parentPort.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}function oL(e,t,r=!0){t||(t=Dr.default.get(F.HTTP_PORT));let n=Cf[t];if(n){let s=n.lastServer||n;if(s===e)throw new Error(`Can not register the same server twice for the same port ${t}`);if(r&&!!s.sessionIdContext!=!!e.sessionIdContext&&+t)throw new Error(`Can not mix secure HTTPS and insecure HTTP on the same port ${t}`);s.off("unhandled",Vz),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else Cf[t]=e;e.on("unhandled",Vz)}function aL(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=[],Dr.default.get(F.HTTP_PORT)!=null&&t.push({port:Dr.default.get(F.HTTP_PORT),secure:Dr.default.get(F.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dr.default.get(F.HTTP_SECUREPORT)!=null&&t.push({port:Dr.default.get(F.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Dr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,Yz.resolvePath)(Dr.default.get(F.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function cL(e,t){let r=[];for(let{port:n,secure:s}of aL(t))r.push(Zz(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?sL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,oL(e,n,!1)),Oy[n]=Py(sL,n);return r}function Zz(e,t,r,n){if(Ry(e,{protocol_name:t?"HTTPS":"HTTP",name:vy()}),!Ny[e]){let s=r?"operationsApi_network":"http",i=Dr.default.get(s+"_keepAliveTimeout"),o=Dr.default.get(s+"_timeout"),c=Dr.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:o,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Dr.default.get(F.HTTP_MAXHEADERSIZE)},u=Dr.default.get(s+"_mtls"),d=Dr.default.get(s+"_mtls_required"),f;if(t){let E=Dr.default.get("tls");f=Dr.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,Wz.getTicketKeys)(),SNICallback:(0,zz.createTLSSelector)(r?"operations-api":"server",u),ciphers:E.ciphers??E[0]?.ciphers})}let m=a(async(E,g)=>{let R=performance.now(),S=0;try{let N=new cc(E,g);r&&(N.isOperationsServer=!0),Xh.logging?.id&&(N.requestId=S=rj());let I=await Oy[e](N);if(!I){if(N._nodeResponse.statusCode){Jh(E,N._nodeResponse.statusCode,S,performance.now()-R);return}I=ej(N)}if(I.headers?.set||(I.headers=new Gs(I.headers)),await ZP()?I.headers.set("Server","HarperDB"):I.headers.set("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"),I.status===-1){for(let te of I.headers||[])g.setHeader(te[0],te[1]);return E.baseRequest=N,g.baseResponse=I,Ny[e].emit("unhandled",E,g)}let $=I.status||200;g.statusCode=$;let ee=performance.now(),G=ee-R,k=I.body,j,Y=!1;if(!I.handlesHeaders){let te=I.headers||new Gs;k?k.length>=0?(typeof k=="string"?te.set("Content-Length",Buffer.byteLength(k)):te.set("Content-Length",k.length),j=!0):k instanceof Ms&&(k.size?te.set("Content-Length",k.size):k.on&&(Y=!0,k.on("size",be=>{g.headersSent||g.setHeader("Content-Length",be)})),k=k.stream()):(te.set("Content-Length","0"),j=!0);let ge=`hdb;dur=${G.toFixed(2)}`;if(I.wasCacheMiss&&(ge+=", miss"),Fp(te,"Server-Timing",ge,!0),!g.headersSent)if(Y){if(te)if(te[Symbol.iterator])for(let[be,Ye]of te)g.setHeader(be,Ye);else for(let be in te)g.setHeader(be,te[be])}else g.writeHead($,te&&(te[Symbol.iterator]?Array.from(te):te));j&&g.end(k)}let ce=N.handlerPath,de=N.method;if(Ve(G,"duration",ce,de,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),tn($<400,"success",ce,de),tn(1,"response_"+$,ce,de),Jh(E,$,S,G),!j)if(k instanceof ReadableStream&&(k=nL.Readable.fromWeb(k)),(k[Symbol.iterator]||k[Symbol.asyncIterator])&&(k=nL.Readable.from(k)),k?.pipe){k.pipe(g),k.destroy&&g.on("close",()=>{k.destroy()});let te=0;k.on("data",ge=>{te+=ge.length}),k.on("end",()=>{Ve(performance.now()-ee,"transfer",ce,de),Ve(te,"bytes-sent",ce,de)})}else k?.then?k.then(te=>{g.end(te)},y):g.end(k)}catch(N){y(N)}function y(N){let I=N.headers,$=N.statusCode||500;g.writeHead($,I&&(I[Symbol.iterator]?Array.from(I):I)),g.end(J_e(N)),Jh(E,$,S,performance.now()-R),N.statusCode?N.statusCode===500?Ta.default.warn(N):Ta.default.info(N):Ta.default.error(N)}a(y,"onError")},"requestHandler"),p=oS(m,(E,g)=>{g.statusCode=503,g.end("Service unavailable, exceeded request queue limit"),Ve(!0,"service-unavailable",e)},Dr.default.get(s+"_requestQueueLimit")),h=Ny[e]=(t?f?jz.createSecureServer:Qz.createServer:Ly.createServer)(l,(E,g)=>{let R=E.method;R==="GET"||R==="OPTIONS"||R==="HEAD"?m(E,g):p(E,g)});i>=0&&(h.keepAliveTimeout=i),c>=0&&(h.headersTimeout=c),t&&(h.ports||(h.ports=[]),h.ports.push(e),l.SNICallback.initialize(h),u&&(h.mtlsConfig=u),h.on("secureConnection",E=>{E._parent.startTime&&Ve(performance.now()-E._parent.startTime,"tls-handshake",e),Ve(E.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),oL(h,e)}return Ny[e]}function Py(e,t){let r=ej;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),"nextCallback")}}return r}function ej(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Gs}}function rge(e,t){cL(e,{requestOnly:!0,...t})}function tj(e,t){for(let{port:r}of aL(t))qz[t?.runFirst?"unshift":"push"]({listener:e,port:r}),iL[r]=Py(qz,r)}function nge(e,t){let r=[];for(let{port:n,secure:s}of aL(t)){Ry(n,{protocol_name:s?"WSS":"WS",name:vy()});let i=Zz(n,s,t?.isOperationsServer,t?.mtls);jh[n]||(jh[n]=new Jz.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),jh[n].on("connection",(o,c)=>{try{let l=new cc(c);l.isWebSocket=!0;let u=Oy[n](l);Ta.default.debug("Received WS connection, calling listeners",tL),$z[n](o,l,u)}catch(l){Ta.default.warn("Error in handling WS connection",l)}}),tj((o,c,l,u)=>o.__harperdbRequestUpgraded?u(o,c,l):jh[n].handleUpgrade(o,c,l,d=>{o.__harperdbRequestUpgraded=!0,u(o,c,l),jh[n].emit("connection",d,o)}),{port:n}),i.on("upgrade",(o,c,l)=>{iL[n]&&iL[n](o,c,l)})),r.push(i),tL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),$z[n]=Py(tL,n),Oy[n]=Py(sL,n)}return r}function Vz(e,t){t.writeHead(404),t.end(`Not found
99
+ `),Jh(e,404,0,e.requestId)}function Jh(e,t,r,n){let s=Xh.logging;if(s){rL||(rL=Ta.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";rL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+sge(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function sge(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function rj(){return Qh||(Qh=new BigInt64Array([1n]),Qh=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",Qh.buffer))),Number(Atomics.add(Qh,0,1n))}var Kz,Ta,Cy,Dr,Yz,Wz,zz,jz,Qz,Ly,nL,Jz,J_e,jh,Ny,Oy,sL,Xh,X_e,Gz,qz,iL,tL,$z,rL,Qh,lL=se(()=>{Kz=require("node:net"),Ta=b(J()),Cy=require("node:worker_threads"),Dr=b(me());H();Yz=b(gt()),Wz=b(st()),zz=b(ys()),jz=require("node:http2"),Qz=require("node:https"),Ly=require("node:http");Zp();kp();ss();is();nL=require("node:stream");Hr();KP();Zh();_N();Jz=require("ws");zh();({errorToString:J_e}=Ta.default);Be.http=cL;Be.request=rge;Be.ws=nge;Be.upgrade=tj;jh={},Ny={},Oy={},sL=[],Xh={},X_e=!0;a(Z_e,"handleApplication");a(ege,"getHttpOptions");a(Xz,"deliverSocket");Gz=new Map;a(tge,"proxyRequest");a(oL,"registerServer");a(aL,"getPorts");a(cL,"httpServer");a(Zz,"getHTTPServer");a(Py,"makeCallbackChain");a(ej,"unhandled");a(rge,"onRequest");Object.defineProperty(Ly.IncomingMessage.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.toLowerCase().includes("upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});qz=[],iL={};a(tj,"onUpgrade");tL=[],$z={};a(nge,"onWebSocket");a(Vz,"defaultNotFound");a(Jh,"logRequest");a(sge,"headersToString");a(rj,"getRequestId")});var dL=M(tE=>{"use strict";Gb();var{isMainThread:uL,parentPort:nj,threadId:My,workerData:ige}=require("node:worker_threads"),{createServer:oge}=require("node:net"),{unlinkSync:ij,existsSync:age}=require("fs"),oj;tE.whenComponentsLoaded=new Promise(e=>{oj=e});var wi=J(),Xs=me(),Ns=(H(),v(z)),{server:cge}=(Hr(),v(Tm)),{createServer:lge}=require("node:tls"),{restartNumber:uge,getWorkerIndex:Pf}=st(),{createReuseportFd:eE}=(Zp(),v(i$)),{createTLSSelector:dge}=ys(),{resolvePath:fge}=gt(),{startupLog:mge}=Uy(),{SERVERS:Lf,setPortServerMap:sj,portServer:pge}=(KP(),v(Nz)),hge=(lL(),v(Dy)),Ege=ci(),aj=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG),_ge=Xs.get(Ns.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);cge.socket=gge;if(aj){let e;if(uL)e=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){wi.info("Could not close debugger",t)}});else{let t=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Pf()>=0&&(e=t+Pf())}if(e){let t=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=Xs.get(Ns.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){wi.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&uL)try{require("inspector").open(9229)}catch(e){uge<=1&&wi.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"&&wi.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:Rke,CONFIG_PARAMS:bke}=Ns;Xs.initSync();tE.globals=Ege;tE.listenOnPorts=lj;tE.startServers=cj;function cj(){let e=Xs.get(Ns.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=By().loadRootComponents(!0).then(()=>{nj?.on("message",n=>{let{port:s,fd:i,data:o}=n;if(i)deliverSocket(i,s,o);else if(n.requestId)hge.proxyRequest(n);else if(n.type===Ns.ITC_EVENT_TYPES.SHUTDOWN){wi.trace("received shutdown request",My);for(let c in Lf){let l=Lf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(h=>h.description.includes("connections")),m=0,p=setInterval(()=>{m++;let h=m>=100,E=l[f][h?"all":"idle"]();if(E.length===0){h&&clearInterval(p);return}m===1?wi.info(`Closing ${E.length} idle connections`):h&&wi.warn(`Forcefully closing ${E.length} active connections`);for(let g=0,R=E.length;g<R;g++){let S=E[g].socket;S._httpMessage&&!S._httpMessage.finished&&!h||(h?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
100
100
  Connection: close\r
101
101
  \r
102
- `))}},25).unref()}l.close?.(()=>{if(Xs.get(Ns.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pf()==0)try{ij(fge(Xs.get(Ns.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,My),l.cantCleanupProperly||wi.warn("Had to forcefully exit the thread",My),process.exit(0)},5e3).unref()})}if(aj||process.env.DEV_MODE)try{require("inspector").close()}catch(c){wi.info("Could not close debugger",c)}}}).ref();let r;eE&&!_ge&&(r=lj()),Promise.resolve(r).then(()=>{if(Pf()===0)try{mge(pge)}catch(n){console.error("Error displaying start-up log",n)}nj?.postMessage({type:Ns.ITC_EVENT_TYPES.CHILD_STARTED})})});return oj(t),t}a(cj,"startServers");function lj(){let e=[];for(let t in Lf){let r=Lf[t];if(t.includes?.("/")&&Pf()==0){age(t)&&ij(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Xs.get(Ns.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Pf();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?eE?n={fd:eE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:eE?n={fd:eE(+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}),wi.trace("Listening on port "+t,My)}).on("error",c)}))}return Promise.all(e)}a(lj,"listenOnPorts");!uL&&!ige?.noServerStart&&cj();function gge(e,t){let r=(Zh(),v(xy)).getComponentName,n;if(t.securePort){sj(t.securePort,{protocol_name:"TLS",name:r()});let s=dge("server",t.mtls),i=Xs.get("tls");n=lge({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),Lf[t.securePort]=n}return t.port&&(sj(t.port,{protocol_name:"TCP",name:r()}),n=oge(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Lf[t.port]=n),n}a(gge,"onSocket")});var _j={};ye(_j,{startHTTPThreads:()=>Sge,startSocketServer:()=>hL,updateWorkerIdleness:()=>Ej});async function Sge(e=2,t){BA().catch(r=>xf.error?.("Error recording hostname for analytics:",r));try{if(t)mL(0,1,!0);else{let{loadRootComponents:r}=By();if(e===0)return(0,Ro.setMainIsWorker)(!0),await dL().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)mL(r,e);return Promise.all(hj)}finally{(0,Ro.threadsHaveStarted)()}}function mL(e,t=1,r){if(fL++,(0,Ro.startWorker)("server/threads/threadServer.js",{name:Hb.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===Bb.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});hj.push(s),await s,Df.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=ky.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Df.indexOf(n);o>-1&&Df.splice(o,1)}if(a(i,"removeWorker"),vf){let o=vf;vf=[];for(let c of o)pj[c.localPort](null,c)}}}),r){let n=setInterval(()=>{pL?pL=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ro.shutdownWorkers)(),fL=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function hL(e=0,t){if(typeof e=="string")try{(0,Hy.existsSync)(e)&&(0,Hy.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Tge:r=yge(t):r=EL;let n=(0,Mf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=pj[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),pL=!0,r(i,(o,c)=>{if(!o){if(uj){let u=i._socket||new Mf.Socket({handle:i,writable:!0,readable:!0});uj.deliverSocket(u,e,c),u.resume()}else fL>0?(vf.length===0&&setTimeout(()=>{vf.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),i.localPort=e,vf.push(i)):(console.log("start up a dynamic thread to handle request"),mL(0));Ve(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Mf.Socket({handle:i,writable:!0,readable:!0});Age(u,o,e)}Ve(!0,"socket-routed")})},xf.info(`HarperDB ${mj.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function EL(e,t){let r,n=0;for(let s of Df){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Fy)return Fy=i,t(r);n=i}Fy=0,t(r)}function Tge(e,t){let r={};e.getpeername(r);let n=r.address,s=Uf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);EL(e,o=>{Uf.set(n,{worker:o,lastUsed:i}),t(o)})}function yge(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Mf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=Uf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);EL(n,f=>{Uf.set(l,{worker:f,lastUsed:d}),s(f,o)})})}a(r,"findByHeaderAffinity")}function Ej(){Fy=0;for(let e of Df)e.expectedIdle=e.recentELU.idle+Rge,e.requests=1;Df.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Age(e,t,r){let n=bge++;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(),ky.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")),ky.delete(n)),s.event=="destroy"&&(e.destroy(),ky.delete(n))})}var Ro,Mf,xf,Hy,fj,mj,Df,vf,pj,uj,fL,hj,pL,Fy,dj,Uf,Rge,ky,bge,_L=ne(()=>{Ro=b(nt()),Mf=require("net");H();xf=b(J()),Hy=require("fs");is();fj=require("worker_threads"),mj=b(yt()),Df=[],vf=[],pj=[],fL=0,hj=[];fj.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){xf.disableStdio();return}console.error("uncaughtException",e)}});a(Sge,"startHTTPThreads");a(mL,"startHTTPWorker");a(hL,"startSocketServer");Fy=0;a(EL,"findMostIdleWorker");dj=36e5,Uf=new Map;a(Tge,"findByRemoteAddressAffinity");a(yge,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Uf)r.lastUsed+dj<e&&Uf.delete(t)},dj).unref();Rge=1e3;a(Ej,"updateWorkerIdleness");(0,Ro.setMonitorListener)(Ej);ky=new Map,bge=1;a(Age,"proxySocket")});var Uy=M(qy=>{"use strict";var Re=me();Re.initSync();Hf();var un=(H(),v(z)),{CONFIG_PARAMS:Fe}=un,or=J(),Ff=require("fs-extra"),Uc=require("path"),Ige=EP(),{install:wge}=_z(),gL=require("chalk"),{packageJson:Nge,PACKAGE_ROOT:Cge}=yt(),kf=oe(),Oge=(GP(),v(HP)),SL=gt(),Sj=Qc(),gj=ty(),Pge=wz(),{compactOnStart:Lge}=(pP(),v(mP)),Dge=require("minimist"),vge=ys(),{startHTTPThreads:Mge}=(_L(),v(_j)),Uge=Ey(),{isMainThread:xge}=require("worker_threads"),Cke=Xi(),Oke=kl(),Pke=JI(),Lke=hp(),Gy=(H(),v(z)),{getHdbPid:Bge}=yf(),xc,Bf,Tj=!1,Fge="Upgrade complete. Starting HarperDB.",kge="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Hge="HarperDB not found, starting install process.",Gge="There was an error during install, check install_log.log for more details. Exiting.",qge="HarperDB successfully started.";function $ge(){process.on("unhandledRejection",(e,t)=>{or.error("Unhandled promise rejection: Promise",t,"reason:",e)})}a($ge,"addUnhandleRejectionListener");function Vge(){if(!Tj){let e=a(()=>{Ff.removeSync(Uc.join(Re.get(un.CONFIG_PARAMS.ROOTPATH),un.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(Vge,"addExitListeners");async function yj(e=!1,t=!1){if(console.log(gL.magenta("Starting HarperDB...")),$ge(),or.suppressLogging?.(()=>{console.log(gL.magenta(""+Ff.readFileSync(Uc.join(Cge,"utility/install/ascii_logo.txt"))))}),or.debug("Checking to make sure hdb is installed"),Oge.isHdbInstalled(Re,or)===!1){console.log(Hge);try{await wge()}catch(o){console.error(Gge,o),or.error(o),process.exit(1)}}if(!e){let o=Sj(Object.keys(un.CONFIG_PARAM_MAP),!0);!kf.isEmpty(o)&&!kf.isEmptyOrZeroLength(Object.keys(o))&&SL.updateConfigValue(void 0,void 0,o,!0,!0)}let r=Bf?.service==="clustering";Bf?.service&&!r&&(console.error("Unrecognized service argument"),or.debug("Unrecognized service argument"),process.exit(1));let n=Bge();n&&(r||(or.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),xc===void 0&&(xc=yf()),or.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),Re.get(un.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await gj.generateNatsConfig(),await xc.startClusteringProcesses(!0),process.exit()),Vge(),t&&await Ff.writeFile(Uc.join(Re.get(Gy.CONFIG_PARAMS.ROOTPATH),Gy.HDB_PID_FILE),`${process.pid}`),or.info("HarperDB PID",process.pid);let s;try{let o=await Uge.getVersionUpdateInfo();o!==void 0&&(s=o[un.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Pge.upgrade(o),console.log(Fge))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),or.error(o)):(console.error(kge,o),or.error(o)),process.exit(1)}Ige(),Wge(),await vge.reviewSelfSignedCert(),kf.autoCastBoolean(Re.get(un.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&xge&&await gj.generateNatsConfig(t)}a(yj,"initialize");async function Kge(e=!1){try{Bf=Dge(process.argv),Bf.ROOTPATH&&SL.updateConfigObject("settings_path",Uc.join(Bf.ROOTPATH,un.HDB_CONFIG_FILE)),await yj(e,!0),Re.get(un.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Lge();let t=process.env.IS_SCRIPTED_SERVICE&&!Bf.service;kf.autoCastBoolean(Re.get(un.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await xc.startClusteringProcesses(),await xc.startClusteringThreads()),await Mge(process.env.DEV_MODE?1:Re.get(Gy.CONFIG_PARAMS.THREADS_COUNT)??Re.get(Gy.CONFIG_PARAMS.THREADS)),t||Rj()}catch(t){console.error(t),or.error(t),process.exit(1)}}a(Kge,"main");function Rj(){or.suppressLogging(()=>{console.log(gL.magenta(`HarperDB ${Nge.version} successfully started`))}),or.notify(qge)}a(Rj,"started");async function Yge(e=!0){Tj=!e;try{xc===void 0&&(xc=yf()),or.debug("initializing processManagement..."),await yj(),or.debug("Starting new main process"),await xc.startService(un.PROCESS_DESCRIPTORS.HDB,!0),Rj(),e&&process.exit(0)}catch(t){console.error(t),or.error(t),process.exit(1)}}a(Yge,"launch");function Wge(){let e=Uc.join(Re.get(un.CONFIG_PARAMS.ROOTPATH),un.LICENSE_KEY_DIR_NAME,un.LICENSE_FILE_NAME),t=Uc.join(e,un.LICENSE_FILE_NAME),r=Uc.join(e,un.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=Sj(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(kf.isEmpty(n)||kf.isEmpty(s))return;Ff.mkdirpSync(e),Ff.writeFileSync(r,n),Ff.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),or.error(s)}}a(Wge,"writeLicenseFromVars");qy.launch=Yge;qy.main=Kge;qy.startupLog=zge;function zge(e){let r=a(p=>p.padEnd(20),"pad"),n=`
102
+ `))}},25).unref()}l.close?.(()=>{if(Xs.get(Ns.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pf()==0)try{ij(fge(Xs.get(Ns.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,My),l.cantCleanupProperly||wi.warn("Had to forcefully exit the thread",My),process.exit(0)},5e3).unref()})}if(aj||process.env.DEV_MODE)try{require("inspector").close()}catch(c){wi.info("Could not close debugger",c)}}}).ref();let r;eE&&!_ge&&(r=lj()),Promise.resolve(r).then(()=>{if(Pf()===0)try{mge(pge)}catch(n){console.error("Error displaying start-up log",n)}nj?.postMessage({type:Ns.ITC_EVENT_TYPES.CHILD_STARTED})})});return oj(t),t}a(cj,"startServers");function lj(){let e=[];for(let t in Lf){let r=Lf[t];if(t.includes?.("/")&&Pf()==0){age(t)&&ij(t),e.push(new Promise((o,c)=>{r.listen({path:t},()=>{o({port:t,name:r.name,protocol_name:r.protocol_name}),wi.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=Xs.get(Ns.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let o=typeof s=="string"?s.split("-"):s,c=Pf();if(c<o[0]||c>o[1])continue}let i;try{let o=t.lastIndexOf(":");o>0?eE?n={fd:eE(+t.slice(o+1).replace(/[\[\]]/g,""),t.slice(0,o))}:n={host:+t.slice(o+1).replace(/[\[\]]/g,""),port:t.slice(0,o)}:eE?n={fd:eE(+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}),wi.trace("Listening on port "+t,My)}).on("error",c)}))}return Promise.all(e)}a(lj,"listenOnPorts");!uL&&!ige?.noServerStart&&cj();function gge(e,t){let r=(Zh(),v(xy)).getComponentName,n;if(t.securePort){sj(t.securePort,{protocol_name:"TLS",name:r()});let s=dge("server",t.mtls),i=Xs.get("tls");n=lge({rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,ciphers:i.ciphers??i[0]?.ciphers,SNICallback:s},e),s.initialize(n),Lf[t.securePort]=n}return t.port&&(sj(t.port,{protocol_name:"TCP",name:r()}),n=oge(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),Lf[t.port]=n),n}a(gge,"onSocket")});var _j={};ye(_j,{startHTTPThreads:()=>Sge,startSocketServer:()=>hL,updateWorkerIdleness:()=>Ej});async function Sge(e=2,t){BA().catch(r=>xf.error?.("Error recording hostname for analytics:",r));try{if(t)mL(0,1,!0);else{let{loadRootComponents:r}=By();if(e===0)return(0,Ro.setMainIsWorker)(!0),await dL().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)mL(r,e);return Promise.all(hj)}finally{(0,Ro.threadsHaveStarted)()}}function mL(e,t=1,r){if(fL++,(0,Ro.startWorker)("server/threads/threadServer.js",{name:Hb.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function l(u){u.type===Bb.CHILD_STARTED&&(n.removeListener("message",l),o(n))}a(l,"onMessage"),n.on("message",l),n.on("error",c)});hj.push(s),await s,Df.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=ky.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Df.indexOf(n);o>-1&&Df.splice(o,1)}if(a(i,"removeWorker"),vf){let o=vf;vf=[];for(let c of o)pj[c.localPort](null,c)}}}),r){let n=setInterval(()=>{pL?pL=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Ro.shutdownWorkers)(),fL=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function hL(e=0,t){if(typeof e=="string")try{(0,Hy.existsSync)(e)&&(0,Hy.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Tge:r=yge(t):r=EL;let n=(0,Mf.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=pj[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),pL=!0,r(i,(o,c)=>{if(!o){if(uj){let u=i._socket||new Mf.Socket({handle:i,writable:!0,readable:!0});uj.deliverSocket(u,e,c),u.resume()}else fL>0?(vf.length===0&&setTimeout(()=>{vf.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),i.localPort=e,vf.push(i)):(console.log("start up a dynamic thread to handle request"),mL(0));Ve(!1,"socket-routed");return}o.requests++;let l=i.fd;if(l>=0)o.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new Mf.Socket({handle:i,writable:!0,readable:!0});Age(u,o,e)}Ve(!0,"socket-routed")})},xf.info(`HarperDB ${mj.packageJson.version} Server running on port ${e}`)),n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function EL(e,t){let r,n=0;for(let s of Df){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=Fy)return Fy=i,t(r);n=i}Fy=0,t(r)}function Tge(e,t){let r={};e.getpeername(r);let n=r.address,s=Uf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);EL(e,o=>{Uf.set(n,{worker:o,lastUsed:i}),t(o)})}function yge(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new Mf.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let l=o.toString("latin1").match(t)?.[1],u=Uf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);EL(n,f=>{Uf.set(l,{worker:f,lastUsed:d}),s(f,o)})})}a(r,"findByHeaderAffinity")}function Ej(){Fy=0;for(let e of Df)e.expectedIdle=e.recentELU.idle+Rge,e.requests=1;Df.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Age(e,t,r){let n=bge++;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(),ky.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")),ky.delete(n)),s.event=="destroy"&&(e.destroy(),ky.delete(n))})}var Ro,Mf,xf,Hy,fj,mj,Df,vf,pj,uj,fL,hj,pL,Fy,dj,Uf,Rge,ky,bge,_L=se(()=>{Ro=b(st()),Mf=require("net");H();xf=b(J()),Hy=require("fs");is();fj=require("worker_threads"),mj=b(yt()),Df=[],vf=[],pj=[],fL=0,hj=[];fj.isMainThread&&process.on("uncaughtException",e=>{if(e.code!=="ECONNRESET"){if(e.code==="EIO"){xf.disableStdio();return}console.error("uncaughtException",e)}});a(Sge,"startHTTPThreads");a(mL,"startHTTPWorker");a(hL,"startSocketServer");Fy=0;a(EL,"findMostIdleWorker");dj=36e5,Uf=new Map;a(Tge,"findByRemoteAddressAffinity");a(yge,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Uf)r.lastUsed+dj<e&&Uf.delete(t)},dj).unref();Rge=1e3;a(Ej,"updateWorkerIdleness");(0,Ro.setMonitorListener)(Ej);ky=new Map,bge=1;a(Age,"proxySocket")});var Uy=M(qy=>{"use strict";var Re=me();Re.initSync();Hf();var un=(H(),v(z)),{CONFIG_PARAMS:Fe}=un,or=J(),Ff=require("fs-extra"),Uc=require("path"),Ige=EP(),{install:wge}=_z(),gL=require("chalk"),{packageJson:Nge,PACKAGE_ROOT:Cge}=yt(),kf=oe(),Oge=(GP(),v(HP)),SL=gt(),Sj=Qc(),gj=ty(),Pge=wz(),{compactOnStart:Lge}=(pP(),v(mP)),Dge=require("minimist"),vge=ys(),{startHTTPThreads:Mge}=(_L(),v(_j)),Uge=Ey(),{isMainThread:xge}=require("worker_threads"),Cke=Xi(),Oke=kl(),Pke=JI(),Lke=hp(),Gy=(H(),v(z)),{getHdbPid:Bge}=yf(),xc,Bf,Tj=!1,Fge="Upgrade complete. Starting HarperDB.",kge="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Hge="HarperDB not found, starting install process.",Gge="There was an error during install, check install_log.log for more details. Exiting.",qge="HarperDB successfully started.";function $ge(){process.on("unhandledRejection",(e,t)=>{or.error("Unhandled promise rejection: Promise",t,"reason:",e)})}a($ge,"addUnhandleRejectionListener");function Vge(){if(!Tj){let e=a(()=>{Ff.removeSync(Uc.join(Re.get(un.CONFIG_PARAMS.ROOTPATH),un.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}a(Vge,"addExitListeners");async function yj(e=!1,t=!1){if(console.log(gL.magenta("Starting HarperDB...")),$ge(),or.suppressLogging?.(()=>{console.log(gL.magenta(""+Ff.readFileSync(Uc.join(Cge,"utility/install/ascii_logo.txt"))))}),or.debug("Checking to make sure hdb is installed"),Oge.isHdbInstalled(Re,or)===!1){console.log(Hge);try{await wge()}catch(o){console.error(Gge,o),or.error(o),process.exit(1)}}if(!e){let o=Sj(Object.keys(un.CONFIG_PARAM_MAP),!0);!kf.isEmpty(o)&&!kf.isEmptyOrZeroLength(Object.keys(o))&&SL.updateConfigValue(void 0,void 0,o,!0,!0)}let r=Bf?.service==="clustering";Bf?.service&&!r&&(console.error("Unrecognized service argument"),or.debug("Unrecognized service argument"),process.exit(1));let n=Bge();n&&(r||(or.debug("Error: HarperDB is already running"),console.error(`Error: HarperDB is already running (pid: ${n})`),process.exit(4))),xc===void 0&&(xc=yf()),or.debug("Checking for service clustering"),r&&(n||(console.error("HarperDB must be running to start clustering."),process.exit()),Re.get(un.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await gj.generateNatsConfig(),await xc.startClusteringProcesses(!0),process.exit()),Vge(),t&&await Ff.writeFile(Uc.join(Re.get(Gy.CONFIG_PARAMS.ROOTPATH),Gy.HDB_PID_FILE),`${process.pid}`),or.info("HarperDB PID",process.pid);let s;try{let o=await Uge.getVersionUpdateInfo();o!==void 0&&(s=o[un.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Pge.upgrade(o),console.log(Fge))}catch(o){s?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${s}. Exiting HarperDB.`,o),or.error(o)):(console.error(kge,o),or.error(o)),process.exit(1)}Ige(),Wge(),await vge.reviewSelfSignedCert(),kf.autoCastBoolean(Re.get(un.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&xge&&await gj.generateNatsConfig(t)}a(yj,"initialize");async function Kge(e=!1){try{Bf=Dge(process.argv),Bf.ROOTPATH&&SL.updateConfigObject("settings_path",Uc.join(Bf.ROOTPATH,un.HDB_CONFIG_FILE)),await yj(e,!0),Re.get(un.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Lge();let t=process.env.IS_SCRIPTED_SERVICE&&!Bf.service;kf.autoCastBoolean(Re.get(un.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(await xc.startClusteringProcesses(),await xc.startClusteringThreads()),await Mge(process.env.DEV_MODE?1:Re.get(Gy.CONFIG_PARAMS.THREADS_COUNT)??Re.get(Gy.CONFIG_PARAMS.THREADS)),t||Rj()}catch(t){console.error(t),or.error(t),process.exit(1)}}a(Kge,"main");function Rj(){or.suppressLogging(()=>{console.log(gL.magenta(`HarperDB ${Nge.version} successfully started`))}),or.notify(qge)}a(Rj,"started");async function Yge(e=!0){Tj=!e;try{xc===void 0&&(xc=yf()),or.debug("initializing processManagement..."),await yj(),or.debug("Starting new main process"),await xc.startService(un.PROCESS_DESCRIPTORS.HDB,!0),Rj(),e&&process.exit(0)}catch(t){console.error(t),or.error(t),process.exit(1)}}a(Yge,"launch");function Wge(){let e=Uc.join(Re.get(un.CONFIG_PARAMS.ROOTPATH),un.LICENSE_KEY_DIR_NAME,un.LICENSE_FILE_NAME),t=Uc.join(e,un.LICENSE_FILE_NAME),r=Uc.join(e,un.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=Sj(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(kf.isEmpty(n)||kf.isEmpty(s))return;Ff.mkdirpSync(e),Ff.writeFileSync(r,n),Ff.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),or.error(s)}}a(Wge,"writeLicenseFromVars");qy.launch=Yge;qy.main=Kge;qy.startupLog=zge;function zge(e){let r=a(p=>p.padEnd(20),"pad"),n=`
103
103
  `;Re.get(Fe.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Re.get(Fe.REPLICATION_HOSTNAME)}
104
104
  `),Re.get(Fe.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Re.get(Fe.REPLICATION_URL)}
105
105
  `),n+=`${r("Worker Threads:")}${Re.get(Fe.THREADS_COUNT)}
@@ -115,9 +115,9 @@ Connection: close\r
115
115
  `;let l=[],u=SL.getConfigObj();for(let p in u)u[p].package&&l.push(p);let d={},f=`${r("REST:")}`;for(let[p,h]of e)for(let E of h){let g=E.name;g==="rest"&&(f+=`${E.protocol_name}: ${p}, `),l.includes(g)&&(d[g]?d[g]+=`${E.protocol_name}: ${p}, `:d[g]=`${E.protocol_name}: ${p}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
116
116
  `);let m=Re.get(Fe.HTTP_PORT)?`HTTP: ${Re.get(Fe.HTTP_PORT)}, `:"";m+=Re.get(Fe.HTTP_SECUREPORT)?`HTTPS: ${Re.get(Fe.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let p of l)d[p]?n+=`${r(p+": ")}${d[p].slice(0,-2)}
117
117
  `:n+=`${r(p+": ")}${m}
118
- `;console.log(n),Re.get(Fe.LOGGING_STDSTREAMS)&&or.logsAtLevel("info")&&or.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(zge,"startupLog")});var Hf=M((Bke,Cj)=>{"use strict";var jge=require("minimist"),{isMainThread:bL,parentPort:rE,threadId:Mke}=require("worker_threads"),$t=(H(),v(z)),Ni=J(),Qge=oe(),$y=ty(),TL=_r(),Uke=Ct(),Jge=gt(),ou=yf(),bj=wh(),{compactOnStart:Xge}=(pP(),v(mP)),xke=Qc(),{restartWorkers:RL,onMessageByType:Zge,shutdownWorkersNow:eSe}=nt(),{handleHDBError:tSe,hdbErrors:rSe}=_e(),{HTTP_STATUS_CODES:nSe}=rSe,nE=me(),{sendOperationToNode:Aj,getThisNodeName:sSe,monitorNodeCAs:iSe}=(Ss(),v(ra)),oSe=require("node:path"),{unlinkSync:aSe}=require("node:fs");nE.initSync();var yL=`Restarting HarperDB. This may take up to ${$t.RESTART_TIMEOUT_MS/1e3} seconds.`,Ij="Clustering is not enabled so cannot be restarted",cSe="Invalid service",ya;Cj.exports={restart:Nj,restartService:AL};bL&&Zge($t.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await AL({service:e.workerType}):Nj({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function Nj(e){ya=Object.keys(e).length===0;let t=jge(process.argv);if(t.service){await AL(t);return}if(ya){let r=ou.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),Uy().launch(!0),yL}return bL?(Ni.notify(yL),nE.get($t.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Xge(),process.env.HARPER_EXIT_ON_RESTART&&(Ni.warn("Exiting Harper process to trigger a container restart"),process.exit(0)),setTimeout(async()=>{Ni.debug("Shutdown workers"),await eSe(),await ou.cleanupChildrenProcesses(!1),await aSe(oSe.join(nE.get($t.CONFIG_PARAMS.ROOTPATH),$t.HDB_PID_FILE),`${process.pid}`),Ni.debug("Starting new process..."),Uy().launch(!0)},50)):rE.postMessage({type:$t.ITC_EVENT_TYPES.RESTART}),yL}a(Nj,"restart");async function AL(e){let{service:t}=e;if($t.HDB_PROCESS_SERVICES[t]===void 0)throw tSe(new Error,cSe,nSe.BAD_REQUEST,void 0,void 0,!0);if(ou.expectedRestartOfChildren(),!bL){e.replicated&&iSe(),rE.postMessage({type:$t.ITC_EVENT_TYPES.RESTART,workerType:t}),rE.ref(),await new Promise(s=>{rE.on("message",i=>{i.type==="restart-complete"&&(s(),rE.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===sSe())continue;let i;try{({job_id:i}=await Aj(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await Aj(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case $t.HDB_PROCESS_SERVICES.clustering:if(!nE.get($t.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Ij;break}ya&&console.log("Restarting clustering"),Ni.notify("Restarting clustering"),await lSe();break;case $t.HDB_PROCESS_SERVICES.clustering_config:case $t.HDB_PROCESS_SERVICES["clustering config"]:if(!nE.get($t.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Ij;break}ya&&console.log("Restarting clusteringConfig"),Ni.notify("Restarting clustering_config"),await ou.reloadClustering();break;case"custom_functions":case"custom functions":case $t.HDB_PROCESS_SERVICES.harperdb:case $t.HDB_PROCESS_SERVICES.http_workers:case $t.HDB_PROCESS_SERVICES.http:ya&&console.log("Restarting httpWorkers"),Ni.notify("Restarting http_workers"),ya?await ou.restart($t.PROCESS_DESCRIPTORS.HDB):await RL("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Ni.error(r),ya&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(AL,"restartService");async function lSe(){if(!Jge.getConfigFromFile($t.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await bj.getHDBProcessInfo()).clustering.length===0)Ni.trace("Clustering not running, restart will start clustering services"),await $y.generateNatsConfig(!0),await ou.startClusteringProcesses(),await ou.startClusteringThreads(),await wj(),ya&&await TL.closeConnection();else{await $y.generateNatsConfig(!0),(await bj.getHDBProcessInfo()).clustering.forEach(s=>{Ni.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await Qge.asyncSetTimeout(3e3),await wj(),await TL.updateLocalStreams(),ya&&await TL.closeConnection(),Ni.trace("Restart clustering restarting ingest and reply service threads");let r=RL($t.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=RL($t.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}a(lSe,"restartClustering");async function wj(){await $y.removeNatsConfig($t.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await $y.removeNatsConfig($t.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(wj,"removeNatsConfig")});var kj=M((Hke,Fj)=>{"use strict";var kke=require("lodash"),jn=(H(),v(z)),{handleHDBError:Oj,hdbErrors:uSe}=_e(),{HDB_ERROR_MSGS:dSe,HTTP_STATUS_CODES:fSe}=uSe,IL=J();Fj.exports={getRolePermissions:pSe};var au=Object.create(null),mSe=a(e=>({key:e,perms:{}}),"permsTemplateObj"),vj=a((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),Mj=a((e=!1,t=!1,r=!1,n=!1)=>({[jn.PERMS_CRUD_ENUM.READ]:e,[jn.PERMS_CRUD_ENUM.INSERT]:t,[jn.PERMS_CRUD_ENUM.UPDATE]:r,[jn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),wL=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...Mj(t,r,n,s)}),"tablePermsTemplate"),Pj=a((e,t=Mj())=>({attribute_name:e,describe:Bj(t),[sE]:t[sE],[NL]:t[NL],[CL]:t[CL]}),"attrPermsTemplate"),Lj=a((e,t=!1)=>({attribute_name:e,describe:t,[sE]:t}),"timestampAttrPermsTemplate"),{READ:sE,INSERT:NL,UPDATE:CL}=jn.PERMS_CRUD_ENUM,Uj=Object.values(jn.PERMS_CRUD_ENUM),xj=[sE,NL,CL];function pSe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[jn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(au[t]&&au[t].key===n)return au[t].perms;let s=hSe(e,r);return au[t]?au[t].key=n:au[t]=mSe(n),au[t].perms=s,s}catch(r){if(!e[jn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[jn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<jn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw IL.error(n),IL.debug(r),Oj(new Error,dSe.OUTDATED_PERMS_TRANSLATION_ERROR,fSe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
119
- ${r.stack}`;throw IL.error(n),Oj(new Error)}}}a(pSe,"getRolePermissions");function hSe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[jn.SYSTEM_SCHEMA_NAME]=n[jn.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]=ESe(t[i]);return}r[i]=vj(),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=_Se(c,l);r[i].describe||Uj.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=wL()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=wL()})}),r}a(hSe,"translateRolePermissions");function ESe(e){let t=vj(!0);return Object.keys(e).forEach(r=>{t.tables[r]=wL(!0,!0,!0,!0,!0)}),t}a(ESe,"createStructureUserPermissions");function _Se(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return jn.TIME_STAMP_NAMES.includes(f)&&(m=Lj(f,d[sE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Pj(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=Bj(d),s.attribute_permissions.push(d),c||gSe(d,l)}else if(u!==o){let d;jn.TIME_STAMP_NAMES.includes(u)?d=Lj(u):d=Pj(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=Dj(s),s}else return e.describe=Dj(e),e}a(_Se,"getTableAttrPerms");function Dj(e){return Uj.filter(t=>e[t]).length>0}a(Dj,"getSchemaTableDescribePerm");function Bj(e){return xj.filter(t=>e[t]).length>0}a(Bj,"getAttributeDescribePerm");function gSe(e,t){xj.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(gSe,"checkForHashPerms")});var iE={};ye(iE,{authentication:()=>zj,bypassAuth:()=>PSe,login:()=>PL,logout:()=>LL,start:()=>LSe});function PSe(){Wj=!0}async function zj(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?wSe?ISe:[]:ASe?bSe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=In.get(F.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Gs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return Ky&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),Ky&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Ky){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await Hj.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let g=new TSe(p,h,Fa.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ai.SUCCESS?Vy.info?.(g):Vy.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&Vy.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await nf(e.peerCertificate,e.mtlsConfig);if(!p.valid)return Vy.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:xo({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Be.getUser(h,null,e),d(h,ai.SUCCESS,"mTLS")):RSe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=cu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");g=S.slice(0,y),R=S.slice(y+1),f=g||R?await Be.getUser(g,R,e):null;break;case"Bearer":try{f=await eC(E)}catch(N){if(N.message==="invalid token")try{return await kS(E),c({status:-1})}catch{throw N}}break}}catch(S){return CSe&&(cu.get(E)||(cu.set(E,E),d(g,ai.FAILURE,h))),c({status:401,body:xo({error:S.message},e)})}cu.set(n,f),NSe&&d(f.username,ai.SUCCESS,h)}e.user=f}else u?.user?e.user=await Be.getUser(u.user,null,e):(Wj&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,qj.getSuperUser)());Ky&&(e.session.update=function(p){let h=In.get(F.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,$j.v4)();let g=In.get(F.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,OL.convertToMS)(h)).toUTCString():OSe,S=r.host&&g?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let $=r.host.indexOf(":");return($!==-1?r.host.slice(0,$):r.host).endsWith(I)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),o?o.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return E&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,Hj.put(p,{expiresAt:h?Date.now()+(0,OL.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Be.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Bs.loginPath?(m.status=302,m.headers.set("Location",Bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new Gs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function LSe({server:e,port:t,securePort:r}){e.http(zj,t||r?{port:t,securePort:r}:{port:"all"}),Gj||(Gj=!0,setInterval(()=>{cu=new Map},In.get(F.AUTHENTICATION_CACHETTL)).unref(),ySe.addListener(()=>{cu=new Map}))}async function PL(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 LL(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var qj,$j,In,Vj,Kj,OL,SSe,TSe,ySe,Yj,RSe,Vy,bSe,ASe,ISe,wSe,Hj,Ky,Wj,NSe,CSe,OSe,cu,Gj,Yy=ne(()=>{qj=b(Es());Hr();za();kd();we();$j=require("uuid"),In=b(me());H();Vj=b(J()),Kj=b(xp());kp();OL=b(oe());bT();Fo();({forComponent:SSe,AuthAuditLog:TSe}=Vj.default),{user:ySe}=Kj.default,Yj=SSe("authentication"),{debug:RSe}=Yj,Vy=Yj.withTag("auth-event");In.initSync();bSe=In.get(F.HTTP_CORSACCESSLIST),ASe=In.get(F.HTTP_CORS),ISe=In.get(F.OPERATIONSAPI_NETWORK_CORSACCESSLIST),wSe=In.get(F.OPERATIONSAPI_NETWORK_CORS),Hj=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ky=In.get(F.AUTHENTICATION_ENABLESESSIONS)??!0,Wj=process.env.AUTHENTICATION_AUTHORIZELOCAL??In.get(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,NSe=In.get(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,CSe=In.get(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,OSe="Tue, 01 Oct 8307 19:33:20 GMT",cu=new Map;Be.onInvalidatedUser(()=>{cu=new Map});a(PSe,"bypassAuth");a(zj,"authentication");a(LSe,"start");a(PL,"login");a(LL,"logout")});var t2=M((Jke,e2)=>{"use strict";var Ie=require("joi"),jj=require("fs-extra"),Qj=require("path"),Cs=mt(),Jj=me(),Xj=(H(),v(z)),Zj=J(),{hdbErrors:DSe}=_e(),{HDB_ERROR_MSGS:wn}=DSe,Ra=/^[a-zA-Z0-9-_]+$/,vSe=/^[a-zA-Z0-9-_]+$/;e2.exports={getDropCustomFunctionValidator:USe,setCustomFunctionValidator:xSe,addComponentValidator:HSe,dropCustomFunctionProjectValidator:GSe,packageComponentValidator:qSe,deployComponentValidator:$Se,setComponentFileValidator:BSe,getComponentFileValidator:kSe,dropComponentFileValidator:FSe,addSSHKeyValidator:VSe,updateSSHKeyValidator:KSe,deleteSSHKeyValidator:YSe,setSSHKnownHostsValidator:WSe};function Wy(e,t,r){try{let n=Jj.get(Xj.CONFIG_PARAMS.COMPONENTSROOT),s=Qj.join(n,t);return jj.existsSync(s)?e?t:r.message(wn.PROJECT_EXISTS):e?r.message(wn.NO_PROJECT):t}catch(n){return Zj.error(n),r.message(wn.VALIDATION_ERR)}}a(Wy,"checkProjectExists");function oE(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(oE,"checkFilePath");function MSe(e,t,r,n){try{let s=Jj.get(Xj.CONFIG_PARAMS.COMPONENTSROOT),i=Qj.join(s,e,t,r+".js");return jj.existsSync(i)?r:n.message(wn.NO_FILE)}catch(s){return Zj.error(s),n.message(wn.VALIDATION_ERR)}}a(MSe,"checkFileExists");function USe(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(Wy.bind(null,!0)).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Ra).custom(MSe.bind(null,e.project,e.type)).custom(oE).required().messages({"string.pattern.base":wn.BAD_FILE_NAME})});return Cs.validateBySchema(e,t)}a(USe,"getDropCustomFunctionValidator");function xSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(Wy.bind(null,!0)).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(oE).required(),function_content:Ie.string().required()});return Cs.validateBySchema(e,t)}a(xSe,"setCustomFunctionValidator");function BSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),file:Ie.string().custom(oE).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a(BSe,"setComponentFileValidator");function FSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),file:Ie.string().custom(oE).optional()});return Cs.validateBySchema(e,t)}a(FSe,"dropComponentFileValidator");function kSe(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(oE).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a(kSe,"getComponentFileValidator");function HSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(Wy.bind(null,!1)).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),template:Ie.string().optional(),install:Ie.object({command:Ie.string().optional(),timeout:Ie.number().optional()}).optional()});return Cs.validateBySchema(e,t)}a(HSe,"addComponentValidator");function GSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(Wy.bind(null,!0)).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME})});return Cs.validateBySchema(e,t)}a(GSe,"dropCustomFunctionProjectValidator");function qSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return Cs.validateBySchema(e,t)}a(qSe,"packageComponentValidator");function $Se(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional()});return Cs.validateBySchema(e,t)}a($Se,"deployComponentValidator");function VSe(e){let t=Ie.object({name:Ie.string().pattern(vSe).required().messages({"string.pattern.base":wn.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return Cs.validateBySchema(e,t)}a(VSe,"addSSHKeyValidator");function KSe(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return Cs.validateBySchema(e,t)}a(KSe,"updateSSHKeyValidator");function YSe(e){let t=Ie.object({name:Ie.string().required()});return Cs.validateBySchema(e,t)}a(YSe,"deleteSSHKeyValidator");function WSe(e){let t=Ie.object({known_hosts:Ie.string().required()});return Cs.validateBySchema(e,t)}a(WSe,"setSSHKnownHostsValidator")});var i2={};ye(i2,{packageDirectory:()=>zSe});function zSe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];n2.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,r2.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,s2.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var r2,n2,s2,o2=ne(()=>{r2=require("path"),n2=b(require("tar-fs")),s2=require("node:zlib");a(zSe,"packageDirectory")});var jy={};ye(jy,{Application:()=>zy,assertApplicationConfig:()=>f2,extractApplication:()=>m2,installApplication:()=>p2,installApplications:()=>QSe,nonInteractiveSpawn:()=>aE,prepareApplication:()=>h2});function f2(e,t){if(typeof t.package!="string")throw new TypeError(`Invalid 'package' property for application ${e}: expected string, got ${typeof t.package}`);if("install"in t){if(typeof t.install!="object"||t.install===null)throw new TypeError(`Invalid 'install' property for application ${e}: expected object, got ${typeof t.install}`);if("command"in t.install&&typeof t.install.command!="string")throw new TypeError(`Invalid 'install.command' property for application ${e}: expected string, got ${typeof t.install.command}`);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TypeError(`Invalid 'install.timeout' property for application ${e}: expected non-negativenumber, got ${typeof t.install.timeout}`)}}async function m2(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=c2.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Qn.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let o=await(0,dt.stat)(i);if(o.isDirectory()){await(0,dt.symlink)(i,e.dirPath,"dir");return}if(!o.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,Fc.createReadStream)(t)}catch(o){throw o.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):o}}else{let{stdout:i}=await aE(e.name,"npm",["pack",e.packageIdentifier],s);t=(0,Qn.join)(s,i.trim()),r=(0,Fc.createReadStream)(t)}}try{await(0,dt.access)(e.dirPath,dt.constants.F_OK),await(0,dt.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,dt.mkdir)(e.dirPath,{recursive:!0}),await(0,l2.pipeline)(r,(0,d2.default)(),(0,u2.extract)(e.dirPath));let n=await(0,dt.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Qn.join)(e.dirPath,n[0].name),i=await(0,dt.mkdtemp)(e.dirPath);await(0,dt.cp)(s,i,{recursive:!0}),await(0,dt.rm)(s,{recursive:!0,force:!0}),await(0,dt.cp)(i,e.dirPath,{recursive:!0}),await(0,dt.rm)(i,{recursive:!0,force:!0})}t&&await(0,dt.rm)(t,{force:!0})}async function p2(e){try{await(0,dt.access)((0,Qn.join)(e.dirPath,"package.json"),dt.constants.F_OK)}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,dt.access)((0,Qn.join)(e.dirPath,"node_modules"),dt.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...o]=e.install.command.split(" "),{stderr:c,code:l}=await aE(e.name,i,o,e.dirPath,e.install?.timeout);if(l===0)return;throw Gf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let t=JSON.parse(await(0,dt.readFile)((0,Qn.join)(e.dirPath,"package.json"),"utf8")),{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,o=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!o.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${o.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await aE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw Gf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(Gf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await aE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw Gf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function jSe(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Qn.extname)(e)||(0,Fc.existsSync)(e)?`file:${e}`:`github:${e}`}function h2(e){return m2(e).then(()=>p2(e))}async function QSe(){let e=(0,qf.getConfigObj)(),t=(0,qf.getConfigValue)(F.COMPONENTSROOT);await(0,dt.mkdir)(t,{recursive:!0});let r=[];for(let[s,i]of Object.entries(e)){if(typeof i!="object"||i===null||!("package"in i))continue;f2(s,i);let o=new zy({name:s,packageIdentifier:i.package,install:i.install});r.push(h2(o))}let n=await Promise.allSettled(r);Bc.default.debug(n),Bc.default.info("All root applications loaded")}function JSe(){let e=(0,qf.getConfigValue)(F.ROOTPATH),t=(0,Qn.join)(e,"ssh");if((0,Fc.existsSync)(t)){for(let r of(0,Fc.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Qn.join)(t,"config")} -o UserKnownHostsFile=${(0,Qn.join)(t,"known_hosts")}`}}function aE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{Bc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=JSe();l&&(c.GIT_SSH_COMMAND=l);let u=(0,a2.spawn)(t,r,{shell:!0,cwd:n,env:c,stdio:["ignore","pipe","pipe"]}),d=setTimeout(()=>{u.kill(),o(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),f="";u.stdout.on("data",p=>{f+=p.toString(),Bc.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(p.toString())});let m="";u.stderr.on("data",p=>{m+=p.toString()}),u.on("error",p=>{clearTimeout(d),m&&Gf(e,t,m),o(p)}),u.on("close",p=>{clearTimeout(d),m&&Gf(e,t,m),Bc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${p}`),i({stdout:f,stderr:m,code:p})})})}function Gf(e,t,r,n="debug"){let s=Bc.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
120
- `))s[n](i)}var qf,Bc,Qn,dt,a2,Fc,c2,l2,u2,d2,zy,Qy=ne(()=>{qf=b(gt());H();Bc=b(J()),Qn=require("node:path"),dt=require("node:fs/promises"),a2=require("node:child_process"),Fc=require("node:fs"),c2=require("node:stream"),l2=require("node:stream/promises"),u2=require("tar-fs"),d2=b(require("gunzip-maybe"));a(f2,"assertApplicationConfig");a(m2,"extractApplication");a(p2,"installApplication");zy=class{static{a(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&jSe(n),this.install=s,this.dirPath=(0,Qn.join)((0,qf.getConfigValue)(F.COMPONENTSROOT),t),this.logger=Bc.default.loggerWithTag(t)}};a(jSe,"derivePackageIdentifier");a(h2,"prepareApplication");a(QSe,"installApplications");a(JSe,"getGitSSHCommand");a(aE,"nonInteractiveSpawn");a(Gf,"printStderr")});var ML=M(ar=>{"use strict";var $e=require("node:path"),{isMainThread:XSe}=require("node:worker_threads"),Ue=require("fs-extra"),DL=require("fast-glob"),vL=require("normalize-path"),Jn=t2(),jt=J(),Lt=(H(),v(z)),Tr=me(),Jy=gt(),ZSe=oe(),{PACKAGE_ROOT:eTe}=yt(),{handleHDBError:Qt,hdbErrors:tTe}=_e(),rHe=me(),{HDB_ERROR_MSGS:lu,HTTP_STATUS_CODES:Jt}=tTe,E2=nt(),{replicateOperation:Ci}=(Ss(),v(ra)),{packageDirectory:rTe}=(o2(),v(i2)),nHe=$e.join(eTe,"application-template"),nTe=Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),kc=$e.join(nTe,"ssh"),ba=$e.join(kc,"known_hosts"),{Resources:sTe}=(za(),v(eI)),{Application:_2,prepareApplication:g2}=(Qy(),v(jy));function iTe(){jt.trace("getting custom api status");let e={};try{e={port:Tr.get(Lt.CONFIG_PARAMS.HTTP_PORT),directory:Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Qt(new Error,lu.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,t)}return e}a(iTe,"customFunctionsStatus");function oTe(){jt.trace("getting custom api endpoints");let e={},t=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT);try{DL.sync(vL(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:DL.sync(vL(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:DL.sync(vL(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Qt(new Error,lu.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,r)}return e}a(oTe,"getCustomFunctions");function aTe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("getting custom api endpoint file content");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=$e.join(r,n,s,i+".js");try{return Ue.readFileSync(o,{encoding:"utf8"})}catch(c){throw Qt(new Error,lu.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}a(aTe,"getCustomFunction");async function cTe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.setCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("setting custom function file content");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Ue.outputFileSync($e.join(r,n,s,i+".js"),o);let c=await Ci(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Qt(new Error,lu.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}a(cTe,"setCustomFunction");async function lTe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function file");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ue.unlinkSync($e.join(r,n,s,i+".js"));let o=await Ci(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Qt(new Error,lu.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,o)}}a(lTe,"dropCustomFunction");async function uTe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.addComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("adding component");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install:s}=e,i=e.template||"https://github.com/harperdb/application-template";try{let o=$e.join(r,n);Ue.mkdirSync(o,{recursive:!0});let c=new _2({name:n,packageIdentifier:i,install:s});await g2(c);let l=await Ci(e);return l.message=`Successfully added project: ${n}`,l}catch(o){throw Qt(new Error,lu.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,o)}}a(uTe,"addComponent");async function dTe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.dropCustomFunctionProjectValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function project");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Tr.get(Lt.CONFIG_PARAMS.APPS);if(!ZSe.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 Jy.updateConfigValue(Lt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=$e.join(r,n);Ue.rmSync(i,{recursive:!0});let o=await Ci(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Qt(new Error,lu.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,jt.ERR,i)}}a(dTe,"dropCustomFunctionProject");async function fTe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.packageComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;jt.trace("packaging component",n);let s;try{s=await Ue.realpath($e.join(r,n))}catch(o){if(o.code!==Lt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Ue.realpath($e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Lt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await rTe(s,e)).toString("base64");return{project:n,payload:i}}a(fTe,"packageComponent");async function mTe(e){e.project?e.project=$e.parse(e.project).name:e.package&&(e.project=pTe(e.package));let t=Jn.deployComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await Jy.addConfig(e.project,l)}let r=new _2({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await g2(r),XSe)return;let n=new sTe;n.isWorker=!0;let s=(Zh(),v(xy)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let o=e.restart==="rolling";e.restart=o?!1:e.restart;let c=await Ci(e);if(e.restart===!0)E2.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(xL(),v(UL)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}a(mTe,"deployComponent");function pTe(e){if(e.startsWith("git+ssh://"))return $e.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return $e.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ue.readFileSync($e.join(e,"package.json"),"utf8"));return $e.basename(t)}catch{}return $e.basename(e)}a(pTe,"getProjectNameFromPackage");async function hTe(){let e=Jy.getConfiguration(),t=a(async(i,o)=>{try{let c=await Ue.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=$e.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};o.entries.push(f),await t(d,f)}else{let f=await Ue.stat(d),m={name:$e.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return jt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{name:Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT).split($e.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Mp(),v(fN)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){jt.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries)try{i.status=await n.componentStatusRegistry.getAggregatedStatusFor(i.name,s)}catch(o){jt.debug(`Failed to get aggregated status for component ${i.name}: ${o.message}`),i.status={status:"unknown",message:"Failed to retrieve component status",lastChecked:{workers:{}}}}return r}a(hTe,"getComponents");async function ETe(e){let t=Jn.getComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Ue.stat($e.join(r,e.project,e.file));return{message:await Ue.readFile($e.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Lt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${$e.join(e.project,e.file)}'`):s}}a(ETe,"getComponentFile");async function _Te(e){let t=Jn.setComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=$e.join(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ue.ensureFile(n),await Ue.outputFile(n,e.payload,r)):await Ue.ensureDir(n);let s=await Ci(e);return s.message="Successfully set component: "+e.file,s}a(_Te,"setComponentFile");async function gTe(e){let t=Jn.dropComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?$e.join(r,n):r,i=$e.join(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),s),o=$e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ue.pathExists(o)&&await Ue.unlink(o),await Ue.pathExists(i)&&await Ue.remove(i);let c=$e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ue.pathExists(c)){let u=JSON.parse(await Ue.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ue.writeFile(c,JSON.stringify(u,null,2),"utf8")}Jy.deleteConfigFromFile([r]);let l=await Ci(e);return e.restart===!0?(E2.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(gTe,"dropComponent");async function STe(e){let t=Jn.addSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;jt.trace("adding ssh key",r);let c=$e.join(kc,r+".key"),l=$e.join(kc,"config");if(await Ue.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ue.outputFile(c,n),await Ue.chmod(c,"0600");let u=`#${r}
118
+ `;console.log(n),Re.get(Fe.LOGGING_STDSTREAMS)&&or.logsAtLevel("info")&&or.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(zge,"startupLog")});var Hf=M((Bke,Cj)=>{"use strict";var jge=require("minimist"),{isMainThread:bL,parentPort:rE,threadId:Mke}=require("worker_threads"),$t=(H(),v(z)),Ni=J(),Qge=oe(),$y=ty(),TL=_r(),Uke=Ct(),Jge=gt(),ou=yf(),bj=wh(),{compactOnStart:Xge}=(pP(),v(mP)),xke=Qc(),{restartWorkers:RL,onMessageByType:Zge,shutdownWorkersNow:eSe}=st(),{handleHDBError:tSe,hdbErrors:rSe}=_e(),{HTTP_STATUS_CODES:nSe}=rSe,nE=me(),{sendOperationToNode:Aj,getThisNodeName:sSe,monitorNodeCAs:iSe}=(Ss(),v(ra)),oSe=require("node:path"),{unlinkSync:aSe}=require("node:fs");nE.initSync();var yL=`Restarting HarperDB. This may take up to ${$t.RESTART_TIMEOUT_MS/1e3} seconds.`,Ij="Clustering is not enabled so cannot be restarted",cSe="Invalid service",ya;Cj.exports={restart:Nj,restartService:AL};bL&&Zge($t.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await AL({service:e.workerType}):Nj({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function Nj(e){ya=Object.keys(e).length===0;let t=jge(process.argv);if(t.service){await AL(t);return}if(ya){let r=ou.getHdbPid();return console.error(r?"Restarting Harper...":"Starting Harper..."),Uy().launch(!0),yL}return bL?(Ni.notify(yL),nE.get($t.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Xge(),process.env.HARPER_EXIT_ON_RESTART&&(Ni.warn("Exiting Harper process to trigger a container restart"),process.exit(0)),setTimeout(async()=>{Ni.debug("Shutdown workers"),await eSe(),await ou.cleanupChildrenProcesses(!1),await aSe(oSe.join(nE.get($t.CONFIG_PARAMS.ROOTPATH),$t.HDB_PID_FILE),`${process.pid}`),Ni.debug("Starting new process..."),Uy().launch(!0)},50)):rE.postMessage({type:$t.ITC_EVENT_TYPES.RESTART}),yL}a(Nj,"restart");async function AL(e){let{service:t}=e;if($t.HDB_PROCESS_SERVICES[t]===void 0)throw tSe(new Error,cSe,nSe.BAD_REQUEST,void 0,void 0,!0);if(ou.expectedRestartOfChildren(),!bL){e.replicated&&iSe(),rE.postMessage({type:$t.ITC_EVENT_TYPES.RESTART,workerType:t}),rE.ref(),await new Promise(s=>{rE.on("message",i=>{i.type==="restart-complete"&&(s(),rE.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===sSe())continue;let i;try{({job_id:i}=await Aj(s,e))}catch(o){n.push({node:s.name,message:o.message});continue}n.push(await new Promise((o,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let p=new Error("Timed out waiting for restart job to complete");p.replicated=n,c(p)}let m=(await Aj(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),o({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let p=new Error(m.message);p.replicated=n,c(p)}},250)}))}return{replicated:n}}return}let r;switch(t){case $t.HDB_PROCESS_SERVICES.clustering:if(!nE.get($t.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Ij;break}ya&&console.log("Restarting clustering"),Ni.notify("Restarting clustering"),await lSe();break;case $t.HDB_PROCESS_SERVICES.clustering_config:case $t.HDB_PROCESS_SERVICES["clustering config"]:if(!nE.get($t.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=Ij;break}ya&&console.log("Restarting clusteringConfig"),Ni.notify("Restarting clustering_config"),await ou.reloadClustering();break;case"custom_functions":case"custom functions":case $t.HDB_PROCESS_SERVICES.harperdb:case $t.HDB_PROCESS_SERVICES.http_workers:case $t.HDB_PROCESS_SERVICES.http:ya&&console.log("Restarting httpWorkers"),Ni.notify("Restarting http_workers"),ya?await ou.restart($t.PROCESS_DESCRIPTORS.HDB):await RL("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Ni.error(r),ya&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(AL,"restartService");async function lSe(){if(!Jge.getConfigFromFile($t.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await bj.getHDBProcessInfo()).clustering.length===0)Ni.trace("Clustering not running, restart will start clustering services"),await $y.generateNatsConfig(!0),await ou.startClusteringProcesses(),await ou.startClusteringThreads(),await wj(),ya&&await TL.closeConnection();else{await $y.generateNatsConfig(!0),(await bj.getHDBProcessInfo()).clustering.forEach(s=>{Ni.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await Qge.asyncSetTimeout(3e3),await wj(),await TL.updateLocalStreams(),ya&&await TL.closeConnection(),Ni.trace("Restart clustering restarting ingest and reply service threads");let r=RL($t.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),n=RL($t.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await r,await n}}a(lSe,"restartClustering");async function wj(){await $y.removeNatsConfig($t.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await $y.removeNatsConfig($t.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(wj,"removeNatsConfig")});var kj=M((Hke,Fj)=>{"use strict";var kke=require("lodash"),jn=(H(),v(z)),{handleHDBError:Oj,hdbErrors:uSe}=_e(),{HDB_ERROR_MSGS:dSe,HTTP_STATUS_CODES:fSe}=uSe,IL=J();Fj.exports={getRolePermissions:pSe};var au=Object.create(null),mSe=a(e=>({key:e,perms:{}}),"permsTemplateObj"),vj=a((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),Mj=a((e=!1,t=!1,r=!1,n=!1)=>({[jn.PERMS_CRUD_ENUM.READ]:e,[jn.PERMS_CRUD_ENUM.INSERT]:t,[jn.PERMS_CRUD_ENUM.UPDATE]:r,[jn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),wL=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...Mj(t,r,n,s)}),"tablePermsTemplate"),Pj=a((e,t=Mj())=>({attribute_name:e,describe:Bj(t),[sE]:t[sE],[NL]:t[NL],[CL]:t[CL]}),"attrPermsTemplate"),Lj=a((e,t=!1)=>({attribute_name:e,describe:t,[sE]:t}),"timestampAttrPermsTemplate"),{READ:sE,INSERT:NL,UPDATE:CL}=jn.PERMS_CRUD_ENUM,Uj=Object.values(jn.PERMS_CRUD_ENUM),xj=[sE,NL,CL];function pSe(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[jn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(au[t]&&au[t].key===n)return au[t].perms;let s=hSe(e,r);return au[t]?au[t].key=n:au[t]=mSe(n),au[t].perms=s,s}catch(r){if(!e[jn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[jn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<jn.PERMS_UPDATE_RELEASE_TIMESTAMP){let n=`Role permissions for role '${role_name}' must be updated to align with new structure from the 2.2.0 release.`;throw IL.error(n),IL.debug(r),Oj(new Error,dSe.OUTDATED_PERMS_TRANSLATION_ERROR,fSe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
119
+ ${r.stack}`;throw IL.error(n),Oj(new Error)}}}a(pSe,"getRolePermissions");function hSe(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[jn.SYSTEM_SCHEMA_NAME]=n[jn.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]=ESe(t[i]);return}r[i]=vj(),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=_Se(c,l);r[i].describe||Uj.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[o]=u}else r[i].tables[o]=wL()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=wL()})}),r}a(hSe,"translateRolePermissions");function ESe(e){let t=vj(!0);return Object.keys(e).forEach(r=>{t.tables[r]=wL(!0,!0,!0,!0,!0)}),t}a(ESe,"createStructureUserPermissions");function _Se(e,t){let{attribute_permissions:r}=e;if(r?.length>0){let s={...e};s.attribute_permissions=[];let i=r.reduce((u,d)=>{let{attribute_name:f}=d,m=d;return jn.TIME_STAMP_NAMES.includes(f)&&(m=Lj(f,d[sE])),u[f]=m,u},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],l=Pj(o);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=Bj(d),s.attribute_permissions.push(d),c||gSe(d,l)}else if(u!==o){let d;jn.TIME_STAMP_NAMES.includes(u)?d=Lj(u):d=Pj(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=Dj(s),s}else return e.describe=Dj(e),e}a(_Se,"getTableAttrPerms");function Dj(e){return Uj.filter(t=>e[t]).length>0}a(Dj,"getSchemaTableDescribePerm");function Bj(e){return xj.filter(t=>e[t]).length>0}a(Bj,"getAttributeDescribePerm");function gSe(e,t){xj.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(gSe,"checkForHashPerms")});var iE={};ye(iE,{authentication:()=>zj,bypassAuth:()=>PSe,login:()=>PL,logout:()=>LL,start:()=>LSe});function PSe(){Wj=!0}async function zj(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let p=e.isOperationsServer?wSe?ISe:[]:ASe?bSe:[];if(p.includes(i)||p.includes("*")){if(e.method==="OPTIONS"){let h=In.get(F.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",E=new Gs([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",h],["Access-Control-Allow-Origin",i]]);return Ky&&E.set("Access-Control-Allow-Credentials","true"),{status:200,headers:E}}o.push("Access-Control-Allow-Origin",i),Ky&&o.push("Access-Control-Allow-Credentials","true")}}let l,u;if(Ky){i||(i=r.host);let p=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let E of h)if(E.startsWith(p)){let g=E.indexOf(";");l=E.slice(p.length,g===-1?E.length:g),u=await Hj.get(l);break}e.session=u||(u={})}let d=a((p,h,E)=>{let g=new TSe(p,h,Fa.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=E,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),h===ai.SUCCESS?Vy.info?.(g):Vy.error?.(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&Vy.error?.("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let p=await nf(e.peerCertificate,e.mtlsConfig);if(!p.valid)return Vy.error?.("Certificate verification failed:",p.status,"for",e.peerCertificate.subject.CN),c({status:401,body:xo({error:"Certificate revoked or verification failed"},e)});let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await Be.getUser(h,null,e),d(h,ai.SUCCESS,"mTLS")):RSe("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=cu.get(n),!f){let p=n.indexOf(" "),h=n.slice(0,p),E=n.slice(p+1),g,R;try{switch(h){case"Basic":let S=atob(E),y=S.indexOf(":");g=S.slice(0,y),R=S.slice(y+1),f=g||R?await Be.getUser(g,R,e):null;break;case"Bearer":try{f=await eC(E)}catch(N){if(N.message==="invalid token")try{return await kS(E),c({status:-1})}catch{throw N}}break}}catch(S){return CSe&&(cu.get(E)||(cu.set(E,E),d(g,ai.FAILURE,h))),c({status:401,body:xo({error:S.message},e)})}cu.set(n,f),NSe&&d(f.username,ai.SUCCESS,h)}e.user=f}else u?.user?e.user=await Be.getUser(u.user,null,e):(Wj&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,qj.getSuperUser)());Ky&&(e.session.update=function(p){let h=In.get(F.AUTHENTICATION_COOKIE_EXPIRES),E=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,$j.v4)();let g=In.get(F.AUTHENTICATION_COOKIE_DOMAINS),R=h?new Date(Date.now()+(0,OL.convertToMS)(h)).toUTCString():OSe,S=r.host&&g?.find(I=>{I.startsWith(".")&&(I=I.slice(1));let $=r.host.indexOf(":");return($!==-1?r.host.slice(0,$):r.host).endsWith(I)}),N=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${R}; HttpOnly`;S&&(N+=`; Domain=${S}`),E&&(N+="; SameSite=None; Secure"),o?o.push("Set-Cookie",N):m?.headers?.set&&m.headers.set("Set-Cookie",N)}return E&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),p.id=l,Hj.put(p,{expiresAt:h?Date.now()+(0,OL.convertToMS)(h):void 0})},e.login=async function(p,h){let E=e.user=await Be.authenticateUser(p,h,e);e.session.update({user:E&&(E.getId?.()??E.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Bs.loginPath?(m.status=302,m.headers.set("Location",Bs.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=o.length;if(u>0){let d=l.headers;d||(l.headers=d=new Gs);for(let f=0;f<u;){let m=o[f++];d.set(m,o[f++])}}return o=null,l}a(c,"applyResponseHeaders")}function LSe({server:e,port:t,securePort:r}){e.http(zj,t||r?{port:t,securePort:r}:{port:"all"}),Gj||(Gj=!0,setInterval(()=>{cu=new Map},In.get(F.AUTHENTICATION_CACHETTL)).unref(),ySe.addListener(()=>{cu=new Map}))}async function PL(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 LL(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var qj,$j,In,Vj,Kj,OL,SSe,TSe,ySe,Yj,RSe,Vy,bSe,ASe,ISe,wSe,Hj,Ky,Wj,NSe,CSe,OSe,cu,Gj,Yy=se(()=>{qj=b(Es());Hr();za();kd();we();$j=require("uuid"),In=b(me());H();Vj=b(J()),Kj=b(xp());kp();OL=b(oe());bT();Fo();({forComponent:SSe,AuthAuditLog:TSe}=Vj.default),{user:ySe}=Kj.default,Yj=SSe("authentication"),{debug:RSe}=Yj,Vy=Yj.withTag("auth-event");In.initSync();bSe=In.get(F.HTTP_CORSACCESSLIST),ASe=In.get(F.HTTP_CORS),ISe=In.get(F.OPERATIONSAPI_NETWORK_CORSACCESSLIST),wSe=In.get(F.OPERATIONSAPI_NETWORK_CORS),Hj=Xe({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ky=In.get(F.AUTHENTICATION_ENABLESESSIONS)??!0,Wj=process.env.AUTHENTICATION_AUTHORIZELOCAL??In.get(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,NSe=In.get(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,CSe=In.get(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,OSe="Tue, 01 Oct 8307 19:33:20 GMT",cu=new Map;Be.onInvalidatedUser(()=>{cu=new Map});a(PSe,"bypassAuth");a(zj,"authentication");a(LSe,"start");a(PL,"login");a(LL,"logout")});var t2=M((Jke,e2)=>{"use strict";var Ie=require("joi"),jj=require("fs-extra"),Qj=require("path"),Cs=mt(),Jj=me(),Xj=(H(),v(z)),Zj=J(),{hdbErrors:DSe}=_e(),{HDB_ERROR_MSGS:wn}=DSe,Ra=/^[a-zA-Z0-9-_]+$/,vSe=/^[a-zA-Z0-9-_]+$/;e2.exports={getDropCustomFunctionValidator:USe,setCustomFunctionValidator:xSe,addComponentValidator:HSe,dropCustomFunctionProjectValidator:GSe,packageComponentValidator:qSe,deployComponentValidator:$Se,setComponentFileValidator:BSe,getComponentFileValidator:kSe,dropComponentFileValidator:FSe,addSSHKeyValidator:VSe,updateSSHKeyValidator:KSe,deleteSSHKeyValidator:YSe,setSSHKnownHostsValidator:WSe};function Wy(e,t,r){try{let n=Jj.get(Xj.CONFIG_PARAMS.COMPONENTSROOT),s=Qj.join(n,t);return jj.existsSync(s)?e?t:r.message(wn.PROJECT_EXISTS):e?r.message(wn.NO_PROJECT):t}catch(n){return Zj.error(n),r.message(wn.VALIDATION_ERR)}}a(Wy,"checkProjectExists");function oE(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(oE,"checkFilePath");function MSe(e,t,r,n){try{let s=Jj.get(Xj.CONFIG_PARAMS.COMPONENTSROOT),i=Qj.join(s,e,t,r+".js");return jj.existsSync(i)?r:n.message(wn.NO_FILE)}catch(s){return Zj.error(s),n.message(wn.VALIDATION_ERR)}}a(MSe,"checkFileExists");function USe(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(Wy.bind(null,!0)).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().pattern(Ra).custom(MSe.bind(null,e.project,e.type)).custom(oE).required().messages({"string.pattern.base":wn.BAD_FILE_NAME})});return Cs.validateBySchema(e,t)}a(USe,"getDropCustomFunctionValidator");function xSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(Wy.bind(null,!0)).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),type:Ie.string().valid("helpers","routes").required(),file:Ie.string().custom(oE).required(),function_content:Ie.string().required()});return Cs.validateBySchema(e,t)}a(xSe,"setCustomFunctionValidator");function BSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),file:Ie.string().custom(oE).required(),payload:Ie.string().allow("").optional(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a(BSe,"setComponentFileValidator");function FSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),file:Ie.string().custom(oE).optional()});return Cs.validateBySchema(e,t)}a(FSe,"dropComponentFileValidator");function kSe(e){let t=Ie.object({project:Ie.string().required(),file:Ie.string().custom(oE).required(),encoding:Ie.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Cs.validateBySchema(e,t)}a(kSe,"getComponentFileValidator");function HSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(Wy.bind(null,!1)).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),template:Ie.string().optional(),install:Ie.object({command:Ie.string().optional(),timeout:Ie.number().optional()}).optional()});return Cs.validateBySchema(e,t)}a(HSe,"addComponentValidator");function GSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).custom(Wy.bind(null,!0)).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME})});return Cs.validateBySchema(e,t)}a(GSe,"dropCustomFunctionProjectValidator");function qSe(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),skip_node_modules:Ie.boolean(),skip_symlinks:Ie.boolean()});return Cs.validateBySchema(e,t)}a(qSe,"packageComponentValidator");function $Se(e){let t=Ie.object({project:Ie.string().pattern(Ra).required().messages({"string.pattern.base":wn.BAD_PROJECT_NAME}),package:Ie.string().optional(),restart:Ie.alternatives().try(Ie.boolean(),Ie.string().valid("rolling")).optional()});return Cs.validateBySchema(e,t)}a($Se,"deployComponentValidator");function VSe(e){let t=Ie.object({name:Ie.string().pattern(vSe).required().messages({"string.pattern.base":wn.BAD_SSH_KEY_NAME}),key:Ie.string().required(),host:Ie.string().required(),hostname:Ie.string().required(),known_hosts:Ie.string().optional()});return Cs.validateBySchema(e,t)}a(VSe,"addSSHKeyValidator");function KSe(e){let t=Ie.object({name:Ie.string().required(),key:Ie.string().required()});return Cs.validateBySchema(e,t)}a(KSe,"updateSSHKeyValidator");function YSe(e){let t=Ie.object({name:Ie.string().required()});return Cs.validateBySchema(e,t)}a(YSe,"deleteSSHKeyValidator");function WSe(e){let t=Ie.object({known_hosts:Ie.string().required()});return Cs.validateBySchema(e,t)}a(WSe,"setSSHKnownHostsValidator")});var i2={};ye(i2,{packageDirectory:()=>zSe});function zSe(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];n2.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,r2.join)("cache","webpack")):void 0,map:a(i=>(i.type==="directory"&&(i.mode=493),i),"map")}).pipe((0,s2.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var r2,n2,s2,o2=se(()=>{r2=require("path"),n2=b(require("tar-fs")),s2=require("node:zlib");a(zSe,"packageDirectory")});var jy={};ye(jy,{Application:()=>zy,assertApplicationConfig:()=>f2,extractApplication:()=>m2,installApplication:()=>p2,installApplications:()=>QSe,nonInteractiveSpawn:()=>aE,prepareApplication:()=>h2});function f2(e,t){if(typeof t.package!="string")throw new TypeError(`Invalid 'package' property for application ${e}: expected string, got ${typeof t.package}`);if("install"in t){if(typeof t.install!="object"||t.install===null)throw new TypeError(`Invalid 'install' property for application ${e}: expected object, got ${typeof t.install}`);if("command"in t.install&&typeof t.install.command!="string")throw new TypeError(`Invalid 'install.command' property for application ${e}: expected string, got ${typeof t.install.command}`);if("timeout"in t.install&&(typeof t.install.timeout!="number"||t.install.timeout<0))throw new TypeError(`Invalid 'install.timeout' property for application ${e}: expected non-negativenumber, got ${typeof t.install.timeout}`)}}async function m2(e){if(!e.payload&&!e.packageIdentifier)throw new Error("Either payload or package must be provided");if(e.payload&&e.packageIdentifier)throw new Error("Both payload and package cannot be provided");let t,r;if(e.payload)r=c2.Readable.from(e.payload instanceof Buffer?e.payload:Buffer.from(e.payload,"base64"));else{let s=(0,Qn.dirname)(e.dirPath);if(e.packageIdentifier.startsWith("file:")){let i=e.packageIdentifier.slice(5);try{let o=await(0,dt.stat)(i);if(o.isDirectory()){await(0,dt.symlink)(i,e.dirPath,"dir");return}if(!o.isFile())throw new Error(`File path specified in package identifier is not a file or directory: ${i}`);t=i,r=(0,Fc.createReadStream)(t)}catch(o){throw o.code==="ENOENT"?new Error(`File path specified in package identifier does not exist: ${i}`):o}}else{let{stdout:i}=await aE(e.name,"npm",["pack",e.packageIdentifier],s);t=(0,Qn.join)(s,i.trim()),r=(0,Fc.createReadStream)(t)}}try{await(0,dt.access)(e.dirPath,dt.constants.F_OK),await(0,dt.rm)(e.dirPath,{recursive:!0,force:!0})}catch(s){if(s.code!=="ENOENT")throw s}await(0,dt.mkdir)(e.dirPath,{recursive:!0}),await(0,l2.pipeline)(r,(0,d2.default)(),(0,u2.extract)(e.dirPath));let n=await(0,dt.readdir)(e.dirPath,{withFileTypes:!0});if(n.length===1&&n[0].isDirectory()){let s=(0,Qn.join)(e.dirPath,n[0].name),i=await(0,dt.mkdtemp)(e.dirPath);await(0,dt.cp)(s,i,{recursive:!0}),await(0,dt.rm)(s,{recursive:!0,force:!0}),await(0,dt.cp)(i,e.dirPath,{recursive:!0}),await(0,dt.rm)(i,{recursive:!0,force:!0})}t&&await(0,dt.rm)(t,{force:!0})}async function p2(e){try{await(0,dt.access)((0,Qn.join)(e.dirPath,"package.json"),dt.constants.F_OK)}catch(i){if(i.code!=="ENOENT")throw i;e.logger.debug(`Application ${e.name} has no package.json; skipping install`);return}try{await(0,dt.access)((0,Qn.join)(e.dirPath,"node_modules"),dt.constants.F_OK),e.logger.debug(`Application ${e.name} already has node_modules; skipping install`);return}catch(i){if(i.code!=="ENOENT")throw i}if(e.install?.command){let[i,...o]=e.install.command.split(" "),{stderr:c,code:l}=await aE(e.name,i,o,e.dirPath,e.install?.timeout);if(l===0)return;throw Gf(e.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using custom install command: ${e.install.command}. Exit code: ${l}`)}let t=JSON.parse(await(0,dt.readFile)((0,Qn.join)(e.dirPath,"package.json"),"utf8")),{packageManager:r}=t.devEngines||{};if(r){let i=r.onFail,o=["ignore","warn","error"];i==="download"?(e.logger.warn('Harper currently does not support `devEngines.packageManager.onFail = "download"`. Defaulting to "error"'),i="error"):i&&!o.includes(i)&&(e.logger.error(`Invalid \`devEngines.packageManager.onFail\` value: "${i}". Expected one of ${o.map(u=>`"${u}"`).join(", ")}. Defaulting to "error"`),i="error"),i=i||"error";let{stderr:c,code:l}=await aE(e.name,r.name,["install"],e.dirPath,e.install?.timeout);if(l===0)return;if(i==="error")throw Gf(r.name,c,"error"),new Error(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`);i==="warn"&&(Gf(r.name,c,"warn"),e.logger.warn(`Failed to install dependencies for ${e.name} using ${r.name}. Exit code: ${l}`))}let{stderr:n,code:s}=await aE(e.name,"npm",["install","--force"],e.dirPath);if(s!==0)throw Gf(e.name,n,"error"),new Error(`Failed to install dependencies for ${e.name} using npm default. Exit code: ${s}`)}function jSe(e){return e.includes(":")?e:e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?`npm:${e}`:(0,Qn.extname)(e)||(0,Fc.existsSync)(e)?`file:${e}`:`github:${e}`}function h2(e){return m2(e).then(()=>p2(e))}async function QSe(){let e=(0,qf.getConfigObj)(),t=(0,qf.getConfigValue)(F.COMPONENTSROOT);await(0,dt.mkdir)(t,{recursive:!0});let r=[];for(let[s,i]of Object.entries(e)){if(typeof i!="object"||i===null||!("package"in i))continue;f2(s,i);let o=new zy({name:s,packageIdentifier:i.package,install:i.install});r.push(h2(o))}let n=await Promise.allSettled(r);Bc.default.debug(n),Bc.default.info("All root applications loaded")}function JSe(){let e=(0,qf.getConfigValue)(F.ROOTPATH),t=(0,Qn.join)(e,"ssh");if((0,Fc.existsSync)(t)){for(let r of(0,Fc.readdirSync)(t))if(r.includes(".key"))return`ssh -F ${(0,Qn.join)(t,"config")} -o UserKnownHostsFile=${(0,Qn.join)(t,"known_hosts")}`}}function aE(e,t,r,n,s=300*1e3){return new Promise((i,o)=>{Bc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Executing \`${t} ${r.join(" ")}\` in ${n}`);let c={...process.env},l=JSe();l&&(c.GIT_SSH_COMMAND=l);let u=(0,a2.spawn)(t,r,{shell:!0,cwd:n,env:c,stdio:["ignore","pipe","pipe"]}),d=setTimeout(()=>{u.kill(),o(new Error(`Command\`${t} ${r.join(" ")}\` timed out after ${s}ms`))},s),f="";u.stdout.on("data",p=>{f+=p.toString(),Bc.default.loggerWithTag(`${e}:spawn:${t}:stdout`).debug(p.toString())});let m="";u.stderr.on("data",p=>{m+=p.toString()}),u.on("error",p=>{clearTimeout(d),m&&Gf(e,t,m),o(p)}),u.on("close",p=>{clearTimeout(d),m&&Gf(e,t,m),Bc.default.loggerWithTag(`${e}:spawn:${t}`).debug(`Process exited with code ${p}`),i({stdout:f,stderr:m,code:p})})})}function Gf(e,t,r,n="debug"){let s=Bc.default.loggerWithTag(`${e}:spawn:${t}:stderr`);for(let i of r.split(`
120
+ `))s[n](i)}var qf,Bc,Qn,dt,a2,Fc,c2,l2,u2,d2,zy,Qy=se(()=>{qf=b(gt());H();Bc=b(J()),Qn=require("node:path"),dt=require("node:fs/promises"),a2=require("node:child_process"),Fc=require("node:fs"),c2=require("node:stream"),l2=require("node:stream/promises"),u2=require("tar-fs"),d2=b(require("gunzip-maybe"));a(f2,"assertApplicationConfig");a(m2,"extractApplication");a(p2,"installApplication");zy=class{static{a(this,"Application")}name;payload;packageIdentifier;install;dirPath;logger;constructor({name:t,payload:r,packageIdentifier:n,install:s}){this.name=t,this.payload=r,this.packageIdentifier=n&&jSe(n),this.install=s,this.dirPath=(0,Qn.join)((0,qf.getConfigValue)(F.COMPONENTSROOT),t),this.logger=Bc.default.loggerWithTag(t)}};a(jSe,"derivePackageIdentifier");a(h2,"prepareApplication");a(QSe,"installApplications");a(JSe,"getGitSSHCommand");a(aE,"nonInteractiveSpawn");a(Gf,"printStderr")});var ML=M(ar=>{"use strict";var $e=require("node:path"),{isMainThread:XSe}=require("node:worker_threads"),Ue=require("fs-extra"),DL=require("fast-glob"),vL=require("normalize-path"),Jn=t2(),jt=J(),Lt=(H(),v(z)),Tr=me(),Jy=gt(),ZSe=oe(),{PACKAGE_ROOT:eTe}=yt(),{handleHDBError:Qt,hdbErrors:tTe}=_e(),rHe=me(),{HDB_ERROR_MSGS:lu,HTTP_STATUS_CODES:Jt}=tTe,E2=st(),{replicateOperation:Ci}=(Ss(),v(ra)),{packageDirectory:rTe}=(o2(),v(i2)),nHe=$e.join(eTe,"application-template"),nTe=Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),kc=$e.join(nTe,"ssh"),ba=$e.join(kc,"known_hosts"),{Resources:sTe}=(za(),v(eI)),{Application:_2,prepareApplication:g2}=(Qy(),v(jy));function iTe(){jt.trace("getting custom api status");let e={};try{e={port:Tr.get(Lt.CONFIG_PARAMS.HTTP_PORT),directory:Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Qt(new Error,lu.FUNCTION_STATUS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,t)}return e}a(iTe,"customFunctionsStatus");function oTe(){jt.trace("getting custom api endpoints");let e={},t=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT);try{DL.sync(vL(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:DL.sync(vL(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:DL.sync(vL(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Qt(new Error,lu.GET_FUNCTIONS,Jt.INTERNAL_SERVER_ERROR,jt.ERR,r)}return e}a(oTe,"getCustomFunctions");function aTe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("getting custom api endpoint file content");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,o=$e.join(r,n,s,i+".js");try{return Ue.readFileSync(o,{encoding:"utf8"})}catch(c){throw Qt(new Error,lu.GET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}a(aTe,"getCustomFunction");async function cTe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.setCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("setting custom function file content");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:o}=e;try{Ue.outputFileSync($e.join(r,n,s,i+".js"),o);let c=await Ci(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Qt(new Error,lu.SET_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,c)}}a(cTe,"setCustomFunction");async function lTe(e){e.project&&(e.project=$e.parse(e.project).name),e.file&&(e.file=$e.parse(e.file).name);let t=Jn.getDropCustomFunctionValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function file");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ue.unlinkSync($e.join(r,n,s,i+".js"));let o=await Ci(e);return o.message=`Successfully deleted custom function: ${i}.js`,o}catch(o){throw Qt(new Error,lu.DROP_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,o)}}a(lTe,"dropCustomFunction");async function uTe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.addComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("adding component");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n,install:s}=e,i=e.template||"https://github.com/harperdb/application-template";try{let o=$e.join(r,n);Ue.mkdirSync(o,{recursive:!0});let c=new _2({name:n,packageIdentifier:i,install:s});await g2(c);let l=await Ci(e);return l.message=`Successfully added project: ${n}`,l}catch(o){throw Qt(new Error,lu.ADD_FUNCTION,Jt.INTERNAL_SERVER_ERROR,jt.ERR,o)}}a(uTe,"addComponent");async function dTe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.dropCustomFunctionProjectValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);jt.trace("dropping custom function project");let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=Tr.get(Lt.CONFIG_PARAMS.APPS);if(!ZSe.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 Jy.updateConfigValue(Lt.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=$e.join(r,n);Ue.rmSync(i,{recursive:!0});let o=await Ci(e);return o.message=`Successfully deleted project: ${n}`,o}catch(i){throw Qt(new Error,lu.DROP_FUNCTION_PROJECT,Jt.INTERNAL_SERVER_ERROR,jt.ERR,i)}}a(dTe,"dropCustomFunctionProject");async function fTe(e){e.project&&(e.project=$e.parse(e.project).name);let t=Jn.packageComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;jt.trace("packaging component",n);let s;try{s=await Ue.realpath($e.join(r,n))}catch(o){if(o.code!==Lt.NODE_ERROR_CODES.ENOENT)throw o;try{s=await Ue.realpath($e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===Lt.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await rTe(s,e)).toString("base64");return{project:n,payload:i}}a(fTe,"packageComponent");async function mTe(e){e.project?e.project=$e.parse(e.project).name:e.package&&(e.project=pTe(e.package));let t=Jn.deployComponentValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);if(e.package){let l={package:e.package};(e.install_command||e.install_timeout)&&(l.install={command:e.install_command,timeout:e.install_timeout}),await Jy.addConfig(e.project,l)}let r=new _2({name:e.project,payload:e.payload,packageIdentifier:e.package,install:{command:e.install_command,timeout:e.install_timeout}});if(await g2(r),XSe)return;let n=new sTe;n.isWorker=!0;let s=(Zh(),v(xy)),i;if(s.setErrorReporter(l=>i=l),await s.loadComponent(r.dirPath,n),i)throw i;let o=e.restart==="rolling";e.restart=o?!1:e.restart;let c=await Ci(e);if(e.restart===!0)E2.restartWorkers("http"),c.message=`Successfully deployed: ${r.name}, restarting HarperDB`;else if(o){let u=await(xL(),v(UL)).executeJob({operation:"restart_service",service:"http",replicated:!0});c.restartJobId=u.job_id,c.message=`Successfully deployed: ${r.name}, restarting HarperDB`}else c.message=`Successfully deployed: ${r.name}`;return c}a(mTe,"deployComponent");function pTe(e){if(e.startsWith("git+ssh://"))return $e.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return $e.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ue.readFileSync($e.join(e,"package.json"),"utf8"));return $e.basename(t)}catch{}return $e.basename(e)}a(pTe,"getProjectNameFromPackage");async function hTe(){let e=Jy.getConfiguration(),t=a(async(i,o)=>{try{let c=await Ue.readdir(i,{withFileTypes:!0});for(let l of c){let u=l.name;if(u.startsWith(".")||u==="node_modules")continue;let d=$e.join(i,u);if(l.isDirectory()||l.isSymbolicLink()){let f={name:u,entries:[]};o.entries.push(f),await t(d,f)}else{let f=await Ue.stat(d),m={name:$e.basename(u),mtime:f.mtime,size:f.size};o.entries.push(m)}}return o}catch(c){return jt.warn("Error loading package",c),{error:c.toString(),entries:[]}}},"walkDir"),r=await t(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),{name:Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT).split($e.sep).slice(-1).pop(),entries:[]});for(let i of r.entries){let o=e[i.name]?.package;o&&(i.package=o)}let{internal:n}=(Mp(),v(fN)),s;try{s=await n.ComponentStatusRegistry.getAggregatedFromAllThreads(n.componentStatusRegistry)}catch(i){jt.debug(`Failed to get component status from threads: ${i.message}`)}for(let i of r.entries)try{i.status=await n.componentStatusRegistry.getAggregatedStatusFor(i.name,s)}catch(o){jt.debug(`Failed to get aggregated status for component ${i.name}: ${o.message}`),i.status={status:"unknown",message:"Failed to retrieve component status",lastChecked:{workers:{}}}}return r}a(hTe,"getComponents");async function ETe(e){let t=Jn.getComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let s=await Ue.stat($e.join(r,e.project,e.file));return{message:await Ue.readFile($e.join(r,e.project,e.file),n),size:s.size,birthtime:s.birthtime,mtime:s.mtime}}catch(s){throw s.code===Lt.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${$e.join(e.project,e.file)}'`):s}}a(ETe,"getComponentFile");async function _Te(e){let t=Jn.setComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=$e.join(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ue.ensureFile(n),await Ue.outputFile(n,e.payload,r)):await Ue.ensureDir(n);let s=await Ci(e);return s.message="Successfully set component: "+e.file,s}a(_Te,"setComponentFile");async function gTe(e){let t=Jn.dropComponentFileValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?$e.join(r,n):r,i=$e.join(Tr.get(Lt.CONFIG_PARAMS.COMPONENTSROOT),s),o=$e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ue.pathExists(o)&&await Ue.unlink(o),await Ue.pathExists(i)&&await Ue.remove(i);let c=$e.join(Tr.get(Lt.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ue.pathExists(c)){let u=JSON.parse(await Ue.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ue.writeFile(c,JSON.stringify(u,null,2),"utf8")}Jy.deleteConfigFromFile([r]);let l=await Ci(e);return e.restart===!0?(E2.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}a(gTe,"dropComponent");async function STe(e){let t=Jn.addSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:o}=e;jt.trace("adding ssh key",r);let c=$e.join(kc,r+".key"),l=$e.join(kc,"config");if(await Ue.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ue.outputFile(c,n),await Ue.chmod(c,"0600");let u=`#${r}
121
121
  Host ${s}
122
122
  HostName ${i}
123
123
  User git
@@ -127,12 +127,12 @@ Host ${s}
127
127
  `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}o&&await Ue.appendFile(ba,o);let f=await Ci(e);return f.message=`Added ssh key: ${r}${d}`,f}a(STe,"addSSHKey");async function TTe(e){let t=Jn.updateSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r,key:n}=e;jt.trace("updating ssh key",r);let s=$e.join(kc,r+".key");if(!await Ue.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ue.outputFile(s,n);let i=await Ci(e);return i.message=`Updated ssh key: ${r}`,i}a(TTe,"updateSSHKey");async function yTe(e){let t=Jn.deleteSSHKeyValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{name:r}=e;jt.trace("deleting ssh key",r);let n=$e.join(kc,r+".key"),s=$e.join(kc,"config");if(!await Ue.pathExists(n))throw new Error("Key does not exist");let i=await Ue.readFile(s,"utf8"),o=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(o,""),await Ue.outputFile(s,i),Ue.removeSync(n);let c=await Ci(e);return c.message=`Deleted ssh key: ${r}`,c}a(yTe,"deleteSSHKey");async function RTe(e){let t=[];return await Ue.pathExists(kc)&&(await Ue.readdir(kc)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}a(RTe,"listSSHKeys");async function bTe(e){let t=Jn.setSSHKnownHostsValidator(e);if(t)throw Qt(t,t.message,Jt.BAD_REQUEST);let{known_hosts:r}=e;await Ue.outputFile(ba,r);let n=await Ci(e);return n.message="Known hosts successfully set",n}a(bTe,"setSSHKnownHosts");async function ATe(e){return await Ue.pathExists(ba)?{known_hosts:await Ue.readFile(ba,"utf8")}:{known_hosts:null}}a(ATe,"getSSHKnownHosts");ar.customFunctionsStatus=iTe;ar.getCustomFunctions=oTe;ar.getCustomFunction=aTe;ar.setCustomFunction=cTe;ar.dropCustomFunction=lTe;ar.addComponent=uTe;ar.dropCustomFunctionProject=dTe;ar.packageComponent=fTe;ar.deployComponent=mTe;ar.getComponents=hTe;ar.getComponentFile=ETe;ar.setComponentFile=_Te;ar.dropComponent=gTe;ar.addSSHKey=STe;ar.updateSSHKey=TTe;ar.deleteSSHKey=yTe;ar.listSSHKeys=RTe;ar.setSSHKnownHosts=bTe;ar.getSSHKnownHosts=ATe});var BL=M((oHe,T2)=>{"use strict";var Zs=require("joi"),S2=mt();T2.exports={readTransactionLogValidator:ITe,deleteTransactionLogsBeforeValidator:wTe};function ITe(e){let t=Zs.object({schema:Zs.string(),database:Zs.string(),table:Zs.string().required(),from:Zs.date().timestamp(),to:Zs.date().timestamp(),limit:Zs.number().min(1)});return S2.validateBySchema(e,t)}a(ITe,"readTransactionLogValidator");function wTe(e){let t=Zs.object({schema:Zs.string(),database:Zs.string(),table:Zs.string().required(),timestamp:Zs.date().timestamp().required()});return S2.validateBySchema(e,t)}a(wTe,"deleteTransactionLogsBeforeValidator")});var eR=M((cHe,w2)=>{"use strict";var FL=(H(),v(z)),cE=_r(),y2=oe(),R2=me(),b2=no(),A2=J(),{handleHDBError:Xy,hdbErrors:NTe}=_e(),{HTTP_STATUS_CODES:Zy}=NTe,{readTransactionLogValidator:CTe,deleteTransactionLogsBeforeValidator:OTe}=BL(),I2=fs(),PTe="Logs successfully deleted from transaction log.",LTe="All logs successfully deleted from transaction log.";w2.exports={readTransactionLog:DTe,deleteTransactionLogsBefore:MTe};async function DTe(e){let t=CTe(e);if(t)throw Xy(t,t.message,Zy.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=y2.checkSchemaTableExist(e.database,e.table);if(r)throw Xy(new Error,r,Zy.NOT_FOUND,void 0,void 0,!0);return R2.get(FL.CONFIG_PARAMS.CLUSTERING_ENABLED)?await vTe(e):(A2.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)),I2.readAuditLog(e))}a(DTe,"readTransactionLog");async function*vTe(e){let t=b2.createNatsTableStreamName(e.database,e.table),r=await cE.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===FL.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}a(vTe,"readTransactionLogNats");async function MTe(e){let t=OTe(e);if(t)throw Xy(t,t.message,Zy.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!R2.get(FL.CONFIG_PARAMS.CLUSTERING_ENABLED))return A2.info("Delete transaction logs called for Plexus"),I2.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=y2.checkSchemaTableExist(r,n);if(i)throw Xy(new Error,i,Zy.NOT_FOUND,void 0,void 0,!0);let o=b2.createNatsTableStreamName(r,n),{jsm:c}=await cE.getNATSReferences(),l=await cE.getStreamInfo(o),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=PTe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=LTe):f=(await cE.viewStream(o,parseInt(s),1))[0].nats_sequence,await cE.purgeTableStream(r,n,{seq:f}),d}a(MTe,"deleteTransactionLogsBefore")});var kL=M((uHe,C2)=>{"use strict";var tR=require("joi"),UTe=require("path"),{handleHDBError:xTe,hdbErrors:BTe}=_e(),{HTTP_STATUS_CODES:FTe}=BTe,kTe=mt(),N2=J();C2.exports={installModules:$Te};var{CONFIG_PARAMS:HTe}=(H(),v(z)),{getConfigValue:GTe}=gt(),{nonInteractiveSpawn:qTe}=(Qy(),v(jy));async function $Te(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";N2.warn(t,e.projects);let r=KTe(e);if(r)throw xTe(r,r.message,FTe.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=GTe(HTe.COMPONENTSROOT),o={},c=["install","--force","--omit=dev","--json"];s&&c.push("--dry-run");for(let l of n){o[l]={npm_output:null,npm_error:null};let u=UTe.join(i,l);try{let{stdout:d,stderr:f}=qTe(l,"npm",c,u);d=d?d.replace(`
128
128
  `,""):null,f=f?f.replace(`
129
129
  `,""):null;try{o[l].npm_output=JSON.parse(d)}catch{o[l].npm_output=d}try{o[l].npm_error=JSON.parse(f)}catch{o[l].npm_error=f}}catch(d){d.stderr?o[l].npm_error=VTe(d.stderr):o[l].npm_error=d.message;continue}}return N2.info(`finished installModules with response ${o}`),o.warning=t,o}a($Te,"installModules");function VTe(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
130
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(VTe,"parseNPMStdErr");function KTe(e){let t=tR.object({projects:tR.array().min(1).items(tR.string()).required(),dry_run:tR.boolean().default(!1)});return kTe.validateBySchema(e,t)}a(KTe,"modulesValidator")});var $L={};ye($L,{describeMetric:()=>M2,describeMetricOp:()=>qL,get:()=>D2,getOp:()=>HL,listMetrics:()=>v2,listMetricsOp:()=>GL});async function WTe(e){return(await J_().get(e)).hostname}function O2(e,t){return e.length===0||e.includes(t)}function HL(e){return lE.trace?.("get_analytics request:",e),D2(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function L2(e){return"conditions"in e?{...e,conditions:e.conditions.map(L2)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function D2(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(L2));let o=t??[];O2(o,"id")||o.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return o.length>0&&(c.select=o),lE.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],O2(o,"node")&&(lE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await WTe(d)),lE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function GL(e){return v2(e.metric_types)}async function v2(e=["builtin"]){let t=[],r=Object.values(Go);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,o=await databases.system.hdb_analytics.search(s);for await(let c of o)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function qL(e){return M2(e.metric)}async function M2(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let o in s)n.push({name:o,type:typeof s[o]});let i={attributes:n};return lE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var P2,YTe,lE,VL=ne(()=>{P2=b(J());LA();DA();({forComponent:YTe}=P2.default),lE=YTe("analytics").conditional;a(WTe,"lookupHostname");a(O2,"isSelected");a(HL,"getOp");a(L2,"conformCondition");a(D2,"get");a(GL,"listMetricsOp");a(v2,"listMetrics");a(qL,"describeMetricOp");a(M2,"describeMetric")});var rR,nR,uE,sR=ne(()=>{rR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},nR=Object.keys(rR),uE="primary"});function x2(e){return U2.validateBySchema(e,JTe)}var dE,U2,zTe,jTe,QTe,JTe,B2=ne(()=>{dE=b(require("joi")),U2=b(mt());sR();zTe=nR,jTe=Object.entries(rR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),QTe=a(()=>{let e=dE.default.string().min(1).max(512);return Object.entries(rR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:dE.default.string().valid(...r.allowedValues).messages({"any.only":jTe[t]})}))}),e.required()},"createStatusValidationSchema"),JTe=dE.default.object({id:dE.default.string().valid(...zTe).required(),status:QTe()});a(x2,"validateStatus")});function F2(){KL||(KL=Aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),YL=new Uint8Array(KL))}function k2(){F2(),YL[0]=1}function H2(){return F2(),YL[0]===1}var KL,YL,WL=ne(()=>{fE();a(F2,"ensureInitialized");a(k2,"requestRestart");a(H2,"restartNeeded")});var XL={};ye(XL,{DEFAULT_STATUS_ID:()=>uE,STATUS_IDS:()=>nR,Status:()=>Aa,clear:()=>jL,get:()=>QL,set:()=>JL});function pE(){return zL||(zL=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),zL}function jL({id:e}){return mE.debug?.("clearStatus",e),pE().delete(e)}async function ZTe(){mE.debug?.("getAllStatus");let e=pE().get({}),t=await vp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=H2();return{systemStatus:e,componentStatus:r,restartRequired:n}}function QL({id:e}){return e?(mE.debug?.("getStatus",e),pE().get(e)):(mE.debug?.("getStatus","all"),ZTe())}function JL({status:e,id:t=uE}){let r=x2({status:e,id:t});if(r)throw(0,iR.handleHDBError)(r,r.message,XTe.BAD_REQUEST);return mE.debug?.("setStatus",t,e),pE().put(t,{status:e})}var iR,G2,XTe,zL,Aa,mE,fE=ne(()=>{we();iR=b(_e()),G2=b(wr());B2();sR();Mp();WL();sR();({HTTP_STATUS_CODES:XTe}=iR.hdbErrors);a(pE,"getStatusTable");Aa={get primaryStore(){return pE().primaryStore}},mE=(0,G2.loggerWithTag)("status");a(jL,"clearStatus");a(ZTe,"getAllStatus");a(QL,"getStatus");a(JL,"setStatus")});var rD={};ye(rD,{getFingerprint:()=>eD,getRegistrationInfo:()=>ZL,setLicense:()=>tD});function ZL(){return{version:q2.packageJson.version,deprecated:!0}}function eD(){return{message:"this-is-deprecated",deprecated:!0}}function tD(){return{deprecated:!0}}var q2,nD=ne(()=>{q2=b(yt());a(ZL,"getRegistrationInfo");a(eD,"getFingerprint");a(tD,"setLicense")});var V2=M((PHe,$2)=>{"use strict";var hE=require("alasql"),uu=require("recursive-iterator"),Oi=J(),eye=oe(),EE=(H(),v(z)),sD=class{static{a(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,rye(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=>EE.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=>!EE.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][EE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=tye(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=>!EE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new hE.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 tye(e){return e.filter(t=>t[EE.PERMS_CRUD_ENUM.READ])}a(tye,"filterReadRestrictedAttrs");function rye(e,t,r,n,s){nye(e,t,r,n,s)}a(rye,"interpretAST");function _E(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(_E,"addSchemaTableToMap");function nye(e,t,r,n,s){if(!e){Oi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof hE.yy.Insert?aye(e,t,r):e instanceof hE.yy.Select?sye(e,t,r,n,s):e instanceof hE.yy.Update?iye(e,t,r):e instanceof hE.yy.Delete?oye(e,t,r):Oi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(nye,"getRecordAttributesAST");function sye(e,t,r,n,s){if(!e){Oi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(eye.isEmptyOrZeroLength(i)){Oi.error("No schema specified");return}e.from.forEach(c=>{_E(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),_E(c.table,t,r,n,s)});let o=new uu(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{Oi.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 uu(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{Oi.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 uu(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Oi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new uu(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{Oi.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(sye,"getSelectAttributes");function iye(e,t,r){if(!e){Oi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new uu(e.columns),s=e.table.databaseid;_E(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&iD(e.table.tableid,s,i.columnid,t,r)}a(iye,"getUpdateAttributes");function oye(e,t,r){if(!e){Oi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new uu(e.where),s=e.table.databaseid;_E(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&iD(e.table.tableid,s,i.columnid,t,r)}a(oye,"getDeleteAttributes");function aye(e,t,r){if(!e){Oi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new uu(e.columns),s=e.into.databaseid;_E(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&iD(e.into.tableid,s,i.columnid,t,r)}a(aye,"getInsertAttributes");function iD(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(iD,"pushAttribute");$2.exports=sD});var lR=M((DHe,a4)=>{"use strict";var oD=Vn(),oR=gn(),Os=DT(),TE=kl(),aD=Nl(),cye=mO(),lye=sK(),yE=Es(),aR=Jp(),vr=J(),uye=gO(),dye=VT(),fye=KO(),mye=YT(),pye=zO(),hye=jO(),Eye=XO(),_ye=eP(),cD=JT(),Ia=oe(),W2=Hf(),Nn=(H(),v(z)),z2=kj(),gye=wh(),j2=(kd(),v(nh)),Q2=(Yy(),v(iE)),J2=gt(),yr=ML(),X2=eR(),Sye=kL(),$f=ys(),Z2=(mf(),v(ff)),lD=(VL(),v($L)),uD=(fE(),v(XL)),e4=(zh(),v(wy)),dD=(nD(),v(rD)),t4=hC(),{handleHDBError:Xn,hdbErrors:r4}=_e(),{HDB_ERROR_MSGS:dn,HTTP_STATUS_CODES:gE}=r4,Z=new Map,n4="delete",Hc="insert",ei="read",du="update",SE="describe",K2=TE.describeSchema.name,Y2=TE.describeTable.name,s4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Tye={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},yye="catchup",Rye="handleGetJob",bye="handleGetJobsByStartDate",cR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Aye=[Os.createTable.name,Os.createAttribute.name,Os.dropTable.name,Os.dropAttribute.name],i4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},re=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(oD.insert.name,new re(!1,[Hc]));Z.set(oD.update.name,new re(!1,[du]));Z.set(oD.upsert.name,new re(!1,[Hc,du]));Z.set(oR.searchByConditions.name,new re(!1,[ei]));Z.set(oR.searchByHash.name,new re(!1,[ei]));Z.set(oR.searchByValue.name,new re(!1,[ei]));Z.set(oR.search.name,new re(!1,[ei]));Z.set(Os.createSchema.name,new re(!0,[]));Z.set(Os.createTable.name,new re(!0,[]));Z.set(Os.createAttribute.name,new re(!1,[Hc]));Z.set(Os.dropSchema.name,new re(!0,[]));Z.set(Os.dropTable.name,new re(!0,[]));Z.set(Os.dropAttribute.name,new re(!0,[]));Z.set(TE.describeSchema.name,new re(!1,[ei]));Z.set(TE.describeTable.name,new re(!1,[ei]));Z.set(aD.deleteRecord.name,new re(!1,[n4]));Z.set(yE.addUser.name,new re(!0,[]));Z.set(yE.alterUser.name,new re(!0,[]));Z.set(yE.dropUser.name,new re(!0,[]));Z.set(yE.listUsersExternal.name,new re(!0,[]));Z.set(aR.listRoles.name,new re(!0,[]));Z.set(aR.addRole.name,new re(!0,[]));Z.set(aR.alterRole.name,new re(!0,[]));Z.set(aR.dropRole.name,new re(!0,[]));Z.set(uye.name,new re(!0,[]));Z.set(dye.name,new re(!0,[]));Z.set(fye.name,new re(!0,[]));Z.set(mye.name,new re(!0,[]));Z.set(pye.name,new re(!0,[]));Z.set(hye.name,new re(!0,[]));Z.set(cD.setRoutes.name,new re(!0,[]));Z.set(cD.getRoutes.name,new re(!0,[]));Z.set(cD.deleteRoutes.name,new re(!0,[]));Z.set(J2.setConfiguration.name,new re(!0,[]));Z.set(Eye.clusterStatus.name,new re(!0,[]));Z.set(_ye.name,new re(!0,[]));Z.set(aD.deleteFilesBefore.name,new re(!0,[]));Z.set(aD.deleteAuditLogsBefore.name,new re(!0,[]));Z.set(W2.restart.name,new re(!0,[]));Z.set(W2.restartService.name,new re(!0,[]));Z.set(cye.name,new re(!0,[]));Z.set(lye.name,new re(!0,[ei]));Z.set(Os.cleanupOrphanBlobs.name,new re(!0,[]));Z.set(gye.systemInformation.name,new re(!0,[]));Z.set(J2.getConfiguration.name,new re(!0,[]));Z.set(X2.readTransactionLog.name,new re(!0,[]));Z.set(X2.deleteTransactionLogsBefore.name,new re(!0,[]));Z.set(Sye.installModules.name,new re(!0,[]));Z.set($f.createCsr.name,new re(!0,[]));Z.set($f.signCertificate.name,new re(!0,[]));Z.set($f.listCertificates.name,new re(!0,[]));Z.set($f.addCertificate.name,new re(!0,[]));Z.set($f.removeCertificate.name,new re(!0,[]));Z.set($f.getKey.name,new re(!0,[]));Z.set(Z2.addNodeBack.name,new re(!0,[]));Z.set(Z2.removeNodeBack.name,new re(!0,[]));Z.set(lD.getOp.name,new re(!1,[ei]));Z.set(lD.listMetricsOp.name,new re(!1,[ei]));Z.set(lD.describeMetricOp.name,new re(!1,[ei]));Z.set(uD.clear.name,new re(!0,[]));Z.set(uD.get.name,new re(!0,[]));Z.set(uD.set.name,new re(!0,[]));Z.set(e4.installUsageLicenseOp.name,new re(!0,[]));Z.set(e4.getUsageLicensesOp.name,new re(!0,[]));Z.set(dD.getFingerprint.name,new re(!0,[]));Z.set(dD.setLicense.name,new re(!0,[]));Z.set(j2.createTokens.name,new re(!1,[]));Z.set(j2.refreshOperationToken.name,new re(!1,[]));Z.set(Q2.login.name,new re(!1,[]));Z.set(Q2.logout.name,new re(!1,[]));Z.set(yr.customFunctionsStatus.name,new re(!0,[]));Z.set(yr.getCustomFunctions.name,new re(!0,[]));Z.set(yr.getComponents.name,new re(!0,[]));Z.set(yr.getComponentFile.name,new re(!0,[]));Z.set(yr.setComponentFile.name,new re(!0,[]));Z.set(yr.dropComponent.name,new re(!0,[]));Z.set(yr.getCustomFunction.name,new re(!0,[]));Z.set(yr.setCustomFunction.name,new re(!0,[]));Z.set(yr.dropCustomFunction.name,new re(!0,[]));Z.set(yr.addComponent.name,new re(!0,[]));Z.set(yr.dropCustomFunctionProject.name,new re(!0,[]));Z.set(yr.packageComponent.name,new re(!0,[]));Z.set(yr.deployComponent.name,new re(!0,[]));Z.set(yr.addSSHKey.name,new re(!0,[]));Z.set(yr.updateSSHKey.name,new re(!0,[]));Z.set(yr.deleteSSHKey.name,new re(!0,[]));Z.set(yr.listSSHKeys.name,new re(!0,[]));Z.set(yr.setSSHKnownHosts.name,new re(!0,[]));Z.set(yr.getSSHKnownHosts.name,new re(!0,[]));Z.set(dD.getRegistrationInfo.name,new re(!1,[]));Z.set(yE.userInfo.name,new re(!1,[]));Z.set(TE.describeAll.name,new re(!1,[]));Z.set(Rye,new re(!1,[]));Z.set(bye,new re(!0,[]));Z.set(yye,new re(!0,[]));Z.set(cR.CSV_DATA_LOAD,new re(!1,[Hc,du]));Z.set(cR.CSV_URL_LOAD,new re(!1,[Hc,du]));Z.set(cR.CSV_FILE_LOAD,new re(!1,[Hc,du]));Z.set(cR.IMPORT_FROM_S3,new re(!1,[Hc,du]));Z.set(i4.EXPORT_TO_S3,new re(!0,[]));Z.set(i4.EXPORT_LOCAL,new re(!0,[]));Z.set(Nn.VALID_SQL_OPS_ENUM.DELETE,new re(!1,[n4]));Z.set(Nn.VALID_SQL_OPS_ENUM.SELECT,new re(!1,[ei]));Z.set(Nn.VALID_SQL_OPS_ENUM.INSERT,new re(!1,[Hc]));Z.set(Nn.VALID_SQL_OPS_ENUM.UPDATE,new re(!1,[du]));a4.exports={verifyPerms:wye,verifyPermsAst:Iye,verifyBulkLoadAttributePerms:Cye};function Iye(e,t,r){if(Ia.isEmptyOrZeroLength(e))throw vr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Ia.isEmptyOrZeroLength(t))throw vr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Ia.isEmptyOrZeroLength(r))throw vr.info("verify_perms_ast has a null operation parameter"),Xn(new Error);try{let n=V2(),s=require("alasql"),i=new t4,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw vr.info("No schemas defined in verifyPermsAst(), will not continue."),Xn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&s4[r])throw Xn(new Error,dn.DROP_SYSTEM,gE.FORBIDDEN);if(u&&!d)return null;let f=z2.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=o4(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let g=o.getAttributesBySchemaTableName(h,p[E]),R=mD(t.role.permission,h,p[E]);fD(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Xn(n)}}a(Iye,"verifyPermsAst");function wye(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw vr.info("null required parameter in verifyPerms"),Xn(new Error,dn.DEFAULT_INVALID_REQUEST,gE.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 t4;if(Ia.isEmptyOrZeroLength(e.hdb_user?.role)||Ia.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return vr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(dn.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(Nn.SYSTEM_SCHEMA_NAME)||s===Nn.SYSTEM_SCHEMA_NAME;if(l&&d&&Tye[e.operation]&&(i===Nn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Nn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Nn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&s4[r])throw Xn(new Error,dn.DROP_SYSTEM,gE.FORBIDDEN);if(l&&!d||u===!0&&(r===Os.createSchema.name||r===Os.dropSchema.name))return null;if(Aye.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=z2.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===K2||r===Y2)&&!f.super_user){if(s===Nn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(dn.SCHEMA_PERM_ERROR(s));if(r===K2&&(!f[s]||!f[s][SE]))return c.handleInvalidItem(dn.SCHEMA_NOT_FOUND(s));if(r===Y2&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][SE]))return c.handleInvalidItem(dn.TABLE_NOT_FOUND(s,i))}let m=o4(e.hdb_user,r,o,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Nn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[Nn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[Nn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=Nye(e),h=mD(e.hdb_user?.role?.permission,s,i);return fD(p,h,r,i,s,c,n),c.getPermsResponse()}a(wye,"verifyPerms");function o4(e,t,r,n,s){if(Ia.arrayHasEmptyValues([e,t,r]))throw vr.info("hasPermissions has an invalid parameter"),Xn(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 vr.info(`operation ${t} not found.`),Xn(new Error,dn.OP_NOT_FOUND(t),gE.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return vr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(dn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][SE]===!1){n.addInvalidItem(dn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(dn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[SE]===!1)n.addInvalidItem(dn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=Z.get(t).perms;!Ia.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(vr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=dn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw vr.error(p),vr.error(m),Xn(r4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(o4,"hasPermissions");function fD(e,t,r,n,s,i,o){if(!e||!t)throw vr.info("no attributes specified in checkAttributePerms."),Xn(new Error);let c=Z.get(r).perms;if(!c||c==="")throw vr.info(`no permissions found for ${r} in checkAttributePerms().`),Xn(new Error);if(Ia.isEmptyOrZeroLength(t))return vr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[SE]===!1){i.addInvalidItem(dn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Nn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==ei)throw Xn(new Error,dn.SYSTEM_TIMESTAMP_PERMS_ERR,gE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(dn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(fD,"checkAttributePerms");function Nye(e){let t=new Set;try{if(e.action)return t;if(e.operation===Nn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){vr.info(r)}return t}a(Nye,"getRecordAttributes");function mD(e,t,r){let n=new Map;if(Ia.isEmpty(e))return vr.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{vr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(mD,"getAttributePermissions");function Cye(e,t,r,n,s,i,o){let c=new Set(i),l=mD(e,n,s);fD(c,l,t,s,n,o,r)}a(Cye,"verifyBulkLoadAttributePerms")});var hD=M((MHe,c4)=>{"use strict";var pD=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};c4.exports=pD});var yD=M((HHe,I4)=>{"use strict";var uR=Vn(),fR=aC(),Oye=require("needle"),Pi=(H(),v(z)),xHe=Ct(),Vf=oe(),{handleHDBError:Xt,hdbErrors:_4}=_e(),{HTTP_STATUS_CODES:fn,HDB_ERROR_MSGS:Mr,CHECK_LOGS_WRAPPER:mu}=_4,Kf=J(),ED=require("papaparse");Vf.promisifyPapaParse();var Li=require("fs-extra"),Pye=require("path"),{chain:l4}=require("stream-chain"),u4=require("stream-json/streamers/StreamArray"),d4=require("stream-json/utils/Batch"),f4=require("stream-chain/utils/comp"),{finished:m4}=require("stream"),Lye=me(),g4=cC(),Dye=lC(),{BulkLoadFileObject:gD,BulkLoadDataObject:vye}=v$(),SD=hC(),{verifyBulkLoadAttributePerms:S4}=lR(),BHe=hD(),FHe=_r(),kHe=no(),{databases:Mye}=(we(),v(ft)),{coerceType:Uye}=(mg(),v(nq)),p4="No records parsed from csv file.",fu=`${Lye.get("HDB_ROOT")}/tmp`,{schemaRegex:xye}=Qi(),h4=1024*1024*2,E4=5e3,Bye={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};I4.exports={csvDataLoad:Fye,csvURLLoad:kye,csvFileLoad:Hye,importFromS3:Gye};async function Fye(e,t){let r=fR.dataObject(e);if(r)throw Xt(r,r.message,fn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=R4(e.schema,e.table),i=ED.parse(e.data,{header:!0,skipEmptyLines:!0,transform:_D.bind(null,s),dynamicTyping:!1}),o=new SD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&S4(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 Xt(new Error,c,fn.BAD_REQUEST,void 0,void 0,!0);let l=new vye(e.action,e.schema,e.table,i.data);return n=await g4.callOperationFunctionAsAwait(b4,l,null),n.message===p4?p4:A4(n.records,n.number_written)}catch(s){throw pu(s)}}a(Fye,"csvDataLoad");async function kye(e){let t=fR.urlObject(e);if(t)throw Xt(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${fu}/${r}`;try{await qye(e,r)}catch(s){throw Kf.error(Mr.DOWNLOAD_FILE_ERR(r)+" - "+s),Xt(s,mu(Mr.DOWNLOAD_FILE_ERR(r)))}try{let s=new gD(this.job_operation_function.name,e.action,e.schema,e.table,n,Pi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await TD(s);return await dR(n),i}catch(s){throw await dR(n),pu(s)}}a(kye,"csvURLLoad");async function Hye(e){let t=fR.fileObject(e);if(t)throw Xt(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r=new gD(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Pi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await TD(r)}catch(n){throw pu(n)}}a(Hye,"csvFileLoad");async function Gye(e){let t=fR.s3FileObject(e);if(t)throw Xt(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Pye.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${fu}/${s}`;let i=new gD(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await $ye(s,e);let o=await TD(i);return await dR(r),o}catch(n){throw await dR(r),pu(n)}}a(Gye,"importFromS3");async function qye(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Oye("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 Xt(n,s,n.statusCode,Pi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Kye(r,e.csv_url),await Vye(t,r.raw)}a(qye,"downloadCSVFile");async function $ye(e,t){try{let r=`${fu}/${e}`;await Li.mkdirp(fu),await Li.writeFile(`${fu}/${e}`,"",{flag:"a+"});let n=await Li.createWriteStream(r),s=await Dye.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(){Kf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Kf.error(Mr.S3_DOWNLOAD_ERR+" - "+r),Xt(r,mu(Mr.S3_DOWNLOAD_ERR))}}a($ye,"downloadFileFromS3");async function Vye(e,t){try{await Li.mkdirp(fu),await Li.writeFile(`${fu}/${e}`,t)}catch(r){throw Kf.error(Mr.WRITE_TEMP_FILE_ERR),Xt(r,mu(Mr.DEFAULT_BULK_LOAD_ERR))}}a(Vye,"writeFileToTempFolder");async function dR(e){if(e)try{await Li.access(e),await Li.unlink(e)}catch{Kf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(dR,"deleteTempFile");function Kye(e,t){if(e.statusCode!==_4.HTTP_STATUS_CODES.OK)throw Xt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,fn.BAD_REQUEST);if(!Bye[e.headers["content-type"]])throw Xt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,fn.BAD_REQUEST);if(!e.raw)throw Xt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,fn.BAD_REQUEST)}a(Kye,"validateURLResponse");async function TD(e){try{let t;switch(e.file_type){case Pi.VALID_S3_FILE_TYPES.CSV:t=await Yye(e);break;case Pi.VALID_S3_FILE_TYPES.JSON:t=await Wye(e);break;default:throw Xt(new Error,Mr.DEFAULT_BULK_LOAD_ERR,fn.BAD_REQUEST,Pi.LOG_LEVELS.ERROR,Mr.INVALID_FILE_EXT_ERR(e))}return A4(t.records,t.number_written)}catch(t){throw pu(t)}}a(TD,"fileLoad");async function T4(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 uR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&S4(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Xt(c);r(l)}}a(T4,"validateChunk");async function y4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Vf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Vf.isEmpty(c)&&!Vf.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 g4.callOperationFunctionAsAwait(b4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Xt(c,mu(Mr.INSERT_CSV_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.INSERT_CSV_ERR+" - "+c);r(l)}}a(y4,"insertChunk");async function Yye(e){let t={records:0,number_written:0},r=R4(e.schema,e.table);try{let n=new SD,s=Li.createReadStream(e.file_path,{highWaterMark:h4});s.setEncoding("utf8"),await ED.parsePromise(s,T4.bind(null,e,n),_D.bind(null,r));let i=n.getPermsResponse();if(i)throw Xt(new Error,i,fn.BAD_REQUEST);return s=Li.createReadStream(e.file_path,{highWaterMark:h4}),s.setEncoding("utf8"),await ED.parsePromise(s,y4.bind(null,e,t),_D.bind(null,r)),s.destroy(),t}catch(n){throw Xt(n,mu(Mr.PAPA_PARSE_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.PAPA_PARSE_ERR+n)}}a(Yye,"callPapaParse");function R4(e,t){let r=Mye[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>Uye(i,s));return n}a(R4,"createTransformMap");function _D(e,t,r){let n=e.get(r);return n?n(t):Vf.autoCast(t)}a(_D,"typeFunction");async function Wye(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new SD,s=l4([Li.createReadStream(e.file_path,{encoding:"utf-8"}),u4.withParser(),c=>c.value,new d4({batchSize:E4}),f4(async c=>{await T4(e,n,r,c)})]);await new Promise((c,l)=>{m4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Xt(new Error,i,fn.BAD_REQUEST);let o=l4([Li.createReadStream(e.file_path,{encoding:"utf-8"}),u4.withParser(),c=>c.value,new d4({batchSize:E4}),f4(async c=>{await y4(e,t,r,c)})]);return await new Promise((c,l)=>{m4(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Xt(n,mu(Mr.INSERT_JSON_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.INSERT_JSON_ERR+n)}}a(Wye,"insertJson");async function b4(e){let t={};try{e.data&&e.data.length>0&&zye(e.data[0])?t=await jye(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Kf.info(t.message))}catch(r){throw pu(r)}return t}a(b4,"callBulkFileLoad");function zye(e){let t=Object.keys(e);for(let r of t)if(!xye.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(zye,"validateColumnNames");async function jye(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=uR.insert;break;case"update":i=uR.update;break;case"upsert":i=uR.upsert;break;default:throw Xt(new Error,Mr.INVALID_ACTION_PARAM_ERR(n),fn.BAD_REQUEST,Pi.LOG_LEVELS.ERROR,Mr.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,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Vf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw pu(o)}}a(jye,"bulkFileLoad");function A4(e,t){return`successfully loaded ${t} of ${e} records`}a(A4,"buildResponseMsg");function pu(e){return Xt(e,mu(Mr.DEFAULT_BULK_LOAD_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(pu,"buildTopLevelErrMsg")});var mR=M((qHe,w4)=>{"use strict";var Qye=fs();w4.exports={writeTransaction:Jye};function Jye(e,t,r){return Qye.writeTransaction(e,t,r)}a(Jye,"writeTransaction")});var P4=M((KHe,O4)=>{"use strict";var Xye=gn(),Zye=to(),N4=J(),eRe=Vn(),VHe=mR(),tRe=require("clone"),bD=require("alasql"),rRe=Kg(),C4=require("util"),nRe=C4.promisify(Zye.getTableSchema),sRe=C4.promisify(Xye.search),iRe=(H(),v(z)),RD=oe();rRe(bD);O4.exports={update:aRe};var oRe="There was a problem performing this update. Please check the logs and try again.";async function aRe({statement:e,hdb_user:t}){let r=await nRe(e.table.databaseid,e.table.tableid),n=cRe(e.columns);RD.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=tRe(s),c=RD.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=bD.parse(l).statements[0],d=await sRe(u),f=lRe(n,d);return uRe(o,f,t)}a(aRe,"update");function cRe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=bD.compile(`SELECT ${r.expression.toString()} AS [${iRe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw N4.error(t),new Error(oRe)}}a(cRe,"createUpdateRecord");function lRe(e,t){return RD.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(lRe,"buildUpdateRecords");async function uRe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await eRe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){N4.error(`Error delete new_attributes from update response: ${i}`)}return s}a(uRe,"updateRecords")});var D4=M((jHe,L4)=>{var dRe=require("alasql"),fRe=gn(),mRe=J(),pRe=fs(),ID=require("util"),AD=oe(),hRe=(H(),v(z)),ERe=to(),WHe=mR(),zHe=Vn(),_Re="record",gRe="successfully deleted",SRe=ID.callbackify(bRe),TRe=ID.promisify(fRe.search),yRe=ID.promisify(ERe.getTableSchema);L4.exports={convertDelete:SRe};function RRe(e){return`${e.deleted_hashes.length} ${_Re}${e.deleted_hashes.length===1?"":"s"} ${gRe}`}a(RRe,"generateReturnMessage");async function bRe({statement:e,hdb_user:t}){let r=await yRe(e.table.databaseid,e.table.tableid);AD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=AD.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=dRe.parse(o).statements[0],l={operation:hRe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await TRe(c);let u=await pRe.deleteRecords(l);return AD.isEmptyOrZeroLength(u.message)&&(u.message=RRe(u)),delete u.txn_time,u}catch(u){throw mRe.error(u),u.hdb_code?u.message:u}}a(bRe,"convertDelete")});var bE=M((JHe,B4)=>{"use strict";B4.exports={evaluateSQL:xRe,processAST:x4,convertSQLToAST:U4,checkASTPermissions:M4};var ARe=Vn(),v4=require("util"),IRe=v4.callbackify(ARe.insert),wRe=gn().search,NRe=P4().update,CRe=v4.callbackify(NRe),ORe=D4().convertDelete,Gc=require("alasql"),PRe=lR(),pR=J(),LRe=Kg(),DRe=oe(),RE=(H(),v(z)),{hdbErrors:vRe,handleHDBError:wD}=_e(),{HTTP_STATUS_CODES:ND}=vRe;LRe(Gc);var MRe=403,URe="There was a problem performing this insert. Please check the logs and try again.",CD=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function xRe(e,t){let r=e.parsed_sql_object;if(!r){r=U4(e.sql);let n,s=r.ast.statements[0];if(s instanceof Gc.yy.Insert?n=s.into.databaseid:s instanceof Gc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Gc.yy.Update||s instanceof Gc.yy.Delete?n=s.table.databaseid:pR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Gc.yy.Select)&&DRe.isEmptyOrZeroLength(n))return t("No schema specified",null)}x4(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(xRe,"evaluateSQL");function M4(e,t){let r;try{r=PRe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(M4,"checkASTPermissions");function U4(e){let t=new CD;if(!e)throw wD(new Error,"The 'sql' parameter is missing from the request body",ND.BAD_REQUEST);try{let r=e.trim(),n=Gc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
131
- `);throw n[1]?wD(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,ND.BAD_REQUEST):wD(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",ND.BAD_REQUEST)}return t}a(U4,"convertSQLToAST");function x4(e,t,r){try{let n=BRe;if(!e.bypass_auth&&!t.permissions_checked){let i=M4(e,t);if(i&&i.length>0)return r(MRe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case RE.VALID_SQL_OPS_ENUM.SELECT:n=wRe,s=t.ast.statements[0];break;case RE.VALID_SQL_OPS_ENUM.INSERT:n=FRe;break;case RE.VALID_SQL_OPS_ENUM.UPDATE:n=CRe;break;case RE.VALID_SQL_OPS_ENUM.DELETE:n=ORe;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(x4,"processAST");function BRe(e,t){pR.info(e),t("unknown sql statement")}a(BRe,"nullFunction");function FRe({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=kRe(i,e.values)}catch(o){return r(o)}IRe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){pR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(FRe,"convertInsert");function kRe(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]]=Gc.compile(`SELECT ${s.toString()} AS [${RE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw pR.error(r),new Error(URe)}}a(kRe,"createDataObjects")});var LD=M((ZHe,K4)=>{"use strict";var PD=gn(),HRe=lC(),{AsyncParser:GRe}=require("json2csv"),hR=require("stream"),Ps=oe(),OD=require("fs-extra"),qRe=require("path"),ti=J(),{promisify:H4}=require("util"),AE=oe(),{handleHDBError:Rr,hdbErrors:$Re}=_e(),{HDB_ERROR_MSGS:Zn,HTTP_STATUS_CODES:br}=$Re,{streamAsJSON:VRe}=(iA(),v(zU)),{Upload:KRe}=require("@aws-sdk/lib-storage"),{toCsvStream:YRe}=(Fo(),v(sx)),F4=["search_by_value","search_by_hash","sql","search_by_conditions"],k4=["json","csv"],G4="json",q4="csv",WRe="Successfully exported JSON locally.",zRe="Successfully exported CSV locally.",jRe=1e3,QRe=PD.searchByHash,JRe=PD.searchByValue,XRe=H4(hR.finished);K4.exports={export_to_s3:rbe,export_local:ZRe};async function ZRe(e){ti.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=$4(e);if(!Ps.isEmpty(t))throw ti.error(t),Rr(new Error,t,br.BAD_REQUEST,void 0,void 0,!0);if(Ps.isEmpty(e.path))throw ti.error(Zn.MISSING_VALUE("path")),Rr(new Error,Zn.MISSING_VALUE("path"),br.BAD_REQUEST,void 0,void 0,!0);let r=(Ps.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(qRe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ps.buildFolderPath(e.path,r);await ebe(e.path);let s=await V4(e);return await tbe(n,e.format,s)}a(ZRe,"export_local");async function ebe(e){if(ti.trace("in confirmPath"),Ps.isEmptyOrZeroLength(e))throw Rr(new Error,`Invalid path: ${e}`,br.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await OD.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,ti.error(n),Rr(new Error,n,br.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw ti.error(r),Rr(new Error,r,br.BAD_REQUEST,void 0,void 0,!0)}return!0}a(ebe,"confirmPath");async function tbe(e,t,r){if(ti.trace("in saveToLocal"),AE.isEmptyOrZeroLength(e))throw Rr(new Error,Zn.INVALID_VALUE("file_path"),br.BAD_REQUEST,void 0,void 0,!0);if(AE.isEmptyOrZeroLength(t))throw Rr(new Error,Zn.INVALID_VALUE("Source format"),br.BAD_REQUEST,void 0,void 0,!0);if(AE.isEmpty(r))throw Rr(new Error,Zn.NOT_FOUND("Data"),br.BAD_REQUEST,void 0,void 0,!0);if(t===G4){let n=OD.createWriteStream(e);return VRe(r).pipe(n),await XRe(n),{message:WRe,path:e}}else if(t===q4){let n=OD.createWriteStream(e),s=hR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new GRe(i,c).fromInput(s).toOutput(n).promise(!1),{message:zRe,path:e}}throw Rr(new Error,Zn.INVALID_VALUE("format"),br.BAD_REQUEST)}a(tbe,"saveToLocal");async function rbe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rr(new Error,Zn.MISSING_VALUE("S3 object"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rr(new Error,Zn.MISSING_VALUE("aws_access_key_id"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rr(new Error,Zn.MISSING_VALUE("aws_secret_access_key"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.bucket))throw Rr(new Error,Zn.MISSING_VALUE("bucket"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.key))throw Rr(new Error,Zn.MISSING_VALUE("key"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.region))throw Rr(new Error,Zn.MISSING_VALUE("region"),br.BAD_REQUEST);let t=$4(e);if(!Ps.isEmpty(t))throw Rr(new Error,t,br.BAD_REQUEST);ti.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await V4(e)}catch(l){throw ti.error(l),l}let n,s=await HRe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new hR.PassThrough;if(e.format===q4){i=e.s3.key+".csv";let l=YRe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===G4){i=e.s3.key+".json";let l=new hR.Readable;l.pipe(o),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%jRe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Rr(new Error,Zn.INVALID_VALUE("format"),br.BAD_REQUEST);return new KRe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(rbe,"export_to_s3");function $4(e){if(ti.trace("in exportCoreValidation"),Ps.isEmpty(e.format))return"format missing";if(k4.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${k4.join(", ")}`;let t=e.search_operation.operation;if(Ps.isEmpty(t))return"search_operation.operation missing";if(F4.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${F4.join(", ")}`}a($4,"exportCoreValidation");async function V4(e){ti.trace("in getRecords");let t,r;if(AE.isEmpty(e.search_operation)||AE.isEmptyOrZeroLength(e.search_operation.operation))throw Rr(new Error,Zn.INVALID_VALUE("Search operation"),br.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=JRe;break;case"search_by_hash":t=QRe;break;case"search_by_conditions":t=PD.searchByConditions;break;case"sql":{let n=bE();t=H4(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ti.error(r),Rr(new Error,r,br.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(V4,"getRecords")});var W4=M((tGe,Y4)=>{"use strict";var DD=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Y4.exports=DD});var Q4=M((nGe,j4)=>{"use strict";var nbe=(H(),v(z)),z4=require("moment"),sbe=require("uuid").v4,vD=class{static{a(this,"JobObject")}constructor(){this.id=sbe(),this.type=void 0,this.start_datetime=z4().valueOf(),this.created_datetime=z4().valueOf(),this.end_datetime=void 0,this.status=nbe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};j4.exports=vD});var UD=M((iGe,sQ)=>{"use strict";var ibe=require("uuid").v4,tQ=Vn(),rQ=gn(),obe=mi(),abe=cd(),cbe=W4(),Dt=(H(),v(z)),lbe=Q4(),ube=vS(),Di=J(),dbe=Nm(),Yf=oe(),{promisify:fbe}=require("util"),hu=require("moment"),ER=aC(),J4=Sw(),{deleteTransactionLogsBeforeValidator:mbe}=BL(),{handleHDBError:X4,hdbErrors:pbe,ClientError:hbe}=_e(),{HTTP_STATUS_CODES:Z4}=pbe,eQ=rQ.searchByValue,Ebe=rQ.searchByHash,_be=tQ.insert,gbe=tQ.update,MD;sQ.exports={addJob:ybe,updateJob:bbe,handleGetJob:Sbe,handleGetJobsByStartDate:Tbe,getJobById:nQ};async function Sbe(e){if(e.id===void 0)throw new hbe("'id' is required");let t=await nQ(e.id);return Yf.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(Sbe,"handleGetJob");async function Tbe(e){try{let t=await Rbe(e);if(Di.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=hu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=hu(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 Di.error(r),new Error(r)}}a(Tbe,"handleGetJobsByStartDate");async function ybe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Yf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Di.info(d),t.error=d,t}if(!Dt.JOB_TYPE_ENUM[e.operation])return Di.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=ER.fileObject(e);break;case Dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=ER.urlObject(e);break;case Dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=ER.dataObject(e);break;case Dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=ER.s3FileObject(e);break;case Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=J4(e,"date");break;case Dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=J4(e,"timestamp");break;case Dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=mbe(e);break;case Dt.OPERATIONS_ENUM.RESTART_SERVICE:if(Dt.HDB_PROCESS_SERVICES[e.service]===void 0)throw X4(new Error,"Invalid service",Z4.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw X4(n,n.message,Z4.BAD_REQUEST,void 0,void 0,!0);let s=new lbe;s.type=e.operation===Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new obe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await eQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Di.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=ibe();try{o=await eQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Di.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Di.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new dbe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await _be(l)}catch(d){return Di.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,Di.trace(d)}return t}a(ybe,"addJob");async function Rbe(e){let t=hu(e.from_date,hu.ISO_8601),r=hu(e.to_date,hu.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 cbe(n,e.hdb_user);try{if(!MD){let i=bE();MD=fbe(i.evaluateSQL)}return await MD(s)}catch(i){throw Di.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(Rbe,"getJobsInDateRange");async function nQ(e){if(Yf.isEmptyOrZeroLength(e))return Yf.errorizeMessage("Invalid job ID specified.");let t=new abe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Ebe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Di.error(n),Yf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(nQ,"getJobById");async function bbe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Yf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Dt.JOB_STATUS_ENUM.COMPLETE||e.status===Dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=hu().valueOf());let t=new ube(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await gbe(t),r}a(bbe,"updateJob")});var fQ=M((aGe,dQ)=>{"use strict";var iQ=oe(),Ur=(H(),v(z)),Abe=require("moment"),_R=yD(),IE=J(),oQ=UD(),aQ=LD(),cQ=Nl(),lQ=nt(),Ibe=eR(),wbe=Hf(),{parentPort:Nbe,isMainThread:uQ}=require("worker_threads"),{onMessageByType:Cbe}=nt(),xD=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Obe(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(iQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(iQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ur.JOB_TYPE_ENUM.csv_file_load:await bo(e,_R.csvFileLoad);break;case Ur.JOB_TYPE_ENUM.csv_url_load:await bo(e,_R.csvURLLoad);break;case Ur.JOB_TYPE_ENUM.csv_data_load:await bo(e,_R.csvDataLoad);break;case Ur.JOB_TYPE_ENUM.import_from_s3:await bo(e,_R.importFromS3);break;case Ur.JOB_TYPE_ENUM.empty_trash:break;case Ur.JOB_TYPE_ENUM.export_local:await bo(e,aQ.export_local);break;case Ur.JOB_TYPE_ENUM.export_to_s3:await bo(e,aQ.export_to_s3);break;case Ur.JOB_TYPE_ENUM.delete_files_before:case Ur.JOB_TYPE_ENUM.delete_records_before:await bo(e,cQ.deleteFilesBefore);break;case Ur.JOB_TYPE_ENUM.delete_audit_logs_before:await bo(e,cQ.deleteAuditLogsBefore);break;case Ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await bo(e,Ibe.deleteTransactionLogsBefore);break;case Ur.JOB_TYPE_ENUM.restart_service:return await bo(e,wbe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Obe,"parseMessage");async function bo(e,t){try{e.job.status=Ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Abe().valueOf(),await oQ.updateJob(e.job),await Pbe(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):IE.error(`There was an error running ${t.name} job with id ${e.job.id}`),IE.error(n),e.job.message=n,e.job.status=Ur.JOB_STATUS_ENUM.ERROR;try{await oQ.updateJob(e.job)}catch(s){throw IE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(bo,"runJob");async function Pbe(e){IE.trace("launching job thread:",e),uQ?lQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):Nbe.postMessage({type:Ur.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(Pbe,"launchJobThread");uQ&&Cbe(Ur.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{lQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){IE.error(r)}});dQ.exports={parseMessage:Obe,RunnerMessage:xD}});var pQ=M((lGe,mQ)=>{"use strict";var Lbe=oe(),BD=me(),qc=(H(),v(z)),Dbe=Ct(),vbe=_r(),Ao=J(),Mbe=hD(),Ube=no();BD.initSync();mQ.exports={postOperationHandler:Bbe,sendOperationTransaction:wE};async function wE(e,t,r,n){if(e.schema===qc.SYSTEM_SCHEMA_NAME)return;let s=xbe(e,t,r);s&&(Ao.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await vbe.publishToStream(`${Dbe.SUBJECT_PREFIXES.TXN}.${e.schema}`,Ube.createNatsTableStreamName(e.schema,e.table),n,s))}a(wE,"sendOperationTransaction");function xbe(e,t,r){if(Lbe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===qc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(xbe,"convertCRUDOperationToTransaction");async function Bbe(e,t,r){if(!BD.get(qc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Ao.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=BD.get(qc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new Mbe(t.txn_time,n,s);switch(e.operation){case qc.OPERATIONS_ENUM.INSERT:try{await wE(e,t.inserted_hashes,i,r)}catch(o){Ao.error("There was an error calling clustering postOperationHandler for insert."),Ao.error(o)}break;case qc.OPERATIONS_ENUM.DELETE:try{await wE(e,t.deleted_hashes,i,r)}catch(o){Ao.error("There was an error calling clustering postOperationHandler for delete."),Ao.error(o)}break;case qc.OPERATIONS_ENUM.UPDATE:try{await wE(e,t.update_hashes,i,r)}catch(o){Ao.error("There was an error calling clustering postOperationHandler for update."),Ao.error(o)}break;case qc.OPERATIONS_ENUM.UPSERT:try{await wE(e,t.upserted_hashes,i,r)}catch(o){Ao.error("There was an error calling clustering postOperationHandler for upsert."),Ao.error(o)}break;default:break}return t}a(Bbe,"postOperationHandler")});var X,hQ=ne(()=>{X=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var UL={};ye(UL,{chooseOperation:()=>UQ,executeJob:()=>ri,getOperationFunction:()=>xQ,operation:()=>YD,processLocalTransaction:()=>MQ});function Hbe(e){if(!FD){let t=bE();FD=KD.promisify(t.evaluateSQL)}return FD(e)}async function MQ(e,t){try{if(e.body.operation!=="read_log"&&(PE.default.log_level===Em.INFO||PE.default.log_level===Em.DEBUG||PE.default.log_level===Em.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Cn.info(c)}}catch(n){Cn.error(n)}let r=await DQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Gbe[e.body.operation]&&NQ.default.setSchemaDataToGlobal(n=>{n&&Cn.error(n)}),r}function UQ(e){let t;try{t=xQ(e)}catch(s){throw Cn.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=bE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Cn.error(`${EQ.FORBIDDEN} from operation ${e.operation}`),Cn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ni.handleHDBError)(new Error,c,ni.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=wQ.default.verifyPerms(i,s);if(o)throw Cn.error(`${EQ.FORBIDDEN} from operation ${e.operation}`),Cn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ni.handleHDBError)(new Error,o,ni.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ni.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function xQ(e){if(Cn.trace(`getOperationFunction with operation: ${e.operation}`),_Q.has(e.operation))return _Q.get(e.operation);throw(0,ni.handleHDBError)(new Error,ni.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ni.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function YD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=UQ(e);return MQ({body:e},n)}async function qbe(e){Cn.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[Fb]=!0;let o;switch(i.operation){case V.INSERT:o=await _u.default.insert(i);break;case V.UPDATE:o=await _u.default.update(i);break;case V.UPSERT:o=await _u.default.upsert(i);break;case V.DELETE:o=await jf.default.deleteRecord(i);break;default:Cn.warn("invalid operation in catchup");break}await Fbe.postOperationHandler(i,o,e)}catch(o){Cn.info("Invalid operation in transaction"),Cn.error(o)}}async function ri(e){(0,LQ.transformReq)(e);let t,r;try{if(r=await SR.default.addJob(e),r){t=r.createdJob,Cn.info("addJob result",r);let n=new qD.default.RunnerMessage(t,e);return{message:await qD.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Cn.error(i),(0,ni.handleHDBError)(n,i)}}function $be(){let e=new Map;return e.set(V.INSERT,new X(_u.default.insert)),e.set(V.UPDATE,new X(_u.default.update)),e.set(V.UPSERT,new X(_u.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new X(zf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new X(zf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new X(zf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new X(zf.default.searchByValue)),e.set(V.SEARCH,new X(kbe)),e.set(V.SQL,new X(Hbe)),e.set(V.CSV_DATA_LOAD,new X(ri,NE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new X(ri,NE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new X(ri,NE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new X(ri,NE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new X(vi.default.createSchema)),e.set(V.CREATE_DATABASE,new X(vi.default.createSchema)),e.set(V.CREATE_TABLE,new X(vi.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new X(vi.default.createAttribute)),e.set(V.DROP_SCHEMA,new X(vi.default.dropSchema)),e.set(V.DROP_DATABASE,new X(vi.default.dropSchema)),e.set(V.DROP_TABLE,new X(vi.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new X(vi.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new X(CE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new X(CE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new X(CE.default.describeTable)),e.set(V.DESCRIBE_ALL,new X(CE.default.describeAll)),e.set(V.DELETE,new X(jf.default.deleteRecord)),e.set(V.ADD_USER,new X(Wf.default.addUser)),e.set(V.ALTER_USER,new X(Wf.default.alterUser)),e.set(V.DROP_USER,new X(Wf.default.dropUser)),e.set(V.LIST_USERS,new X(Wf.default.listUsersExternal)),e.set(V.LIST_ROLES,new X(OE.default.listRoles)),e.set(V.ADD_ROLE,new X(OE.default.addRole)),e.set(V.ALTER_ROLE,new X(OE.default.alterRole)),e.set(V.DROP_ROLE,new X(OE.default.dropRole)),e.set(V.USER_INFO,new X(Wf.default.userInfo)),e.set(V.READ_LOG,new X(SQ.default)),e.set(V.ADD_NODE,new X(TQ.default)),e.set(V.UPDATE_NODE,new X(kD.default)),e.set(V.SET_NODE_REPLICATION,new X(kD.default)),e.set(V.REMOVE_NODE,new X(yQ.default)),e.set(V.CONFIGURE_CLUSTER,new X(RQ.default)),e.set(V.PURGE_STREAM,new X(bQ.default)),e.set(V.SET_CONFIGURATION,new X($D.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new X(AQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new X(IQ.default)),e.set(V.CLUSTER_SET_ROUTES,new X(gR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new X(gR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new X(gR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new X(ri,HD.default.export_to_s3)),e.set(V.CREATE_CSR,new X(Eu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new X(Eu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new X(Eu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new X(Eu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new X(Eu.default.removeCertificate)),e.set(V.GET_KEY,new X(Eu.default.getKey)),e.set(V.ADD_NODE_BACK,new X(kO)),e.set(V.REMOVE_NODE_BACK,new X(HO)),e.set(V.DELETE_FILES_BEFORE,new X(ri,jf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new X(ri,jf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new X(ri,HD.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new X(SR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new X(SR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new X(ZL)),e.set(V.GET_FINGERPRINT,new X(eD)),e.set(V.SET_LICENSE,new X(tD)),e.set(V.RESTART,new X(GD.default.restart)),e.set(V.RESTART_SERVICE,new X(ri,GD.default.restartService)),e.set(V.CATCHUP,new X(qbe)),e.set(V.SYSTEM_INFORMATION,new X(CQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new X(ri,jf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new X(gQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new X(XN)),e.set(V.REFRESH_OPERATION_TOKEN,new X(ZN)),e.set(V.LOGIN,new X(PL)),e.set(V.LOGOUT,new X(LL)),e.set(V.GET_CONFIGURATION,new X($D.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new X(vt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new X(vt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new X(vt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new X(vt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new X(vt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new X(vt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new X(vt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new X(vt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new X(vt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new X(vt.default.addComponent)),e.set(V.ADD_COMPONENT,new X(vt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new X(vt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new X(vt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new X(vt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new X(vt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new X(vt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new X(VD.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new X(ri,VD.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new X(OQ.default.installModules)),e.set(V.GET_BACKUP,new X(vi.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new X(vi.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new X(vt.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new X(vt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new X(vt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new X(vt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new X(vt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new X(vt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new X(HL)),e.set(V.LIST_METRICS,new X(GL)),e.set(V.DESCRIBE_METRIC,new X(qL)),e.set(V.GET_STATUS,new X(QL)),e.set(V.SET_STATUS,new X(JL)),e.set(V.CLEAR_STATUS,new X(jL)),e.set(V.INSTALL_USAGE_LICENSE,new X(QP)),e.set(V.GET_USAGE_LICENSES,new X(eL)),e}var zf,NE,vi,CE,jf,gQ,Wf,OE,vt,PE,SQ,TQ,kD,yQ,RQ,bQ,AQ,IQ,gR,HD,wQ,SR,ni,GD,KD,_u,NQ,CQ,qD,$D,VD,OQ,PQ,LQ,Eu,DQ,vQ,EQ,Cn,Fbe,kbe,FD,Gbe,_Q,xL=ne(()=>{zf=b(gn()),NE=b(yD()),vi=b(DT()),CE=b(kl()),jf=b(Nl()),gQ=b(mO()),Wf=b(Es()),OE=b(Jp()),vt=b(ML()),PE=b(J()),SQ=b(gO()),TQ=b(VT()),kD=b(KO()),yQ=b(YT()),RQ=b(zO()),bQ=b(jO()),AQ=b(XO()),IQ=b(eP()),gR=b(JT()),HD=b(LD()),wQ=b(lR()),SR=b(UD());H();ni=b(_e()),GD=b(Hf()),KD=b(require("util")),_u=b(Vn()),NQ=b(to()),CQ=b(wh()),qD=b(fQ());kd();Yy();$D=b(gt()),VD=b(eR()),OQ=b(kL()),PQ=b(ci()),LQ=b(oe());Hr();Eu=b(ys());mf();VL();DQ=b(cC()),vQ=b(pQ());fE();zh();nD();hQ();({HTTP_STATUS_CODES:EQ}=ni.hdbErrors),Cn=PE.default.loggerWithTag("operation"),{transactToClusteringUtils:Fbe}=vQ.default,kbe=KD.promisify(zf.default.search);a(Hbe,"evaluateSQL");Gbe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};a(MQ,"processLocalTransaction");_Q=$be();Be.operation=YD;a(UQ,"chooseOperation");a(xQ,"getOperationFunction");(0,PQ._assignPackageExport)("operation",YD);a(YD,"operation");a(qbe,"catchup");a(ri,"executeJob");a($be,"initializeOperationFunctionMap")});var RR=M((EGe,HQ)=>{"use strict";var TR=(H(),v(z)),Vbe=oe(),gu=J(),{handleHDBError:yR,hdbErrors:LE}=_e(),{isMainThread:Kbe}=require("worker_threads"),{Readable:Ybe}=require("stream"),BQ=require("os"),Wbe=require("util"),zbe=tC(),kQ=Wbe.promisify(zbe.authorize),FQ=(xL(),v(UL)),{createGzip:jbe,constants:Qbe}=require("zlib"),Jbe=[TR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,TR.OPERATIONS_ENUM.LOGIN,TR.OPERATIONS_ENUM.LOGOUT];function Xbe(e){let t=`Found an uncaught exception with message: ${e.message}. ${BQ.EOL}Stack: ${e.stack} ${BQ.EOL}Terminating ${Kbe?"HDB":"thread"}.`;console.error(t),gu.fatal(t),process.exit(1)}a(Xbe,"handleServerUncaughtException");function Zbe(e,t,r){if(gu[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:LE.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(Zbe,"serverErrorHandler");function eAe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=yR(new Error,"Invalid JSON.",LE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Vbe.isEmpty(e.body.operation)){let n=yR(new Error,"Request body must include an 'operation' property.",LE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(eAe,"reqBodyValidationHandler");function tAe(e,t,r){let n;!Jbe.includes(e.body.operation)||e.body.operation===TR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?kQ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{gu.warn(i),gu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(yR(i,o,LE.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(tAe,"authHandler");function rAe(e,t,r){kQ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{gu.warn(n),gu.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(yR(n,s,LE.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(rAe,"authAndEnsureUserOnRequest");async function nAe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=FQ.chooseOperation(e.body);let s=await FQ.processLocalTransaction(e,n);if(s instanceof Ybe&&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(jbe({level:Qbe.Z_BEST_SPEED})))}return s}catch(s){throw gu.error(s),s}}a(nAe,"handlePostRequest");HQ.exports={authHandler:tAe,authAndEnsureUserOnRequest:rAe,handlePostRequest:nAe,handleServerUncaughtException:Xbe,serverErrorHandler:Zbe,reqBodyValidationHandler:eAe}});var VQ=M((gGe,$Q)=>{"use strict";var sAe=require("fastify-plugin"),{handlePostRequest:GQ,authHandler:iAe,reqBodyValidationHandler:oAe}=RR();async function aAe(e){e.decorate("hdbCore",{preValidation:[oAe,iAe],request:a(t=>qQ(GQ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>qQ(GQ(t,r,!0)),"requestWithoutAuthentication")})}a(aAe,"hdbCore");async function qQ(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(qQ,"convertAsyncIterators");$Q.exports=sAe(aAe)});var YQ=M((yGe,KQ)=>{"use strict";var TGe=require("fs"),bR=me();bR.initSync();var{CONFIG_PARAMS:WD}=(H(),v(z)),cAe=1024*1024*1024;function lAe(e){let t=bR.get(WD.HTTP_TIMEOUT),r=bR.get(WD.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:cAe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:bR.get(WD.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(lAe,"getServerOptions");KQ.exports=lAe});var jQ=M((bGe,zQ)=>{"use strict";var zD=me();zD.initSync();var{CONFIG_PARAMS:WQ}=(H(),v(z));function uAe(){let e=zD.get(WQ.HTTP_CORSACCESSLIST),t=zD.get(WQ.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(uAe,"getCORSOptions");zQ.exports=uAe});var XQ=M((IGe,JQ)=>{"use strict";var QQ=me();QQ.initSync();var dAe=(H(),v(z));function fAe(){return QQ.get(dAe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(fAe,"getHeaderTimeoutConfig");JQ.exports=fAe});var QD={};ye(QD,{customFunctionsServer:()=>hAe,ready:()=>fJ,start:()=>pAe});function pAe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){wa||(wa=dJ(t),Be.http((await wa).server));let o=await wa,c=(0,jD.dirname)(s),l=(0,jD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!ZQ.has(c)){ZQ.add(c);try{o.register(_Ae(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:fJ}}async function hAe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await EAe();let e=iJ.get(F.HTTP_SECUREPORT)>0,t;try{t=wa=await dJ(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function EAe(){try{Tt.info("Custom Functions starting configuration."),await oJ.setUsersWithRolesCache(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function _Ae(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,eJ.existsSync)(e)&&r.register(sJ.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function dJ(e){Tt.info("Custom Functions starting buildServer.");let t=(0,aJ.default)(e),r=(0,tJ.default)(t);r.server.headersTimeout=(0,lJ.default)(),r.setErrorHandler(uJ.serverErrorHandler);let n=(0,cJ.default)();return n&&r.register(rJ.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(nJ.default),await r.register(mAe),await r.after(),Um(r),Tt.info("Custom Functions completed buildServer."),r}function fJ(){if(wa)return wa.then?wa.then(e=>e.ready()):wa.ready()}var jD,eJ,tJ,rJ,nJ,sJ,iJ,Tt,mAe,oJ,aJ,cJ,lJ,uJ,wa,ZQ,mJ=ne(()=>{jD=require("path"),eJ=require("fs"),tJ=b(require("fastify")),rJ=b(require("@fastify/cors")),nJ=b(zN()),sJ=b(require("@fastify/autoload")),iJ=b(me());H();Tt=b(J()),mAe=b(VQ()),oJ=b(Es()),aJ=b(YQ()),cJ=b(jQ()),lJ=b(XQ()),uJ=b(RR());Fo();Hr();ZQ=new Set;a(pAe,"start");a(hAe,"customFunctionsServer");a(EAe,"setUp");a(_Ae,"buildRouteFolder");a(dJ,"buildServer");a(fJ,"ready")});var XD={};ye(XD,{handleApplication:()=>gAe,suppressHandleApplicationWarning:()=>SAe});function gAe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,Jf.join)(n.absolutePath,"index.html");(0,Qf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,Jf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Jf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(o=r.get(n.pathname))}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,JD.default)(n,(0,Qf.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(TAe(c),!c)return{status:404,body:"File not found"};let l=(0,Jf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Qf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,JD.default)(n,(0,Qf.realpathSync)(l))}},{runFirst:!0})}function TAe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Qf,Jf,JD,SAe,pJ=ne(()=>{Qf=require("node:fs"),Jf=require("node:path"),JD=b(require("send"));a(gAe,"handleApplication");SAe=!0;a(TAe,"validateNotFoundOption")});var ZD={};ye(ZD,{start:()=>yAe});function yAe({override:e}){return{handleFile:a((t,r,n)=>{AR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,hJ.parse)(t))){if(process.env[s]!==void 0)if(AR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)AR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var hJ,AR,EJ=ne(()=>{hJ=require("dotenv"),AR=b(J());a(yAe,"start")});var ev={};ye(ev,{DataLoaderError:()=>Ls,DataLoaderResult:()=>Xf,EmptyFileError:()=>NR,FileParseError:()=>wR,InvalidPropertyTypeError:()=>CR,MissingRequiredPropertyError:()=>DE,RecordProcessingError:()=>vE,SystemDatabaseError:()=>OR,UnsupportedFileExtensionError:()=>IR,handleApplication:()=>bAe,loadDataFile:()=>yJ,suppressHandleApplicationWarning:()=>RAe});function bAe(e){if((0,gJ.getWorkerIndex)()!==0){Io.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||yJ(t,Rn,Me).then(r=>{Io.debug?.("Data loader processed file: %s: %s",(0,Na.basename)(t.absolutePath),r.message)})})}async function yJ({contents:e,absolutePath:t,stats:r},n,s){let i=(0,Na.extname)(t)||"unknown",o;try{if(i===".yaml"||i===".yml")o=(0,_J.parseDocument)(e.toString()).toJSON();else if(i===".json")o=JSON.parse(e.toString());else throw new IR(t,i);o.mtime=r.mtimeMs}catch(f){throw f instanceof Ls?f:new wR(t,f)}if(!o)throw new NR(t);let{database:c,table:l,records:u}=o;if(!l)throw new DE(t,"table");if(!u)throw new DE(t,"records");if(!Array.isArray(u))throw new CR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new OR(c,l);try{let f;if(c&&s[c]&&s[c][l])Io.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])Io.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{Io.debug?.(`Table ${d} not found, creating new table`);let R=[];if(u.length>0){let S=u[0];Object.keys(S).map(y=>{let N={name:y,type:typeof S[y]};return y==="id"&&(N.isPrimaryKey=!0),N}).forEach(y=>{R.push(y)})}f=await Xe({database:c,table:l,attributes:R})}let m=u.length,p=0,h=0,E=0,g=100;for(let R=0;R<u.length;R+=g){let S=u.slice(R,R+g),y=[];for(let N of S)y.push(async()=>{try{let I=null,$=N.id;if($!==void 0&&(I=await f.get($)),!I)return p++,f.put(N);let ee=I.getUpdatedTime();return o.mtime>ee?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof Ls)Io.error?.(`Record processing error: ${I.message}`);else{let $=new vE(d,I);Io.error?.(`Record processing error: ${$.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(y.map(N=>N()))}if(p>0||h>0){let R=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(R+=` (${E} records skipped)`),Io.info?.(R),new Xf(t,c,l,"success",p+h,R)}else if(E>0){let R=`All ${E} records in ${d} already up-to-date`;return Io.info?.(R),new Xf(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return Io.info?.(R),new Xf(t,c,l,"success",0,R)}}catch(f){throw f instanceof Ls?f:new vE(d,f)}}var Na,_J,gJ,Ca,SJ,TJ,Io,RAe,Ls,IR,wR,NR,DE,CR,OR,vE,Xf,RJ=ne(()=>{Na=require("node:path"),_J=require("yaml");we();gJ=b(nt()),Ca=b(Jr()),SJ=b(_e()),TJ=b(J()),Io=TJ.default.forComponent("dataLoader"),RAe=!0;a(bAe,"handleApplication");a(yJ,"loadDataFile");Ls=class extends SJ.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ca.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},IR=class extends Ls{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Na.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},wR=class extends Ls{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Na.basename)(t)}: ${r.message}`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},NR=class extends Ls{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Na.basename)(t)} is empty or invalid`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},DE=class extends Ls{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Na.basename)(t)} is missing required "${r}" property`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},CR=class extends Ls{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Na.basename)(t)} has invalid "${r}" property, expected ${n}`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},OR=class extends Ls{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ca.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},vE=class extends Ls{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ca.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Xf=class{static{a(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var tv={};ye(tv,{calculateRestHttpURL:()=>UJ,hdbServer:()=>NAe,start:()=>NAe});async function NAe(e){try{Mi.default.debug("In Fastify server"+process.cwd()),Mi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Mi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=bJ.default.isMaster,await CAe();let t=e.securePort>0;Zf=OAe(t,e.resources),await Zf.ready(),e||(e={}),e.isOperationsServer=!0;try{Be.http(Zf.server,e),Zf.server.closeIdleConnections||await Zf.listen({port:0,host:"::"})}catch(r){throw Zf.close(),Mi.default.error(r),Mi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Mi.default.fatal(t),process.exit(1)}}async function CAe(){return Mi.default.trace("Configuring HarperDB process."),LJ.default.setSchemaDataToGlobal(),vJ.default.setUsersWithRolesCache()}function OAe(e,t){Mi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=DAe(e),n=(0,AJ.default)(r);n.server.headersTimeout=MAe(),n.setErrorHandler(wo.serverErrorHandler);let s=vAe();s&&n.register(IJ.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(CJ.default),n.register(wJ.default),Um(n),n.get("/health",()=>"HarperDB is running."),n.register(NJ.default,{root:OJ.default.join(PJ.PACKAGE_ROOT,"studio/web")});let i=Ui.default.get(gm.LOCAL_STUDIO_ON);return!DJ.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[wo.authAndEnsureUserOnRequest]},PAe(t)),n.post("/",{preValidation:[wo.reqBodyValidationHandler,wo.authHandler],config:{isOperation:!0}},LAe),Mi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function PAe(e){let t=Ui.default.get(F.HTTP_PORT),r=Ui.default.get(F.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?CS(e,UJ(t,r,n)):(Mi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new MJ.ServerError("Forbidden",403))}function UJ(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return r.hostname.toLowerCase()==="localhost"||r.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function LAe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,wo.handlePostRequest)(e,t)}function DAe(e){let t=Ui.default.get(em.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ui.default.get(em.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:IAe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Ui.default.get(em.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function vAe(){let e=Ui.default.get(em.OPERATIONSAPI_NETWORK_CORS),t=Ui.default.get(em.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===wAe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function MAe(){return Ui.default.get(em.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??AAe}var bJ,Ui,Mi,AJ,IJ,wJ,NJ,CJ,OJ,PJ,LJ,DJ,vJ,wo,MJ,AAe,IAe,wAe,em,Zf,xJ=ne(()=>{bJ=b(require("cluster")),Ui=b(me());H();Mi=b(J()),AJ=b(require("fastify")),IJ=b(require("@fastify/cors")),wJ=b(require("@fastify/compress")),NJ=b(require("@fastify/static")),CJ=b(zN()),OJ=b(require("path")),PJ=b(yt()),LJ=b(to()),DJ=b(oe()),vJ=b(Es());Hr();wo=b(RR());Fo();$N();MJ=b(_e());Ui.default.initSync();AAe=6e4,IAe=1024*1024*1024,wAe="TRUE",{CONFIG_PARAMS:em}=z;a(NAe,"operationsServer");a(CAe,"setUp");a(OAe,"buildServer");a(PAe,"restOpenAPIHandler");a(UJ,"calculateRestHttpURL");a(LAe,"handler");a(DAe,"getServerOptions");a(vAe,"getCORSOpts");a(MAe,"getHeaderTimeoutConfig")});var av={};ye(av,{disableNATS:()=>xAe,publishToStream:()=>DR,setNATSReplicator:()=>rv,setPublishToStream:()=>BAe,setSubscription:()=>ov,start:()=>UAe});function UAe(){ME.default.get(F.CLUSTERING_ENABLED)&&kAe()}function xAe(e=!0){GJ=e}function BAe(e,t){DR=e,ov=t}function kAe(){if(GJ||process.env._DISABLE_NATS)return;let e=ct(),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];rv(s,r,i)}}Bl((r,n)=>{rv(r.tableName,r.databaseName,r),n&&$J(r)}),!BJ&&(BJ=!0)}function rv(e,t,r){if(t==="system"&&HAe.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 lr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){$J(i)}static subscribe(){let i=new ns;return ov(t,e,i),i}static subscribeOnThisThread(i){return i<(ME.default.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??FAe)}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 PR(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=qJ;return i}a(n,"getNATSTransaction")}function $J(e){let t=ME.default.get(F.CLUSTERING_NODENAME);DR(`${sv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,iv.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 FJ,sv,iv,kJ,HJ,ME,LR,GJ,DR,ov,FAe,qJ,BJ,HAe,PR,nv,VJ=ne(()=>{we();Vo();FJ=b(_r()),sv=b(Ct()),iv=b(no());Uu();kJ=b(vR()),HJ=b(Un()),ME=b(me());H();LR=b(J());a(UAe,"start");a(xAe,"disableNATS");DR=FJ.publishToStream,ov=kJ.setSubscription;a(BAe,"setPublishToStream");FAe=2;a(kAe,"assignReplicationSource");HAe=["hdb_job","hdb_raw_analytics","hdb_info"];a(rv,"setNATSReplicator");a($J,"publishSchema");PR=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=ME.default.get(F.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(LR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(DR(`${sv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,iv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw LR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},nv=class extends PR{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,HJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};qJ=new nv});async function jJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await cv.get(e,{returnNonexistent:!0});i=new dv(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await cv.get(e);o&&o.delete()}i=new UR(e,t)}return n&&(n.id=e,n.user={username:t?.username},UE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function lv(){return MR++,MR>65500&&(MR=1),MR}function uv(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Bs.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=new ui(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var YJ,$c,WJ,zJ,KJ,cv,UE,MR,UR,dv,QJ=ne(()=>{we();za();YJ=b(Un()),$c=b(J());Ga();WJ=b(nt()),zJ=b(dL());Hr();pg();KJ=100,cv=Xe({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),UE=Xe({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,WJ.getWorkerIndex)()===0&&(async()=>{await zJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of UE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Be.getUser(r.user.username));try{await uv(r,t,r)}catch{(0,$c.warn)("Failed to publish will",t)}UE.delete(e.id)}})();a(jJ,"getSession");MR=1;a(lv,"getNextMessageId");UR=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(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,$c.trace)("Resuming subscription from",s,"from",o);let p=Bs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),N;for(let ee=0;ee<y.length;ee++)if(y[ee].indexOf("+")>-1)if(y[ee]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),N&&(n=a(ee=>{let G=ee.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(I&&G.length!==y.length)return!1;for(let k=0;k<y.length;k++)if(y[k]!=="+"&&y[k]!==G[k])return!1;return!0},"filter"));let $=y.indexOf("+");m.url="/"+($>-1?y.slice(0,$):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await g.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let I of y)try{let $;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,$=this.needsAcknowledge(I)):(I.acknowledge?.(),$=lv());let ee=I.id;if(Array.isArray(ee)&&(ee=td(ee)),ee==null&&(ee=""),await this.listener(E+"/"+ee,I.value,$,t)===!1)break;this.awaitingAcks?.size>KJ?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-KJ)):await new Promise(setImmediate)}catch($){(0,$c.warn)($)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=lv();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 uv(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();bt(r,async()=>{try{if(!t){let n=await UE.get(this.sessionId);n?.doesExist()&&await uv(n,n.data,r)}}finally{await UE.delete(this.sessionId)}}).catch(n=>{(0,$c.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(uv,"publish");dv=class extends UR{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=lv(),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,$c.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,YJ.getNextMonotonicTime)()),(0,$c.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),cv.put(this.sessionRecord)}}});var fv={};ye(fv,{bypassAuth:()=>GAe,start:()=>$Ae});function GAe(){n3=!0}function $Ae({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new r3.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),Zt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=XJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{Zt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),Zt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await nf(p,l);if(!E.valid)throw Zt.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,tm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&BR.notify?.({username:d?.username,status:ai.SUCCESS,type:Fa.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,tm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&BR.error?.({username:h,status:ai.FAILURE,type:Fa.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Zt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),Zt.error?.(p)}else if(l.required)return Zt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&qAe(u.remoteAddress)&&(d=await(0,ZJ.getSuperUser)(),Zt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=XJ(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{Zt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function XJ(e,t,r,n,s){JJ||(JJ=!0,Qm(f=>{xR>0&&f.push({metric:"mqtt-connections",connections:xR,byThread:!0})}));let i;xR++;let o,c={protocolVersion:4},l=(0,FR.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){xR--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"),Zt.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),Zt.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){Zt.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ve(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Be.getUser(f.username,f.password.toString(),r),(0,tm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&BR.notify?.({username:n?.username,status:ai.SUCCESS,type:Fa.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(j){return(0,tm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&BR.error?.({username:f.username,status:ai.FAILURE,type:Fa.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,j),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let j=e.deserialize||(e.deserialize=Bo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?j(f.will.payload):void 0,delete f.will.payload}o=jJ({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(j){return Zt.error?.(j),s.events.emit("auth-failed",f,e,j),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:j.code||5,returnCode:j.code||128})}s.events.emit("connected",o,e),tn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(j,Y,ce,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",j);let te=j.indexOf("/",1),ge=te>0?j.slice(0,te):j;g({cmd:"publish",topic:j,payload:await S(Y),messageId:ce||Math.floor(Math.random()*1e8),qos:de.qos},ge);let be=e._socket??e;return be.writableNeedDrain?new Promise(Ye=>be.once("drain",Ye)):!be.closed}catch(te){return Zt.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let N=[];for(let j of f.subscriptions){let Y;try{let ce=await o.addSubscription(j,j.qos>=1);Y=ce?ce.qos||0:c.protocolVersion<5?128:143}catch(ce){s.events.emit("error",ce,e,j,o),ce.statusCode?ce.statusCode===500?Zt.warn?.(ce):Zt.info?.(ce):Zt.error?.(ce),Y=c.protocolVersion<5?128:ce.statusCode===403?135:ce.statusCode===404?143:128}N.push(Y)}await o.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let j=[];for(let Y of f.unsubscriptions)j.push(o.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:j,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",$=e.deserialize||(e.deserialize=Bo(r?.headers.get?.("content-type"))),G=(f.payload?.length||0)>0?$(f.payload):void 0,k;try{k=await o.publish(f,G)}catch(j){s.events.emit("error",j,e,f,o),Zt.warn?.(j),f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!0,"connection","mqtt","disconnect"),Zt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),Zt.error?.(y),g({cmd:"disconnect"})}function g(y,N){let I=(0,FR.generate)(y,c);t(I),Ve(I.length,"bytes-sent",N,R(y),"mqtt")}a(g,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return xo(y,r)}a(S,"serialize")}),l.on("error",f=>{Zt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var FR,ZJ,tm,e3,t3,r3,BR,Zt,n3,qAe,JJ,xR,s3=ne(()=>{FR=require("mqtt-packet");QJ();ZJ=b(Es());Fo();is();Hr();tm=b(me());H();e3=b(wr()),t3=b(J()),r3=require("events");bT();BR=(0,e3.loggerWithTag)("auth-event"),Zt=(0,t3.forComponent)("mqtt"),n3=(0,tm.get)(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(GAe,"bypassAuth");qAe=a(e=>n3&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a($Ae,"start");xR=0;a(XJ,"onSocket")});function kR(e,t){if(t?.includes(".."))throw new mv(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var mv,pv=ne(()=>{mv=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(kR,"resolveBaseURLPath")});function i3(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var o3=ne(()=>{a(i3,"deriveCommonPatternBase")});function HR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var hv=ne(()=>{a(HR,"deriveGlobOptions")});var a3,Ev,xE,c3=ne(()=>{pv();o3();hv();a3=require("micromatch"),Ev=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},xE=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=kR(this.name,this.config.urlPath),this.globOptions=HR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new Ev(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,a3.scan)(s).base),this.commonPatternBase=i3(this.patternBases)}}});function l3(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Su(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(l3(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(l3(n,t)){t=t.slice(n.length+1);break}}}return(0,u3.join)(e.baseURLPath,t)}var u3,_v=ne(()=>{u3=require("node:path");a(l3,"pathStartsWithBase");a(Su,"deriveURLPath")});function d3(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var qR,f3,m3,gv,p3,h3,GR,E3=ne(()=>{qR=require("node:events");c3();f3=b(J()),m3=b(require("chokidar")),gv=require("node:path"),p3=require("node:fs/promises");_v();h3=require("micromatch"),GR=class extends qR.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new xE(t,r,d3(n)),this.#r=s||f3.default.loggerWithTag(t),this.ready=(0,qR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,h3.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,gv.join)(this.directory,r);switch(t){case"add":case"change":{let i=Su(this.#e,r,"file");(0,p3.readFile)(s).then(o=>{let c={eventType:t,entryType:"file",contents:o,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Su(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=Su(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,gv.join)(this.#e.directory,r));return this.#t=m3.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new xE(this.name,this.directory,d3(t)),this.#a()}};a(d3,"castConfig")});var $R,Sv=ne(()=>{$R={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var KR,_3,g3,S3,T3,y3,Tv,yv,Rv,bv,Av,VR,R3=ne(()=>{KR=require("events"),_3=b(require("yaml")),g3=b(require("chokidar")),S3=require("node:fs/promises"),T3=require("util"),y3=b(J());Sv();Tv=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},yv=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},Rv=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},bv=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},Av=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},VR=class extends KR.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||y3.default.loggerWithTag(t),this.ready=(0,KR.once)(this,"ready"),this.#t=g3.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,S3.readFile)(this.#e,"utf-8").then(t=>{this.#n=_3.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new Tv(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=$R,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#m(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,o):this.#u(o,i);continue}(0,T3.isDeepStrictEqual)(i,c)||this.#u(o,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new yv;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new Rv(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new bv(t,s);n=n[s]}if(n==null||typeof n!="object")throw new Av(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var zR,b3,YR,WR,A3=ne(()=>{zR=require("node:events");E3();R3();b3=b(J());WL();YR=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},WR=class extends zR.EventEmitter{static{a(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,b3.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,zR.once)(this,"ready"),this.options=new VR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new GR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new YR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new YR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),k2()}}});function Tu(e){return typeof e=="string"&&e.trim()!==""}function Iv(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Tu(t))}function C3(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function VAe(e){e.config.root&&BE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new Dv(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(C3(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,FE.join)(e.directory,i);jR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function O3(e){let t=!1;if(t=await VAe(e),t)return t;let r=await(0,I3.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,FE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Su(e,n.path,"directory");jR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Su(e,n.path,"file"),o=await(0,w3.readFile)(s);jR.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else BE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var jR,I3,BE,FE,w3,N3,QR,xi,wv,Nv,Cv,Ov,Pv,Lv,Dv,vv,Mv,P3=ne(()=>{jR=require("node:worker_threads"),I3=b(require("fast-glob")),BE=b(J());pv();hv();FE=require("node:path"),w3=require("node:fs/promises");_v();N3=require("micromatch"),QR=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Tu(this.config.files)&&!Iv(this.config.files)&&!C3(this.config.files))throw new wv(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!Iv(this.config.files.source)&&!Tu(this.config.files.source))throw new Nv(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new Cv(this);if(this.config.files.ignore!==void 0&&!Iv(this.config.files.ignore)&&!Tu(this.config.files.ignore))throw new Ov(this)}if(this.config.root!==void 0&&!Tu(this.config.root))throw new Lv(this);if(this.config.path!==void 0&&!Tu(this.config.path))throw new vv(this);if(this.config.path&&(BE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Tu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new Mv(this);this.globOptions=HR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new Pv(this,r);return r.startsWith("/")&&(BE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,N3.scan)(r).base),this.baseURLPath=kR(this.name,this.config.urlPath)}},xi=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,FE.basename)(r.directory)}) ${t}`)}},wv=class extends xi{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},Nv=class extends xi{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},Cv=class extends xi{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},Ov=class extends xi{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},Pv=class extends xi{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},Lv=class extends xi{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},Dv=class extends xi{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},vv=class extends xi{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},Mv=class extends xi{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Tu,"isNonEmptyString");a(Iv,"isArrayOfNonEmptyStrings");a(C3,"isObject");a(VAe,"handleRoots");a(O3,"processResourceExtensionComponent")});var xy={};ye(xy,{getComponentName:()=>vy,loadComponent:()=>eb,loadComponentDirectories:()=>M3,setErrorReporter:()=>YAe});function M3(e,t){t&&(xv=t),e&&(Hv=e);let r=[];if((0,Vt.existsSync)(Uv)){let s=(0,Vt.readdirSync)(Uv,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Wr.join)(Uv,o);r.push(eb(c,xv,vb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(eb(n,xv,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{v3=!0})}function YAe(e){XR=e}function WAe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{Aa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(Aa.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Wr.join)(e,"node_modules");(0,Vt.existsSync)(s)||(0,Vt.mkdirSync)(s);let i=(0,Wr.join)(s,"harperdb");if((0,Vt.existsSync)(i)){if((0,Vt.realpathSync)(i)===(0,Vt.realpathSync)(kv.PACKAGE_ROOT))return t();(0,Vt.rmSync)(i,{recursive:!0,force:!0})}(0,Vt.symlinkSync)(kv.PACKAGE_ROOT,i,"dir"),t()}finally{Aa.primaryStore.unlock(e,0)}})}function U3(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return Aa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(U3(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,o)=>setTimeout(()=>o(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Aa.primaryStore.unlock(e.name,0)}):new Promise((i,o)=>{n=i,s=setTimeout(()=>{o(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function eb(e,t,r,n,s,i){let o=(0,Vt.realpathSync)(e);if(JR.has(o))return JR.get(o);JR.set(o,!0),s&&(Hv=s);try{let c,l=(0,Wr.join)(e,"harperdb-config.yaml");if((0,Vt.existsSync)(l)?c=n?(0,tb.getConfigObj)():(0,Fv.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Vt.existsSync)(l=(0,Wr.join)(e,"config.yaml"))?c=(0,Fv.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():c=$R,!n)try{await WAe(e)}catch(m){Oa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Oa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=ZR,d={};for(let m in c){let p=n?m:`${(0,Wr.basename)(e)}.${m}`;ZR=m;let h=c[m];if(!h)continue;ao.loading(p);let E,g=h.package;try{if(g){let I=null;if(n)I=(0,Wr.join)(e,"components",m);else{let $=e;for(I=(0,Wr.join)($,"node_modules",m);!(0,Vt.existsSync)(I);){if($=(0,Wr.dirname)($),$.length<(0,D3.getHdbBasePath)().length){I=null;break}I=(0,Wr.join)($,"node_modules",m)}}if(I)E=await eb(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=KAe[m];if(!E){ao.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,Xe(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,N=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw ao.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Oa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new WR(m,e,l,t,Be);await U3(I,E),ao.loaded(p,`Component '${p}' loaded successfully`);continue}if(Bv.isMainThread&&(E=await E.startOnMainThread?.({server:Be,ensureTable:R,port:N,securePort:y,resources:t,...h})||E,n&&S))for(let I of[N,y])try{if(+I&&!L3.includes(I)){let $=Gv.get(F.HTTP_SESSIONAFFINITY);$&&Oa.default.warn("Session affinity is not recommended and may cause memory leaks"),($||!OS)&&(L3.push(I),hL(I,$))}}catch($){console.error("Error listening on socket",I,$,m)}if(t.isWorker&&(E=await E.start?.({server:Be,ensureTable:R,port:N,securePort:y,resources:t,...h})||E),Hv.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new QR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await O3(I)}ao.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Wr.basename)(e)}' due to: ${R.message}`,XR?.(R),((0,kE.getWorkerIndex)()===0?console:Oa.default).error(R),t.set(h.path||"/",new ml(R),null,!0),ao.failed(p,R,`Could not load component '${p}'`)}}if(ZR=u,Bv.isMainThread&&!v3&&i&&(0,kE.watchDir)(e,async()=>M3()),c.extensionModule||c.pluginModule){let m=await IS((0,Wr.join)(e,c.extensionModule||c.pluginModule));return JR.set(o,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;XR?.(new Error(m)),((0,kE.getWorkerIndex)()===0?console:Oa.default).error(m),ao.failed((0,Wr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Oa.default.warn(`Component ${m} from (${(0,Wr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,XR?.(c),t.set("",new ml(c))}}var Vt,Wr,Bv,Fv,Gv,kv,Oa,kE,D3,tb,Uv,Hv,v3,xv,KAe,L3,JR,XR,ZR,vy,Zh=ne(()=>{Vt=require("node:fs"),Wr=require("node:path"),Bv=require("node:worker_threads"),Fv=require("yaml"),Gv=b(me()),kv=b(yt());H();gq();Cq();qq();zq();jq();u$();mJ();pJ();EJ();Oa=b(J());RJ();kE=b(nt());xN();Hr();we();_L();D3=b(me());xJ();Yy();VJ();Ss();s3();tb=b(gt());Zp();ZA();A3();P3();lL();fE();Mp();Sv();Uv=(0,tb.resolvePath)(Gv.get(F.COMPONENTSROOT)),Hv=new Map;a(M3,"loadComponentDirectories");KAe={REST:LS,rest:LS,graphql:CN,graphqlSchema:wN,roles:UN,jsResource:BN,fastifyRoutes:QD,login:kN,static:XD,operationsApi:tv,customFunctions:{},http:Dy,clustering:av,replication:ra,authentication:iE,mqtt:fv,loadEnv:ZD,logging:Oa.default,dataLoader:ev},L3=[],JR=new Map;a(YAe,"setErrorReporter");vy=a(()=>ZR,"getComponentName");a(WAe,"symlinkHarperModule");a(U3,"sequentiallyHandleApplication");a(eb,"loadComponent")});var By=M((l$e,x3)=>{var{isMainThread:qv}=require("worker_threads"),{getTables:zAe}=(we(),v(ft)),{loadComponentDirectories:jAe,loadComponent:QAe}=(Zh(),v(xy)),{resetResources:JAe}=(za(),v(eI)),XAe=gt(),{dirname:ZAe}=require("path"),{getConnection:eIe}=_r(),tIe=me(),{CONFIG_PARAMS:rIe}=(H(),v(z)),{loadCertificates:nIe}=ys(),{installApplications:sIe}=(Qy(),v(jy)),{loadAndWatchLicensesDir:iIe}=(zh(),v(wy)),$v=new Map;async function oIe(e=!1){!qv&&tIe.get(rIe.CLUSTERING_ENABLED)&&eIe();try{qv&&await sIe()}catch(n){console.error(n)}let t=JAe();zAe(),t.isWorker=e,qv&&iIe(),await nIe(),await QAe(ZAe(XAe.getConfigFilePath()),t,"hdb",!0,$v),await jAe($v,t);let r=[];for(let[n]of $v)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(oIe,"loadRootComponents");x3.exports.loadRootComponents=oIe});var nt=M((d$e,Fi)=>{"use strict";Gb();var{Worker:aIe,MessageChannel:cIe,parentPort:No,isMainThread:zv,threadId:lIe,workerData:Co}=require("worker_threads"),{PACKAGE_ROOT:uIe}=yt(),{join:H3,isAbsolute:dIe,extname:fIe}=require("path"),{server:G3}=(Hr(),v(Tm)),{watch:mIe,readdir:pIe}=require("fs/promises"),{totalmem:B3}=require("os"),rm=(H(),v(z)),q3=me(),Bi=J(),{randomBytes:hIe}=require("crypto"),{_assignPackageExport:EIe}=ci(),F3=1024*1024,Pa=[],si=[],_Ie=50,jv=1e4,gIe="restart",$3="request_thread_info",V3="resource_report",K3="thread_info",Y3="added-port",SIe="ack",Vv;EIe("threads",si);Fi.exports={startWorker:Kv,restartWorkers:Jv,shutdownWorkers:X3,shutdownWorkersNow:AIe,workers:Pa,setMonitorListener:DIe,onMessageFromWorkers:IIe,onMessageByType:eX,broadcast:NIe,broadcastWithAcknowledgement:OIe,setChildListenerByType:bIe,getWorkerIndex:W3,getWorkerCount:z3,getTicketKeys:Q3,setMainIsWorker:yIe,setTerminateTimeout:TIe,restartNumber:Co?.restartNumber||1};si.onMessageByType=eX;si.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=si.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Fi.exports.whenThreadsStarted=new Promise(e=>{Fi.exports.threadsHaveStarted=e});var Qv;function TIe(e){jv=e}a(TIe,"setTerminateTimeout");function W3(){return Co?Co.workerIndex:Qv?0:void 0}a(W3,"getWorkerIndex");function z3(){return Co?Co.workerCount:Qv?1:void 0}a(z3,"getWorkerCount");function yIe(e){Qv=e,Fi.exports.threadsHaveStarted()}a(yIe,"setMainIsWorker");var j3=1,rb;function Q3(){return rb||(rb=zv?hIe(48):Co.ticketKeys,rb)}a(Q3,"getTicketKeys");Object.defineProperty(G3,"workerIndex",{get(){return W3()}});Object.defineProperty(G3,"workerCount",{get(){return z3()}});var J3={[$3](e,t){PIe(t)},[V3](e,t){LIe(t,e)}};function Kv(e,t={}){let r=process.constrainedMemory?.()||B3();r=Math.min(r,B3(),2e4*F3);let n=q3.get(rm.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/F3/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of si){let u=new cIe;u.existingPort=l,i.push(u),o.push(u.port2)}fIe(e)||(e+=".js");let c=new aIe(dIe(e)?e:H3(uIe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:j3=t.threadCount,name:t.name,restartNumber:Fi.exports.restartNumber,ticketKeys:Q3()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:Y3,port:l,threadId:c.threadId},[l]);return sb(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Kv(e,t),c.on("error",l=>{Bi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Pa.splice(Pa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<_Ie?(t.unexpectedRestarts=c.unexpectedRestarts+1,Kv(e,t)):Bi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{J3[l.type]?.(l,c)}),Pa.push(c),MIe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Kv,"startWorker");var RIe=[rm.THREAD_TYPES.HTTP];async function Jv(e=null,t=Math.max(j3>3,1),r=!0){if(zv){try{process.chdir(process.cwd())}catch(o){Bi.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=By();await o()}Fi.exports.restartNumber++,t<1&&(t=t*Pa.length);let n=[],s=[];for(let o of Pa.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Bi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Fi.exports.restartNumber,type:rm.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=RIe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},jv*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(f=>{let m=a(p=>{p.type===rm.ITC_EVENT_TYPES.CHILD_STARTED&&(Bi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Bi.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Hf();r&&(e==="http"||!e)&&q3.get(rm.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else No.postMessage({type:gIe,workerType:e})}a(Jv,"restartWorkers");function bIe(e,t){J3[e]=t}a(bIe,"setChildListenerByType");function X3(e){return Jv(e,1/0,!1)}a(X3,"shutdownWorkers");function AIe(e){return X3(e),Promise.all(Pa.map(t=>t.terminate()))}a(AIe,"shutdownWorkersNow");var Z3=[];function IIe(e){Z3.push(e)}a(IIe,"onMessageFromWorkers");var Yv=new Map;function eX(e,t){let r=Yv.get(e);r||Yv.set(e,r=[]),r.push(t)}a(eX,"onMessageByType");var wIe=10;async function NIe(e,t){let r=0;for(let n of si)try{n.postMessage(e),r++>wIe&&(r=0,await new Promise(setImmediate))}catch(s){Bi.error("Unable to send message to worker",s)}t&&rX(e,null)}a(NIe,"broadcast");var nb=new Map,CIe=1;function OIe(e){return new Promise(t=>{let r=0;for(let n of si)try{let s=CIe++,i=a(()=>{nb.delete(s),--r===0&&t(),n!==No&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,nb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of nb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a(OIe,"broadcastWithAcknowledgement");function PIe(e){e.postMessage({type:K3,workers:tX()})}a(PIe,"sendThreadInfo");function tX(){let e=Date.now();return Pa.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(tX,"getChildWorkerInfo");function LIe(e,t){e.resources=t,e.resources.updated=Date.now()}a(LIe,"recordResourceReport");var Wv;function DIe(e){Wv=e}a(DIe,"setMonitorListener");var vIe=1e3,k3=!1;function MIe(){k3||(k3=!0,setInterval(()=>{for(let e of Pa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Wv&&Wv()},vIe).unref())}a(MIe,"startMonitoring");var UIe=1e3;if(No&&Co?.addPorts){sb(No);for(let e=0,t=Co.addPorts.length;e<t;e++){let r=Co.addPorts[e];r.threadId=Co.addThreadIds[e],sb(r)}setInterval(()=>{let e=process.memoryUsage();No.postMessage({type:V3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},UIe).unref(),Vv=a(()=>new Promise((e,t)=>{No.on("message",r),No.postMessage({type:$3});function r(n){n.type===K3&&(No.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Vv=tX;Fi.exports.getThreadInfo=Vv;function sb(e,t){si.push(e),e.on("message",r=>{if(r.type===Y3)r.port.threadId=r.threadId,sb(r.port);else if(r.type===SIe){let n=nb.get(r.id);n&&n()}else rX(r,e)}).on("close",()=>{si.splice(si.indexOf(e),1)}).on("exit",()=>{si.splice(si.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(sb,"addPort");function rX(e,t){for(let n of Z3)n(e,t);let r=Yv.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Bi.error(s)}}a(rX,"notifyMessageListeners");if(zv){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await pIe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(H3(s,o.name));try{for await(let{filename:o}of mIe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Jv(),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)}},"watchDir");Fi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else No.on("message",async e=>{let{type:t}=e;t===rm.ITC_EVENT_TYPES.SHUTDOWN&&(Fi.exports.restartNumber=e.restartNumber,No.unref(),setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate",lIe),process.exit(0)},jv).unref())})});var cX=M((h$e,aX)=>{"use strict";var{promises:nm,createReadStream:xIe,createWriteStream:BIe}=require("fs"),{createGzip:FIe}=require("zlib"),{promisify:kIe}=require("util"),{pipeline:HIe}=require("stream"),GIe=kIe(HIe),Zv=require("path"),oX=me();oX.initSync();var ib=J(),{CONFIG_PARAMS:qIe,ITC_EVENT_TYPES:m$e}=(H(),v(z)),{onMessageFromWorkers:p$e}=nt(),{convertToMS:nX}=oe(),{onStorageReclamation:$Ie}=(V_(),v(Tx)),VIe=6e4,KIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",YIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",Xv,sX;aX.exports=WIe;function WIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if($Ie(e.path,f=>{c=f},!0),!t&&!r)throw new Error(KIe);if(!i)throw new Error(YIe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=nX(r));let d;return Xv=Date.now(),ib.trace("Log rotate enabled, maxSize:",t,"interval:",r),sX=setInterval(async()=>{if(l){let f;f=await nm.stat(e.path),f.size>=l&&(d=await iX(e.path,i))}if(u&&Date.now()-Xv>=u&&(d=await iX(e.path,i),Xv=Date.now()),n||c){let f=nX(n??"1M")/(1+c);c=0;let m=await nm.readdir(i);for(let p of m)try{let h=await nm.stat(Zv.join(i,p));Date.now()-h.mtimeMs>f&&await nm.unlink(Zv.join(i,p))}catch(h){ib.error("Error trying to remove log",p,h)}}},o??VIe).unref(),{end(){clearInterval(sX)},getLastRotatedLogPath(){return d}}}a(WIe,"logRotator");async function iX(e,t){let r=oX.get(qIe.LOGGING_ROTATION_COMPRESS),n=Zv.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await nm.rename(e,n),r&&(e=n,n+=".gz",await GIe(xIe(e),FIe(),BIe(n)),await nm.unlink(e)),ib.closeLogFile(),ib.notify(`hdb.log rotated, old log moved to ${n}`),n}a(iX,"moveLogFile")});var mX={};ye(mX,{RootConfigWatcher:()=>eM});var lX,uX,dX,ob,fX,eM,pX=ne(()=>{lX=b(require("chokidar")),uX=require("node:fs/promises"),dX=b(gt()),ob=require("node:stream"),fX=require("yaml"),eM=class extends ob.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,dX.getConfigFilePath)(),this.ready=(0,ob.once)(this,"ready"),this.#t=lX.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,uX.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,fX.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var J=M((T$e,pb)=>{"use strict";var La=require("fs-extra"),{workerData:zIe,threadId:jIe,isMainThread:TX}=require("worker_threads"),qE=require("path"),yX=require("yaml"),RX=require("properties-reader"),zr=(H(),v(z)),hX=Qc(),QIe=require("os"),{PACKAGE_ROOT:cM}=yt(),{_assignPackageExport:JIe}=ci(),{Console:XIe}=require("console"),rM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),EX=new Map,{join:Da}=qE,_X=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},ZIe={STDOUT:"stdOut",STDERR:"stdErr"},S$e=Da(cM,"logs"),ewe=Da(cM,"config/yaml/",zr.HDB_DEFAULT_CONFIG_FILE),twe=1e4,$E,VE,ab,Oo,nM,tM,lb,Mt,es,ub,db,sm,GE,HE;function cb(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=qE.dirname(n)):t.root?n=Da(t.root,nM):(n=Mt.path,t.root||(t.root=qE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Mt?.level??cr.info,bX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Mt.path===e.path&&r)}a(cb,"updateLogger");function bX(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}a(bX,"updateConditional");async function sM(){HE||(HE=new ywe,await HE.ready,HE.on("change",sM));let e=HE.config,t=e.logging??{};cb(Mt,t),lb=Mt.path,$E=t.console??!1,t.external&&cb(es,t.external);for(let r in e){let n=e[r];n.logging?cb(Mt.forComponent(r),n.logging,r):Mt.hasComponent(r)&&cb(Mt.forComponent(r),t,r)}}a(sM,"updateLogSettings");var iM=class extends XIe{static{a(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){On="trace",this.level<=cr.trace&&super.info(...t),On="info"}debug(...t){On="debug",this.level<=cr.debug&&super.info(...t),On="info"}info(...t){On="info",this.level<=cr.info&&super.info(...t),On="info"}warn(...t){On="warn",this.level<=cr.warn&&super.warn(...t),On="info"}error(...t){On="error",this.level<=cr.error&&super.error(...t),On="info"}fatal(...t){sm=!0;try{On="fatal",this.level<=cr.fatal&&super.error(...t),On="info"}finally{sm=!1}}notify(...t){sm=!0;try{On="notify",this.level<=cr.notify&&super.info(...t),On="info"}finally{sm=!1}}withTag(t){return IX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};GE===void 0&&AX();pb.exports={notify:uwe,fatal:dwe,error:aM,warn:fwe,info:awe,debug:lwe,trace:cwe,logLevel:Oo,loggerWithTag:IX,suppressLogging:iwe,initLogSettings:AX,logCustomLevel:mwe,closeLogFile:wX,createLogger:mb,logsAtLevel:nwe,getLogFilePath:a(()=>lb,"getLogFilePath"),forComponent:a(e=>Mt.forComponent(e),"forComponent"),setMainLogger:Swe,setLogLevel:hwe,OUTPUTS:ZIe,AuthAuditLog:Twe,start:sM,startOnMainThread:sM,errorToString:gwe,disableStdio:rwe};function rwe(){rM=a(function(){},"nativeStdWrite")}a(rwe,"disableStdio");pb.exports.externalLogger={notify(...e){es.notify(...e)},fatal(...e){es.fatal(...e)},error(...e){es.error(...e)},warn(...e){es.warn(...e)},info(...e){es.info(...e)},debug(...e){es.debug(...e)},trace(...e){es.trace(...e)},withTag(e){return es.withTag(e)},loggerWithTag(e){return es.withTag(e)}};JIe("logger",pb.exports.externalLogger);function nwe(e){return cr[Oo]<=cr[e]}a(nwe,"logsAtLevel");function AX(e=!1){try{if(GE===void 0||e){wX();let t=pwe(),r=hX(["ROOTPATH"]);try{GE=RX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!La.pathExistsSync(Da(r.ROOTPATH,zr.HDB_CONFIG_FILE)))throw s}let n;if({level:Oo,configLogPath:tM,toFile:VE,logConsole:$E,rotation:n,toStream:ab}=Ewe(r.ROOTPATH?Da(r.ROOTPATH,zr.HDB_CONFIG_FILE):GE.get("settings_path")),nM=zr.LOG_NAMES.HDB,lb=Da(tM,nM),Mt=mb({path:lb,level:Oo,stdStreams:ab,rotation:n}),es=Mt.forComponent("external"),es.tag=null,TX)try{require("segfault-handler").registerHandler(Da(tM,"crash.log"))}catch{}}}catch(t){if(GE=void 0,t.code===zr.NODE_ERROR_CODES.ENOENT||t.code===zr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=hX(Object.keys(zr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=zr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let o=r[s];if(i===zr.CONFIG_PARAMS.LOGGING_LEVEL){Oo=o;continue}i===zr.CONFIG_PARAMS.LOGGING_CONSOLE&&($E=i)}let{defaultLevel:n}=_we();VE=!1,ab=!0,Oo=Oo===void 0?n:Oo,Mt=mb({level:Oo}),es=Mt.forComponent("external"),es.tag=null;return}throw aM("Error initializing log settings"),aM(t),t}process.env.DEV_MODE&&(ab=!0),swe()}a(AX,"initLogSettings");var Vc=!0;function swe(){VE&&(process.stdout.write=function(e){return typeof e=="string"&&Vc&&$E&&(e=e.toString(),e[e.length-1]===`
130
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}a(VTe,"parseNPMStdErr");function KTe(e){let t=tR.object({projects:tR.array().min(1).items(tR.string()).required(),dry_run:tR.boolean().default(!1)});return kTe.validateBySchema(e,t)}a(KTe,"modulesValidator")});var $L={};ye($L,{describeMetric:()=>M2,describeMetricOp:()=>qL,get:()=>D2,getOp:()=>HL,listMetrics:()=>v2,listMetricsOp:()=>GL});async function WTe(e){return(await J_().get(e)).hostname}function O2(e,t){return e.length===0||e.includes(t)}function HL(e){return lE.trace?.("get_analytics request:",e),D2(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function L2(e){return"conditions"in e?{...e,conditions:e.conditions.map(L2)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function D2(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(L2));let o=t??[];O2(o,"id")||o.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i,allowConditionsOnDynamicAttributes:!0};return o.length>0&&(c.select=o),lE.trace?.("get_analytics hdb_analytics.search request:",JSON.stringify(c)),(await databases.system.hdb_analytics.search(c)).map(async u=>{let d=u.id[1];return u.id=u.id[0],O2(o,"node")&&(lE.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await WTe(d)),lE.trace?.("get_analytics result:",JSON.stringify(u)),u})}function GL(e){return v2(e.metric_types)}async function v2(e=["builtin"]){let t=[],r=Object.values(Go);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,o=await databases.system.hdb_analytics.search(s);for await(let c of o)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function qL(e){return M2(e.metric)}async function M2(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let o in s)n.push({name:o,type:typeof s[o]});let i={attributes:n};return lE.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var P2,YTe,lE,VL=se(()=>{P2=b(J());LA();DA();({forComponent:YTe}=P2.default),lE=YTe("analytics").conditional;a(WTe,"lookupHostname");a(O2,"isSelected");a(HL,"getOp");a(L2,"conformCondition");a(D2,"get");a(GL,"listMetricsOp");a(v2,"listMetrics");a(qL,"describeMetricOp");a(M2,"describeMetric")});var rR,nR,uE,sR=se(()=>{rR={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},nR=Object.keys(rR),uE="primary"});function x2(e){return U2.validateBySchema(e,JTe)}var dE,U2,zTe,jTe,QTe,JTe,B2=se(()=>{dE=b(require("joi")),U2=b(mt());sR();zTe=nR,jTe=Object.entries(rR).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),QTe=a(()=>{let e=dE.default.string().min(1).max(512);return Object.entries(rR).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:dE.default.string().valid(...r.allowedValues).messages({"any.only":jTe[t]})}))}),e.required()},"createStatusValidationSchema"),JTe=dE.default.object({id:dE.default.string().valid(...zTe).required(),status:QTe()});a(x2,"validateStatus")});function F2(){KL||(KL=Aa.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),YL=new Uint8Array(KL))}function k2(){F2(),YL[0]=1}function H2(){return F2(),YL[0]===1}var KL,YL,WL=se(()=>{fE();a(F2,"ensureInitialized");a(k2,"requestRestart");a(H2,"restartNeeded")});var XL={};ye(XL,{DEFAULT_STATUS_ID:()=>uE,STATUS_IDS:()=>nR,Status:()=>Aa,clear:()=>jL,get:()=>QL,set:()=>JL});function pE(){return zL||(zL=Xe({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),zL}function jL({id:e}){return mE.debug?.("clearStatus",e),pE().delete(e)}async function ZTe(){mE.debug?.("getAllStatus");let e=pE().get({}),t=await vp.query.allThreads(),r=Array.from(t.entries()).map(([s,i])=>({name:s,...i})),n=H2();return{systemStatus:e,componentStatus:r,restartRequired:n}}function QL({id:e}){return e?(mE.debug?.("getStatus",e),pE().get(e)):(mE.debug?.("getStatus","all"),ZTe())}function JL({status:e,id:t=uE}){let r=x2({status:e,id:t});if(r)throw(0,iR.handleHDBError)(r,r.message,XTe.BAD_REQUEST);return mE.debug?.("setStatus",t,e),pE().put(t,{status:e})}var iR,G2,XTe,zL,Aa,mE,fE=se(()=>{we();iR=b(_e()),G2=b(wr());B2();sR();Mp();WL();sR();({HTTP_STATUS_CODES:XTe}=iR.hdbErrors);a(pE,"getStatusTable");Aa={get primaryStore(){return pE().primaryStore}},mE=(0,G2.loggerWithTag)("status");a(jL,"clearStatus");a(ZTe,"getAllStatus");a(QL,"getStatus");a(JL,"setStatus")});var rD={};ye(rD,{getFingerprint:()=>eD,getRegistrationInfo:()=>ZL,setLicense:()=>tD});function ZL(){return{version:q2.packageJson.version,deprecated:!0}}function eD(){return{message:"this-is-deprecated",deprecated:!0}}function tD(){return{deprecated:!0}}var q2,nD=se(()=>{q2=b(yt());a(ZL,"getRegistrationInfo");a(eD,"getFingerprint");a(tD,"setLicense")});var V2=M((PHe,$2)=>{"use strict";var hE=require("alasql"),uu=require("recursive-iterator"),Oi=J(),eye=oe(),EE=(H(),v(z)),sD=class{static{a(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,rye(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=>EE.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=>!EE.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][EE.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=tye(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=>!EE.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new hE.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 tye(e){return e.filter(t=>t[EE.PERMS_CRUD_ENUM.READ])}a(tye,"filterReadRestrictedAttrs");function rye(e,t,r,n,s){nye(e,t,r,n,s)}a(rye,"interpretAST");function _E(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(_E,"addSchemaTableToMap");function nye(e,t,r,n,s){if(!e){Oi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof hE.yy.Insert?aye(e,t,r):e instanceof hE.yy.Select?sye(e,t,r,n,s):e instanceof hE.yy.Update?iye(e,t,r):e instanceof hE.yy.Delete?oye(e,t,r):Oi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(nye,"getRecordAttributesAST");function sye(e,t,r,n,s){if(!e){Oi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(eye.isEmptyOrZeroLength(i)){Oi.error("No schema specified");return}e.from.forEach(c=>{_E(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),_E(c.table,t,r,n,s)});let o=new uu(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{Oi.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 uu(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{Oi.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 uu(c.on);for(let{node:u}of l)if(u&&u.columnid){let d=u.tableid,f=s.get(d);if(!t.get(f).has(d))if(r.has(d))d=r.get(d);else{Oi.info(`table specified as ${d} not found.`);continue}t.get(f).get(d).indexOf(u.columnid)<0&&t.get(f).get(d).push(u.columnid)}}),e.order){let c=new uu(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{Oi.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(sye,"getSelectAttributes");function iye(e,t,r){if(!e){Oi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new uu(e.columns),s=e.table.databaseid;_E(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&iD(e.table.tableid,s,i.columnid,t,r)}a(iye,"getUpdateAttributes");function oye(e,t,r){if(!e){Oi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new uu(e.where),s=e.table.databaseid;_E(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&iD(e.table.tableid,s,i.columnid,t,r)}a(oye,"getDeleteAttributes");function aye(e,t,r){if(!e){Oi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new uu(e.columns),s=e.into.databaseid;_E(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&iD(e.into.tableid,s,i.columnid,t,r)}a(aye,"getInsertAttributes");function iD(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(iD,"pushAttribute");$2.exports=sD});var lR=M((DHe,a4)=>{"use strict";var oD=Vn(),oR=gn(),Os=DT(),TE=kl(),aD=Nl(),cye=mO(),lye=sK(),yE=Es(),aR=Jp(),vr=J(),uye=gO(),dye=VT(),fye=KO(),mye=YT(),pye=zO(),hye=jO(),Eye=XO(),_ye=eP(),cD=JT(),Ia=oe(),W2=Hf(),Nn=(H(),v(z)),z2=kj(),gye=wh(),j2=(kd(),v(nh)),Q2=(Yy(),v(iE)),J2=gt(),yr=ML(),X2=eR(),Sye=kL(),$f=ys(),Z2=(mf(),v(ff)),lD=(VL(),v($L)),uD=(fE(),v(XL)),e4=(zh(),v(wy)),dD=(nD(),v(rD)),t4=hC(),{handleHDBError:Xn,hdbErrors:r4}=_e(),{HDB_ERROR_MSGS:dn,HTTP_STATUS_CODES:gE}=r4,Z=new Map,n4="delete",Hc="insert",ei="read",du="update",SE="describe",K2=TE.describeSchema.name,Y2=TE.describeTable.name,s4={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Tye={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},yye="catchup",Rye="handleGetJob",bye="handleGetJobsByStartDate",cR={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Aye=[Os.createTable.name,Os.createAttribute.name,Os.dropTable.name,Os.dropAttribute.name],i4={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},ne=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};Z.set(oD.insert.name,new ne(!1,[Hc]));Z.set(oD.update.name,new ne(!1,[du]));Z.set(oD.upsert.name,new ne(!1,[Hc,du]));Z.set(oR.searchByConditions.name,new ne(!1,[ei]));Z.set(oR.searchByHash.name,new ne(!1,[ei]));Z.set(oR.searchByValue.name,new ne(!1,[ei]));Z.set(oR.search.name,new ne(!1,[ei]));Z.set(Os.createSchema.name,new ne(!0,[]));Z.set(Os.createTable.name,new ne(!0,[]));Z.set(Os.createAttribute.name,new ne(!1,[Hc]));Z.set(Os.dropSchema.name,new ne(!0,[]));Z.set(Os.dropTable.name,new ne(!0,[]));Z.set(Os.dropAttribute.name,new ne(!0,[]));Z.set(TE.describeSchema.name,new ne(!1,[ei]));Z.set(TE.describeTable.name,new ne(!1,[ei]));Z.set(aD.deleteRecord.name,new ne(!1,[n4]));Z.set(yE.addUser.name,new ne(!0,[]));Z.set(yE.alterUser.name,new ne(!0,[]));Z.set(yE.dropUser.name,new ne(!0,[]));Z.set(yE.listUsersExternal.name,new ne(!0,[]));Z.set(aR.listRoles.name,new ne(!0,[]));Z.set(aR.addRole.name,new ne(!0,[]));Z.set(aR.alterRole.name,new ne(!0,[]));Z.set(aR.dropRole.name,new ne(!0,[]));Z.set(uye.name,new ne(!0,[]));Z.set(dye.name,new ne(!0,[]));Z.set(fye.name,new ne(!0,[]));Z.set(mye.name,new ne(!0,[]));Z.set(pye.name,new ne(!0,[]));Z.set(hye.name,new ne(!0,[]));Z.set(cD.setRoutes.name,new ne(!0,[]));Z.set(cD.getRoutes.name,new ne(!0,[]));Z.set(cD.deleteRoutes.name,new ne(!0,[]));Z.set(J2.setConfiguration.name,new ne(!0,[]));Z.set(Eye.clusterStatus.name,new ne(!0,[]));Z.set(_ye.name,new ne(!0,[]));Z.set(aD.deleteFilesBefore.name,new ne(!0,[]));Z.set(aD.deleteAuditLogsBefore.name,new ne(!0,[]));Z.set(W2.restart.name,new ne(!0,[]));Z.set(W2.restartService.name,new ne(!0,[]));Z.set(cye.name,new ne(!0,[]));Z.set(lye.name,new ne(!0,[ei]));Z.set(Os.cleanupOrphanBlobs.name,new ne(!0,[]));Z.set(gye.systemInformation.name,new ne(!0,[]));Z.set(J2.getConfiguration.name,new ne(!0,[]));Z.set(X2.readTransactionLog.name,new ne(!0,[]));Z.set(X2.deleteTransactionLogsBefore.name,new ne(!0,[]));Z.set(Sye.installModules.name,new ne(!0,[]));Z.set($f.createCsr.name,new ne(!0,[]));Z.set($f.signCertificate.name,new ne(!0,[]));Z.set($f.listCertificates.name,new ne(!0,[]));Z.set($f.addCertificate.name,new ne(!0,[]));Z.set($f.removeCertificate.name,new ne(!0,[]));Z.set($f.getKey.name,new ne(!0,[]));Z.set(Z2.addNodeBack.name,new ne(!0,[]));Z.set(Z2.removeNodeBack.name,new ne(!0,[]));Z.set(lD.getOp.name,new ne(!1,[ei]));Z.set(lD.listMetricsOp.name,new ne(!1,[ei]));Z.set(lD.describeMetricOp.name,new ne(!1,[ei]));Z.set(uD.clear.name,new ne(!0,[]));Z.set(uD.get.name,new ne(!0,[]));Z.set(uD.set.name,new ne(!0,[]));Z.set(e4.installUsageLicenseOp.name,new ne(!0,[]));Z.set(e4.getUsageLicensesOp.name,new ne(!0,[]));Z.set(dD.getFingerprint.name,new ne(!0,[]));Z.set(dD.setLicense.name,new ne(!0,[]));Z.set(j2.createTokens.name,new ne(!1,[]));Z.set(j2.refreshOperationToken.name,new ne(!1,[]));Z.set(Q2.login.name,new ne(!1,[]));Z.set(Q2.logout.name,new ne(!1,[]));Z.set(yr.customFunctionsStatus.name,new ne(!0,[]));Z.set(yr.getCustomFunctions.name,new ne(!0,[]));Z.set(yr.getComponents.name,new ne(!0,[]));Z.set(yr.getComponentFile.name,new ne(!0,[]));Z.set(yr.setComponentFile.name,new ne(!0,[]));Z.set(yr.dropComponent.name,new ne(!0,[]));Z.set(yr.getCustomFunction.name,new ne(!0,[]));Z.set(yr.setCustomFunction.name,new ne(!0,[]));Z.set(yr.dropCustomFunction.name,new ne(!0,[]));Z.set(yr.addComponent.name,new ne(!0,[]));Z.set(yr.dropCustomFunctionProject.name,new ne(!0,[]));Z.set(yr.packageComponent.name,new ne(!0,[]));Z.set(yr.deployComponent.name,new ne(!0,[]));Z.set(yr.addSSHKey.name,new ne(!0,[]));Z.set(yr.updateSSHKey.name,new ne(!0,[]));Z.set(yr.deleteSSHKey.name,new ne(!0,[]));Z.set(yr.listSSHKeys.name,new ne(!0,[]));Z.set(yr.setSSHKnownHosts.name,new ne(!0,[]));Z.set(yr.getSSHKnownHosts.name,new ne(!0,[]));Z.set(dD.getRegistrationInfo.name,new ne(!1,[]));Z.set(yE.userInfo.name,new ne(!1,[]));Z.set(TE.describeAll.name,new ne(!1,[]));Z.set(Rye,new ne(!1,[]));Z.set(bye,new ne(!0,[]));Z.set(yye,new ne(!0,[]));Z.set(cR.CSV_DATA_LOAD,new ne(!1,[Hc,du]));Z.set(cR.CSV_URL_LOAD,new ne(!1,[Hc,du]));Z.set(cR.CSV_FILE_LOAD,new ne(!1,[Hc,du]));Z.set(cR.IMPORT_FROM_S3,new ne(!1,[Hc,du]));Z.set(i4.EXPORT_TO_S3,new ne(!0,[]));Z.set(i4.EXPORT_LOCAL,new ne(!0,[]));Z.set(Nn.VALID_SQL_OPS_ENUM.DELETE,new ne(!1,[n4]));Z.set(Nn.VALID_SQL_OPS_ENUM.SELECT,new ne(!1,[ei]));Z.set(Nn.VALID_SQL_OPS_ENUM.INSERT,new ne(!1,[Hc]));Z.set(Nn.VALID_SQL_OPS_ENUM.UPDATE,new ne(!1,[du]));a4.exports={verifyPerms:wye,verifyPermsAst:Iye,verifyBulkLoadAttributePerms:Cye};function Iye(e,t,r){if(Ia.isEmptyOrZeroLength(e))throw vr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Ia.isEmptyOrZeroLength(t))throw vr.info("verify_perms_ast has an empty user parameter"),Xn(new Error);if(Ia.isEmptyOrZeroLength(r))throw vr.info("verify_perms_ast has a null operation parameter"),Xn(new Error);try{let n=V2(),s=require("alasql"),i=new t4,o=new n(e),c=o.getSchemas(),l=new Map;if((!c||c.length===0)&&o.affected_attributes&&o.affected_attributes.size>0)throw vr.info("No schemas defined in verifyPermsAst(), will not continue."),Xn(new Error);let u=!!t.role.permission.super_user,d=c.includes("system");if(d&&s4[r])throw Xn(new Error,dn.DROP_SYSTEM,gE.FORBIDDEN);if(u&&!d)return null;let f=z2.getRolePermissions(t.role);t.role.permission=f,!u&&e instanceof s.yy.Select&&(e=o.updateAttributeWildcardsForRolePerms(f));for(let p=0;p<c.length;p++){let h=o.getTablesBySchemaName(c[p]);h&&l.set(c[p],h)}let m=o4(t,r,l,i);return m||(l.forEach((p,h)=>{for(let E=0;E<p.length;E++){let g=o.getAttributesBySchemaTableName(h,p[E]),R=mD(t.role.permission,h,p[E]);fD(g,R,r,p[E],h,i)}}),i.getPermsResponse())}catch(n){throw Xn(n)}}a(Iye,"verifyPermsAst");function wye(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw vr.info("null required parameter in verifyPerms"),Xn(new Error,dn.DEFAULT_INVALID_REQUEST,gE.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 t4;if(Ia.isEmptyOrZeroLength(e.hdb_user?.role)||Ia.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return vr.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(dn.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(Nn.SYSTEM_SCHEMA_NAME)||s===Nn.SYSTEM_SCHEMA_NAME;if(l&&d&&Tye[e.operation]&&(i===Nn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===Nn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===Nn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&s4[r])throw Xn(new Error,dn.DROP_SYSTEM,gE.FORBIDDEN);if(l&&!d||u===!0&&(r===Os.createSchema.name||r===Os.dropSchema.name))return null;if(Aye.indexOf(r)>=0&&(u===!0||Array.isArray(u)))return u===!0||u.indexOf(s)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${s}'`);let f=z2.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===K2||r===Y2)&&!f.super_user){if(s===Nn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(dn.SCHEMA_PERM_ERROR(s));if(r===K2&&(!f[s]||!f[s][SE]))return c.handleInvalidItem(dn.SCHEMA_NOT_FOUND(s));if(r===Y2&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][SE]))return c.handleInvalidItem(dn.TABLE_NOT_FOUND(s,i))}let m=o4(e.hdb_user,r,o,c,n);if(m)return m;if(Z.get(r)&&Z.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&Nn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let E=[],g=f[s].tables[i];g[Nn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(S=>S[Nn.PERMS_CRUD_ENUM.READ]).forEach(S=>{E.push(S.attribute_name)}):E=global.hdb_schema[s][i].attributes.map(R=>R.attribute),e.get_attributes=E)}let p=Nye(e),h=mD(e.hdb_user?.role?.permission,s,i);return fD(p,h,r,i,s,c,n),c.getPermsResponse()}a(wye,"verifyPerms");function o4(e,t,r,n,s){if(Ia.arrayHasEmptyValues([e,t,r]))throw vr.info("hasPermissions has an invalid parameter"),Xn(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 vr.info(`operation ${t} not found.`),Xn(new Error,dn.OP_NOT_FOUND(t),gE.BAD_REQUEST);if(Z.get(t)&&Z.get(t).requires_su)return vr.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(dn.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!o[l]||o[l][SE]===!1){n.addInvalidItem(dn.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(dn.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=o[l].tables[d];if(!f||f[SE]===!1)n.addInvalidItem(dn.TABLE_NOT_FOUND(l,d));else try{let m=[],p=Z.get(t).perms;!Ia.isEmpty(s)&&p.includes(s)&&(p=[s]);for(let h=0;h<p.length;h++){let E=p[h],g=f[E];(g==null||g===!1)&&(vr.info(`Required ${E} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(E))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let p=dn.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw vr.error(p),vr.error(m),Xn(r4.CHECK_LOGS_WRAPPER(p))}}}return r.size<2?n.getPermsResponse():null}a(o4,"hasPermissions");function fD(e,t,r,n,s,i,o){if(!e||!t)throw vr.info("no attributes specified in checkAttributePerms."),Xn(new Error);let c=Z.get(r).perms;if(!c||c==="")throw vr.info(`no permissions found for ${r} in checkAttributePerms().`),Xn(new Error);if(Ia.isEmptyOrZeroLength(t))return vr.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[SE]===!1){i.addInvalidItem(dn.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(Nn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==ei)throw Xn(new Error,dn.SYSTEM_TIMESTAMP_PERMS_ERR,gE.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(dn.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}a(fD,"checkAttributePerms");function Nye(e){let t=new Set;try{if(e.action)return t;if(e.operation===Nn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{let n=r.attribute;r.search_attribute!==void 0&&(n=r.search_attribute),t.add(n)}),e&&(e.attribute||e.search_attribute)){let r=e.attribute;e.search_attribute!==void 0&&(r=e.search_attribute),t.add(r)}if(!e.records||e.records.length===0){if(!e.get_attributes||e.get_attributes.length===0)return t;for(let r of e.get_attributes)t.add(r)}else for(let r of e.records){let n=Object.keys(r);for(let s of n)t.add(s)}}catch(r){vr.info(r)}return t}a(Nye,"getRecordAttributes");function mD(e,t,r){let n=new Map;if(Ia.isEmpty(e))return vr.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{vr.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}a(mD,"getAttributePermissions");function Cye(e,t,r,n,s,i,o){let c=new Set(i),l=mD(e,n,s);fD(c,l,t,s,n,o,r)}a(Cye,"verifyBulkLoadAttributePerms")});var hD=M((MHe,c4)=>{"use strict";var pD=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};c4.exports=pD});var yD=M((HHe,I4)=>{"use strict";var uR=Vn(),fR=aC(),Oye=require("needle"),Pi=(H(),v(z)),xHe=Ct(),Vf=oe(),{handleHDBError:Xt,hdbErrors:_4}=_e(),{HTTP_STATUS_CODES:fn,HDB_ERROR_MSGS:Mr,CHECK_LOGS_WRAPPER:mu}=_4,Kf=J(),ED=require("papaparse");Vf.promisifyPapaParse();var Li=require("fs-extra"),Pye=require("path"),{chain:l4}=require("stream-chain"),u4=require("stream-json/streamers/StreamArray"),d4=require("stream-json/utils/Batch"),f4=require("stream-chain/utils/comp"),{finished:m4}=require("stream"),Lye=me(),g4=cC(),Dye=lC(),{BulkLoadFileObject:gD,BulkLoadDataObject:vye}=v$(),SD=hC(),{verifyBulkLoadAttributePerms:S4}=lR(),BHe=hD(),FHe=_r(),kHe=no(),{databases:Mye}=(we(),v(ft)),{coerceType:Uye}=(mg(),v(nq)),p4="No records parsed from csv file.",fu=`${Lye.get("HDB_ROOT")}/tmp`,{schemaRegex:xye}=Qi(),h4=1024*1024*2,E4=5e3,Bye={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};I4.exports={csvDataLoad:Fye,csvURLLoad:kye,csvFileLoad:Hye,importFromS3:Gye};async function Fye(e,t){let r=fR.dataObject(e);if(r)throw Xt(r,r.message,fn.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=R4(e.schema,e.table),i=ED.parse(e.data,{header:!0,skipEmptyLines:!0,transform:_D.bind(null,s),dynamicTyping:!1}),o=new SD;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&S4(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 Xt(new Error,c,fn.BAD_REQUEST,void 0,void 0,!0);let l=new vye(e.action,e.schema,e.table,i.data);return n=await g4.callOperationFunctionAsAwait(b4,l,null),n.message===p4?p4:A4(n.records,n.number_written)}catch(s){throw pu(s)}}a(Fye,"csvDataLoad");async function kye(e){let t=fR.urlObject(e);if(t)throw Xt(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${fu}/${r}`;try{await qye(e,r)}catch(s){throw Kf.error(Mr.DOWNLOAD_FILE_ERR(r)+" - "+s),Xt(s,mu(Mr.DOWNLOAD_FILE_ERR(r)))}try{let s=new gD(this.job_operation_function.name,e.action,e.schema,e.table,n,Pi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await TD(s);return await dR(n),i}catch(s){throw await dR(n),pu(s)}}a(kye,"csvURLLoad");async function Hye(e){let t=fR.fileObject(e);if(t)throw Xt(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r=new gD(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Pi.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await TD(r)}catch(n){throw pu(n)}}a(Hye,"csvFileLoad");async function Gye(e){let t=fR.s3FileObject(e);if(t)throw Xt(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Pye.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${fu}/${s}`;let i=new gD(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await $ye(s,e);let o=await TD(i);return await dR(r),o}catch(n){throw await dR(r),pu(n)}}a(Gye,"importFromS3");async function qye(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Oye("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 Xt(n,s,n.statusCode,Pi.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}Kye(r,e.csv_url),await Vye(t,r.raw)}a(qye,"downloadCSVFile");async function $ye(e,t){try{let r=`${fu}/${e}`;await Li.mkdirp(fu),await Li.writeFile(`${fu}/${e}`,"",{flag:"a+"});let n=await Li.createWriteStream(r),s=await Dye.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(){Kf.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Kf.error(Mr.S3_DOWNLOAD_ERR+" - "+r),Xt(r,mu(Mr.S3_DOWNLOAD_ERR))}}a($ye,"downloadFileFromS3");async function Vye(e,t){try{await Li.mkdirp(fu),await Li.writeFile(`${fu}/${e}`,t)}catch(r){throw Kf.error(Mr.WRITE_TEMP_FILE_ERR),Xt(r,mu(Mr.DEFAULT_BULK_LOAD_ERR))}}a(Vye,"writeFileToTempFolder");async function dR(e){if(e)try{await Li.access(e),await Li.unlink(e)}catch{Kf.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(dR,"deleteTempFile");function Kye(e,t){if(e.statusCode!==_4.HTTP_STATUS_CODES.OK)throw Xt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,fn.BAD_REQUEST);if(!Bye[e.headers["content-type"]])throw Xt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,fn.BAD_REQUEST);if(!e.raw)throw Xt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,fn.BAD_REQUEST)}a(Kye,"validateURLResponse");async function TD(e){try{let t;switch(e.file_type){case Pi.VALID_S3_FILE_TYPES.CSV:t=await Yye(e);break;case Pi.VALID_S3_FILE_TYPES.JSON:t=await Wye(e);break;default:throw Xt(new Error,Mr.DEFAULT_BULK_LOAD_ERR,fn.BAD_REQUEST,Pi.LOG_LEVELS.ERROR,Mr.INVALID_FILE_EXT_ERR(e))}return A4(t.records,t.number_written)}catch(t){throw pu(t)}}a(TD,"fileLoad");async function T4(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 uR.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&S4(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=Xt(c);r(l)}}a(T4,"validateChunk");async function y4(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Vf.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Vf.isEmpty(c)&&!Vf.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 g4.callOperationFunctionAsAwait(b4,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=Xt(c,mu(Mr.INSERT_CSV_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.INSERT_CSV_ERR+" - "+c);r(l)}}a(y4,"insertChunk");async function Yye(e){let t={records:0,number_written:0},r=R4(e.schema,e.table);try{let n=new SD,s=Li.createReadStream(e.file_path,{highWaterMark:h4});s.setEncoding("utf8"),await ED.parsePromise(s,T4.bind(null,e,n),_D.bind(null,r));let i=n.getPermsResponse();if(i)throw Xt(new Error,i,fn.BAD_REQUEST);return s=Li.createReadStream(e.file_path,{highWaterMark:h4}),s.setEncoding("utf8"),await ED.parsePromise(s,y4.bind(null,e,t),_D.bind(null,r)),s.destroy(),t}catch(n){throw Xt(n,mu(Mr.PAPA_PARSE_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.PAPA_PARSE_ERR+n)}}a(Yye,"callPapaParse");function R4(e,t){let r=Mye[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>Uye(i,s));return n}a(R4,"createTransformMap");function _D(e,t,r){let n=e.get(r);return n?n(t):Vf.autoCast(t)}a(_D,"typeFunction");async function Wye(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new SD,s=l4([Li.createReadStream(e.file_path,{encoding:"utf-8"}),u4.withParser(),c=>c.value,new d4({batchSize:E4}),f4(async c=>{await T4(e,n,r,c)})]);await new Promise((c,l)=>{m4(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw Xt(new Error,i,fn.BAD_REQUEST);let o=l4([Li.createReadStream(e.file_path,{encoding:"utf-8"}),u4.withParser(),c=>c.value,new d4({batchSize:E4}),f4(async c=>{await y4(e,t,r,c)})]);return await new Promise((c,l)=>{m4(o,u=>{u?l(u):c()}),o.resume()}),t}catch(n){throw Xt(n,mu(Mr.INSERT_JSON_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.INSERT_JSON_ERR+n)}}a(Wye,"insertJson");async function b4(e){let t={};try{e.data&&e.data.length>0&&zye(e.data[0])?t=await jye(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Kf.info(t.message))}catch(r){throw pu(r)}return t}a(b4,"callBulkFileLoad");function zye(e){let t=Object.keys(e);for(let r of t)if(!xye.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(zye,"validateColumnNames");async function jye(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=uR.insert;break;case"update":i=uR.update;break;case"upsert":i=uR.upsert;break;default:throw Xt(new Error,Mr.INVALID_ACTION_PARAM_ERR(n),fn.BAD_REQUEST,Pi.LOG_LEVELS.ERROR,Mr.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,f=e.length;for(;f--;)o.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Vf.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:o.new_attributes}}catch(o){throw pu(o)}}a(jye,"bulkFileLoad");function A4(e,t){return`successfully loaded ${t} of ${e} records`}a(A4,"buildResponseMsg");function pu(e){return Xt(e,mu(Mr.DEFAULT_BULK_LOAD_ERR),fn.INTERNAL_SERVER_ERROR,Pi.LOG_LEVELS.ERROR,Mr.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(pu,"buildTopLevelErrMsg")});var mR=M((qHe,w4)=>{"use strict";var Qye=fs();w4.exports={writeTransaction:Jye};function Jye(e,t,r){return Qye.writeTransaction(e,t,r)}a(Jye,"writeTransaction")});var P4=M((KHe,O4)=>{"use strict";var Xye=gn(),Zye=to(),N4=J(),eRe=Vn(),VHe=mR(),tRe=require("clone"),bD=require("alasql"),rRe=Kg(),C4=require("util"),nRe=C4.promisify(Zye.getTableSchema),sRe=C4.promisify(Xye.search),iRe=(H(),v(z)),RD=oe();rRe(bD);O4.exports={update:aRe};var oRe="There was a problem performing this update. Please check the logs and try again.";async function aRe({statement:e,hdb_user:t}){let r=await nRe(e.table.databaseid,e.table.tableid),n=cRe(e.columns);RD.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=tRe(s),c=RD.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=bD.parse(l).statements[0],d=await sRe(u),f=lRe(n,d);return uRe(o,f,t)}a(aRe,"update");function cRe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=bD.compile(`SELECT ${r.expression.toString()} AS [${iRe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw N4.error(t),new Error(oRe)}}a(cRe,"createUpdateRecord");function lRe(e,t){return RD.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(lRe,"buildUpdateRecords");async function uRe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await eRe.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){N4.error(`Error delete new_attributes from update response: ${i}`)}return s}a(uRe,"updateRecords")});var D4=M((jHe,L4)=>{var dRe=require("alasql"),fRe=gn(),mRe=J(),pRe=fs(),ID=require("util"),AD=oe(),hRe=(H(),v(z)),ERe=to(),WHe=mR(),zHe=Vn(),_Re="record",gRe="successfully deleted",SRe=ID.callbackify(bRe),TRe=ID.promisify(fRe.search),yRe=ID.promisify(ERe.getTableSchema);L4.exports={convertDelete:SRe};function RRe(e){return`${e.deleted_hashes.length} ${_Re}${e.deleted_hashes.length===1?"":"s"} ${gRe}`}a(RRe,"generateReturnMessage");async function bRe({statement:e,hdb_user:t}){let r=await yRe(e.table.databaseid,e.table.tableid);AD.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=AD.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=dRe.parse(o).statements[0],l={operation:hRe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await TRe(c);let u=await pRe.deleteRecords(l);return AD.isEmptyOrZeroLength(u.message)&&(u.message=RRe(u)),delete u.txn_time,u}catch(u){throw mRe.error(u),u.hdb_code?u.message:u}}a(bRe,"convertDelete")});var bE=M((JHe,B4)=>{"use strict";B4.exports={evaluateSQL:xRe,processAST:x4,convertSQLToAST:U4,checkASTPermissions:M4};var ARe=Vn(),v4=require("util"),IRe=v4.callbackify(ARe.insert),wRe=gn().search,NRe=P4().update,CRe=v4.callbackify(NRe),ORe=D4().convertDelete,Gc=require("alasql"),PRe=lR(),pR=J(),LRe=Kg(),DRe=oe(),RE=(H(),v(z)),{hdbErrors:vRe,handleHDBError:wD}=_e(),{HTTP_STATUS_CODES:ND}=vRe;LRe(Gc);var MRe=403,URe="There was a problem performing this insert. Please check the logs and try again.",CD=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function xRe(e,t){let r=e.parsed_sql_object;if(!r){r=U4(e.sql);let n,s=r.ast.statements[0];if(s instanceof Gc.yy.Insert?n=s.into.databaseid:s instanceof Gc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof Gc.yy.Update||s instanceof Gc.yy.Delete?n=s.table.databaseid:pR.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof Gc.yy.Select)&&DRe.isEmptyOrZeroLength(n))return t("No schema specified",null)}x4(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}a(xRe,"evaluateSQL");function M4(e,t){let r;try{r=PRe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}a(M4,"checkASTPermissions");function U4(e){let t=new CD;if(!e)throw wD(new Error,"The 'sql' parameter is missing from the request body",ND.BAD_REQUEST);try{let r=e.trim(),n=Gc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
131
+ `);throw n[1]?wD(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,ND.BAD_REQUEST):wD(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",ND.BAD_REQUEST)}return t}a(U4,"convertSQLToAST");function x4(e,t,r){try{let n=BRe;if(!e.bypass_auth&&!t.permissions_checked){let i=M4(e,t);if(i&&i.length>0)return r(MRe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case RE.VALID_SQL_OPS_ENUM.SELECT:n=wRe,s=t.ast.statements[0];break;case RE.VALID_SQL_OPS_ENUM.INSERT:n=FRe;break;case RE.VALID_SQL_OPS_ENUM.UPDATE:n=CRe;break;case RE.VALID_SQL_OPS_ENUM.DELETE:n=ORe;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(x4,"processAST");function BRe(e,t){pR.info(e),t("unknown sql statement")}a(BRe,"nullFunction");function FRe({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=kRe(i,e.values)}catch(o){return r(o)}IRe(s,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(l){pR.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}a(FRe,"convertInsert");function kRe(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]]=Gc.compile(`SELECT ${s.toString()} AS [${RE.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw pR.error(r),new Error(URe)}}a(kRe,"createDataObjects")});var LD=M((ZHe,K4)=>{"use strict";var PD=gn(),HRe=lC(),{AsyncParser:GRe}=require("json2csv"),hR=require("stream"),Ps=oe(),OD=require("fs-extra"),qRe=require("path"),ti=J(),{promisify:H4}=require("util"),AE=oe(),{handleHDBError:Rr,hdbErrors:$Re}=_e(),{HDB_ERROR_MSGS:Zn,HTTP_STATUS_CODES:br}=$Re,{streamAsJSON:VRe}=(iA(),v(zU)),{Upload:KRe}=require("@aws-sdk/lib-storage"),{toCsvStream:YRe}=(Fo(),v(sx)),F4=["search_by_value","search_by_hash","sql","search_by_conditions"],k4=["json","csv"],G4="json",q4="csv",WRe="Successfully exported JSON locally.",zRe="Successfully exported CSV locally.",jRe=1e3,QRe=PD.searchByHash,JRe=PD.searchByValue,XRe=H4(hR.finished);K4.exports={export_to_s3:rbe,export_local:ZRe};async function ZRe(e){ti.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=$4(e);if(!Ps.isEmpty(t))throw ti.error(t),Rr(new Error,t,br.BAD_REQUEST,void 0,void 0,!0);if(Ps.isEmpty(e.path))throw ti.error(Zn.MISSING_VALUE("path")),Rr(new Error,Zn.MISSING_VALUE("path"),br.BAD_REQUEST,void 0,void 0,!0);let r=(Ps.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(qRe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=Ps.buildFolderPath(e.path,r);await ebe(e.path);let s=await V4(e);return await tbe(n,e.format,s)}a(ZRe,"export_local");async function ebe(e){if(ti.trace("in confirmPath"),Ps.isEmptyOrZeroLength(e))throw Rr(new Error,`Invalid path: ${e}`,br.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await OD.stat(e)}catch(r){let n;throw r.code==="ENOENT"?n=`path '${directory_path}' does not exist`:r.code==="EACCES"?n=`access to path '${directory_path}' is denied`:n=r.message,ti.error(n),Rr(new Error,n,br.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${directory_path}' is not a directory, please supply a valid folder path`;throw ti.error(r),Rr(new Error,r,br.BAD_REQUEST,void 0,void 0,!0)}return!0}a(ebe,"confirmPath");async function tbe(e,t,r){if(ti.trace("in saveToLocal"),AE.isEmptyOrZeroLength(e))throw Rr(new Error,Zn.INVALID_VALUE("file_path"),br.BAD_REQUEST,void 0,void 0,!0);if(AE.isEmptyOrZeroLength(t))throw Rr(new Error,Zn.INVALID_VALUE("Source format"),br.BAD_REQUEST,void 0,void 0,!0);if(AE.isEmpty(r))throw Rr(new Error,Zn.NOT_FOUND("Data"),br.BAD_REQUEST,void 0,void 0,!0);if(t===G4){let n=OD.createWriteStream(e);return VRe(r).pipe(n),await XRe(n),{message:WRe,path:e}}else if(t===q4){let n=OD.createWriteStream(e),s=hR.Readable.from(r),i={},o=r.getColumns?.();o&&(i.fields=o.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new GRe(i,c).fromInput(s).toOutput(n).promise(!1),{message:zRe,path:e}}throw Rr(new Error,Zn.INVALID_VALUE("format"),br.BAD_REQUEST)}a(tbe,"saveToLocal");async function rbe(e){if(!e.s3||Object.keys(e.s3).length===0)throw Rr(new Error,Zn.MISSING_VALUE("S3 object"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Rr(new Error,Zn.MISSING_VALUE("aws_access_key_id"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Rr(new Error,Zn.MISSING_VALUE("aws_secret_access_key"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.bucket))throw Rr(new Error,Zn.MISSING_VALUE("bucket"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.key))throw Rr(new Error,Zn.MISSING_VALUE("key"),br.BAD_REQUEST);if(Ps.isEmptyOrZeroLength(e.s3.region))throw Rr(new Error,Zn.MISSING_VALUE("region"),br.BAD_REQUEST);let t=$4(e);if(!Ps.isEmpty(t))throw Rr(new Error,t,br.BAD_REQUEST);ti.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await V4(e)}catch(l){throw ti.error(l),l}let n,s=await HRe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new hR.PassThrough;if(e.format===q4){i=e.s3.key+".csv";let l=YRe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(o)}else if(e.format===G4){i=e.s3.key+".json";let l=new hR.Readable;l.pipe(o),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let p=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=p,f!==0&&f%jRe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw Rr(new Error,Zn.INVALID_VALUE("format"),br.BAD_REQUEST);return new KRe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(rbe,"export_to_s3");function $4(e){if(ti.trace("in exportCoreValidation"),Ps.isEmpty(e.format))return"format missing";if(k4.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${k4.join(", ")}`;let t=e.search_operation.operation;if(Ps.isEmpty(t))return"search_operation.operation missing";if(F4.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${F4.join(", ")}`}a($4,"exportCoreValidation");async function V4(e){ti.trace("in getRecords");let t,r;if(AE.isEmpty(e.search_operation)||AE.isEmptyOrZeroLength(e.search_operation.operation))throw Rr(new Error,Zn.INVALID_VALUE("Search operation"),br.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=JRe;break;case"search_by_hash":t=QRe;break;case"search_by_conditions":t=PD.searchByConditions;break;case"sql":{let n=bE();t=H4(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ti.error(r),Rr(new Error,r,br.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(V4,"getRecords")});var W4=M((tGe,Y4)=>{"use strict";var DD=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};Y4.exports=DD});var Q4=M((nGe,j4)=>{"use strict";var nbe=(H(),v(z)),z4=require("moment"),sbe=require("uuid").v4,vD=class{static{a(this,"JobObject")}constructor(){this.id=sbe(),this.type=void 0,this.start_datetime=z4().valueOf(),this.created_datetime=z4().valueOf(),this.end_datetime=void 0,this.status=nbe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};j4.exports=vD});var UD=M((iGe,sQ)=>{"use strict";var ibe=require("uuid").v4,tQ=Vn(),rQ=gn(),obe=mi(),abe=cd(),cbe=W4(),Dt=(H(),v(z)),lbe=Q4(),ube=vS(),Di=J(),dbe=Nm(),Yf=oe(),{promisify:fbe}=require("util"),hu=require("moment"),ER=aC(),J4=Sw(),{deleteTransactionLogsBeforeValidator:mbe}=BL(),{handleHDBError:X4,hdbErrors:pbe,ClientError:hbe}=_e(),{HTTP_STATUS_CODES:Z4}=pbe,eQ=rQ.searchByValue,Ebe=rQ.searchByHash,_be=tQ.insert,gbe=tQ.update,MD;sQ.exports={addJob:ybe,updateJob:bbe,handleGetJob:Sbe,handleGetJobsByStartDate:Tbe,getJobById:nQ};async function Sbe(e){if(e.id===void 0)throw new hbe("'id' is required");let t=await nQ(e.id);return Yf.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(Sbe,"handleGetJob");async function Tbe(e){try{let t=await Rbe(e);if(Di.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=hu(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=hu(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 Di.error(r),new Error(r)}}a(Tbe,"handleGetJobsByStartDate");async function ybe(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Yf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return Di.info(d),t.error=d,t}if(!Dt.JOB_TYPE_ENUM[e.operation])return Di.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Dt.OPERATIONS_ENUM.CSV_FILE_LOAD:n=ER.fileObject(e);break;case Dt.OPERATIONS_ENUM.CSV_URL_LOAD:n=ER.urlObject(e);break;case Dt.OPERATIONS_ENUM.CSV_DATA_LOAD:n=ER.dataObject(e);break;case Dt.OPERATIONS_ENUM.IMPORT_FROM_S3:n=ER.s3FileObject(e);break;case Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=J4(e,"date");break;case Dt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=J4(e,"timestamp");break;case Dt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=mbe(e);break;case Dt.OPERATIONS_ENUM.RESTART_SERVICE:if(Dt.HDB_PROCESS_SERVICES[e.service]===void 0)throw X4(new Error,"Invalid service",Z4.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw X4(n,n.message,Z4.BAD_REQUEST,void 0,void 0,!0);let s=new lbe;s.type=e.operation===Dt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Dt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new obe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await eQ(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return Di.error(f),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=ibe();try{o=await eQ(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return Di.error(f),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Di.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new dbe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await _be(l)}catch(d){return Di.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,Di.trace(d)}return t}a(ybe,"addJob");async function Rbe(e){let t=hu(e.from_date,hu.ISO_8601),r=hu(e.to_date,hu.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 cbe(n,e.hdb_user);try{if(!MD){let i=bE();MD=fbe(i.evaluateSQL)}return await MD(s)}catch(i){throw Di.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(Rbe,"getJobsInDateRange");async function nQ(e){if(Yf.isEmptyOrZeroLength(e))return Yf.errorizeMessage("Invalid job ID specified.");let t=new abe(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Ebe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return Di.error(n),Yf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(nQ,"getJobById");async function bbe(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Yf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Dt.JOB_STATUS_ENUM.COMPLETE||e.status===Dt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=hu().valueOf());let t=new ube(Dt.SYSTEM_SCHEMA_NAME,Dt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await gbe(t),r}a(bbe,"updateJob")});var fQ=M((aGe,dQ)=>{"use strict";var iQ=oe(),Ur=(H(),v(z)),Abe=require("moment"),_R=yD(),IE=J(),oQ=UD(),aQ=LD(),cQ=Nl(),lQ=st(),Ibe=eR(),wbe=Hf(),{parentPort:Nbe,isMainThread:uQ}=require("worker_threads"),{onMessageByType:Cbe}=st(),xD=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Obe(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(iQ.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(iQ.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ur.JOB_TYPE_ENUM.csv_file_load:await bo(e,_R.csvFileLoad);break;case Ur.JOB_TYPE_ENUM.csv_url_load:await bo(e,_R.csvURLLoad);break;case Ur.JOB_TYPE_ENUM.csv_data_load:await bo(e,_R.csvDataLoad);break;case Ur.JOB_TYPE_ENUM.import_from_s3:await bo(e,_R.importFromS3);break;case Ur.JOB_TYPE_ENUM.empty_trash:break;case Ur.JOB_TYPE_ENUM.export_local:await bo(e,aQ.export_local);break;case Ur.JOB_TYPE_ENUM.export_to_s3:await bo(e,aQ.export_to_s3);break;case Ur.JOB_TYPE_ENUM.delete_files_before:case Ur.JOB_TYPE_ENUM.delete_records_before:await bo(e,cQ.deleteFilesBefore);break;case Ur.JOB_TYPE_ENUM.delete_audit_logs_before:await bo(e,cQ.deleteAuditLogsBefore);break;case Ur.JOB_TYPE_ENUM.delete_transaction_logs_before:await bo(e,Ibe.deleteTransactionLogsBefore);break;case Ur.JOB_TYPE_ENUM.restart_service:return await bo(e,wbe.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Obe,"parseMessage");async function bo(e,t){try{e.job.status=Ur.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Abe().valueOf(),await oQ.updateJob(e.job),await Pbe(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):IE.error(`There was an error running ${t.name} job with id ${e.job.id}`),IE.error(n),e.job.message=n,e.job.status=Ur.JOB_STATUS_ENUM.ERROR;try{await oQ.updateJob(e.job)}catch(s){throw IE.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(bo,"runJob");async function Pbe(e){IE.trace("launching job thread:",e),uQ?lQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):Nbe.postMessage({type:Ur.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(Pbe,"launchJobThread");uQ&&Cbe(Ur.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{lQ.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ur.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){IE.error(r)}});dQ.exports={parseMessage:Obe,RunnerMessage:xD}});var pQ=M((lGe,mQ)=>{"use strict";var Lbe=oe(),BD=me(),qc=(H(),v(z)),Dbe=Ct(),vbe=_r(),Ao=J(),Mbe=hD(),Ube=no();BD.initSync();mQ.exports={postOperationHandler:Bbe,sendOperationTransaction:wE};async function wE(e,t,r,n){if(e.schema===qc.SYSTEM_SCHEMA_NAME)return;let s=xbe(e,t,r);s&&(Ao.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await vbe.publishToStream(`${Dbe.SUBJECT_PREFIXES.TXN}.${e.schema}`,Ube.createNatsTableStreamName(e.schema,e.table),n,s))}a(wE,"sendOperationTransaction");function xbe(e,t,r){if(Lbe.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===qc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}a(xbe,"convertCRUDOperationToTransaction");async function Bbe(e,t,r){if(!BD.get(qc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;Ao.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=BD.get(qc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new Mbe(t.txn_time,n,s);switch(e.operation){case qc.OPERATIONS_ENUM.INSERT:try{await wE(e,t.inserted_hashes,i,r)}catch(o){Ao.error("There was an error calling clustering postOperationHandler for insert."),Ao.error(o)}break;case qc.OPERATIONS_ENUM.DELETE:try{await wE(e,t.deleted_hashes,i,r)}catch(o){Ao.error("There was an error calling clustering postOperationHandler for delete."),Ao.error(o)}break;case qc.OPERATIONS_ENUM.UPDATE:try{await wE(e,t.update_hashes,i,r)}catch(o){Ao.error("There was an error calling clustering postOperationHandler for update."),Ao.error(o)}break;case qc.OPERATIONS_ENUM.UPSERT:try{await wE(e,t.upserted_hashes,i,r)}catch(o){Ao.error("There was an error calling clustering postOperationHandler for upsert."),Ao.error(o)}break;default:break}return t}a(Bbe,"postOperationHandler")});var X,hQ=se(()=>{X=class{static{a(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var UL={};ye(UL,{chooseOperation:()=>UQ,executeJob:()=>ri,getOperationFunction:()=>xQ,operation:()=>YD,processLocalTransaction:()=>MQ});function Hbe(e){if(!FD){let t=bE();FD=KD.promisify(t.evaluateSQL)}return FD(e)}async function MQ(e,t){try{if(e.body.operation!=="read_log"&&(PE.default.log_level===Em.INFO||PE.default.log_level===Em.DEBUG||PE.default.log_level===Em.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:o,...c}=e.body;Cn.info(c)}}catch(n){Cn.error(n)}let r=await DQ.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Gbe[e.body.operation]&&NQ.default.setSchemaDataToGlobal(n=>{n&&Cn.error(n)}),r}function UQ(e){let t;try{t=xQ(e)}catch(s){throw Cn.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=bE(),i=e.operation==="sql"?e.sql:e.search_operation.sql,o=s.convertSQLToAST(i);if(e.parsed_sql_object=o,!e.bypass_auth){let c=s.checkASTPermissions(e,o);if(c)throw Cn.error(`${EQ.FORBIDDEN} from operation ${e.operation}`),Cn.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,ni.handleHDBError)(new Error,c,ni.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==V.CREATE_AUTHENTICATION_TOKENS&&e.operation!==V.LOGIN&&e.operation!==V.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=wQ.default.verifyPerms(i,s);if(o)throw Cn.error(`${EQ.FORBIDDEN} from operation ${e.operation}`),Cn.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,ni.handleHDBError)(new Error,o,ni.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,ni.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function xQ(e){if(Cn.trace(`getOperationFunction with operation: ${e.operation}`),_Q.has(e.operation))return _Q.get(e.operation);throw(0,ni.handleHDBError)(new Error,ni.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ni.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function YD(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=UQ(e);return MQ({body:e},n)}async function qbe(e){Cn.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[Fb]=!0;let o;switch(i.operation){case V.INSERT:o=await _u.default.insert(i);break;case V.UPDATE:o=await _u.default.update(i);break;case V.UPSERT:o=await _u.default.upsert(i);break;case V.DELETE:o=await jf.default.deleteRecord(i);break;default:Cn.warn("invalid operation in catchup");break}await Fbe.postOperationHandler(i,o,e)}catch(o){Cn.info("Invalid operation in transaction"),Cn.error(o)}}async function ri(e){(0,LQ.transformReq)(e);let t,r;try{if(r=await SR.default.addJob(e),r){t=r.createdJob,Cn.info("addJob result",r);let n=new qD.default.RunnerMessage(t,e);return{message:await qD.default.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}}catch(n){let s=n instanceof Error?n:null,i=`There was an error executing job: ${s&&"http_resp_msg"in s?s.http_resp_msg:n}`;throw Cn.error(i),(0,ni.handleHDBError)(n,i)}}function $be(){let e=new Map;return e.set(V.INSERT,new X(_u.default.insert)),e.set(V.UPDATE,new X(_u.default.update)),e.set(V.UPSERT,new X(_u.default.upsert)),e.set(V.SEARCH_BY_CONDITIONS,new X(zf.default.searchByConditions)),e.set(V.SEARCH_BY_HASH,new X(zf.default.searchByHash)),e.set(V.SEARCH_BY_ID,new X(zf.default.searchByHash)),e.set(V.SEARCH_BY_VALUE,new X(zf.default.searchByValue)),e.set(V.SEARCH,new X(kbe)),e.set(V.SQL,new X(Hbe)),e.set(V.CSV_DATA_LOAD,new X(ri,NE.default.csvDataLoad)),e.set(V.CSV_FILE_LOAD,new X(ri,NE.default.csvFileLoad)),e.set(V.CSV_URL_LOAD,new X(ri,NE.default.csvURLLoad)),e.set(V.IMPORT_FROM_S3,new X(ri,NE.default.importFromS3)),e.set(V.CREATE_SCHEMA,new X(vi.default.createSchema)),e.set(V.CREATE_DATABASE,new X(vi.default.createSchema)),e.set(V.CREATE_TABLE,new X(vi.default.createTable)),e.set(V.CREATE_ATTRIBUTE,new X(vi.default.createAttribute)),e.set(V.DROP_SCHEMA,new X(vi.default.dropSchema)),e.set(V.DROP_DATABASE,new X(vi.default.dropSchema)),e.set(V.DROP_TABLE,new X(vi.default.dropTable)),e.set(V.DROP_ATTRIBUTE,new X(vi.default.dropAttribute)),e.set(V.DESCRIBE_SCHEMA,new X(CE.default.describeSchema)),e.set(V.DESCRIBE_DATABASE,new X(CE.default.describeSchema)),e.set(V.DESCRIBE_TABLE,new X(CE.default.describeTable)),e.set(V.DESCRIBE_ALL,new X(CE.default.describeAll)),e.set(V.DELETE,new X(jf.default.deleteRecord)),e.set(V.ADD_USER,new X(Wf.default.addUser)),e.set(V.ALTER_USER,new X(Wf.default.alterUser)),e.set(V.DROP_USER,new X(Wf.default.dropUser)),e.set(V.LIST_USERS,new X(Wf.default.listUsersExternal)),e.set(V.LIST_ROLES,new X(OE.default.listRoles)),e.set(V.ADD_ROLE,new X(OE.default.addRole)),e.set(V.ALTER_ROLE,new X(OE.default.alterRole)),e.set(V.DROP_ROLE,new X(OE.default.dropRole)),e.set(V.USER_INFO,new X(Wf.default.userInfo)),e.set(V.READ_LOG,new X(SQ.default)),e.set(V.ADD_NODE,new X(TQ.default)),e.set(V.UPDATE_NODE,new X(kD.default)),e.set(V.SET_NODE_REPLICATION,new X(kD.default)),e.set(V.REMOVE_NODE,new X(yQ.default)),e.set(V.CONFIGURE_CLUSTER,new X(RQ.default)),e.set(V.PURGE_STREAM,new X(bQ.default)),e.set(V.SET_CONFIGURATION,new X($D.default.setConfiguration)),e.set(V.CLUSTER_STATUS,new X(AQ.default.clusterStatus)),e.set(V.CLUSTER_NETWORK,new X(IQ.default)),e.set(V.CLUSTER_SET_ROUTES,new X(gR.default.setRoutes)),e.set(V.CLUSTER_GET_ROUTES,new X(gR.default.getRoutes)),e.set(V.CLUSTER_DELETE_ROUTES,new X(gR.default.deleteRoutes)),e.set(V.EXPORT_TO_S3,new X(ri,HD.default.export_to_s3)),e.set(V.CREATE_CSR,new X(Eu.default.createCsr)),e.set(V.SIGN_CERTIFICATE,new X(Eu.default.signCertificate)),e.set(V.LIST_CERTIFICATES,new X(Eu.default.listCertificates)),e.set(V.ADD_CERTIFICATES,new X(Eu.default.addCertificate)),e.set(V.REMOVE_CERTIFICATE,new X(Eu.default.removeCertificate)),e.set(V.GET_KEY,new X(Eu.default.getKey)),e.set(V.ADD_NODE_BACK,new X(kO)),e.set(V.REMOVE_NODE_BACK,new X(HO)),e.set(V.DELETE_FILES_BEFORE,new X(ri,jf.default.deleteFilesBefore)),e.set(V.DELETE_RECORDS_BEFORE,new X(ri,jf.default.deleteFilesBefore)),e.set(V.EXPORT_LOCAL,new X(ri,HD.default.export_local)),e.set(V.SEARCH_JOBS_BY_START_DATE,new X(SR.default.handleGetJobsByStartDate)),e.set(V.GET_JOB,new X(SR.default.handleGetJob)),e.set(V.GET_REGISTRATION_INFO,new X(ZL)),e.set(V.GET_FINGERPRINT,new X(eD)),e.set(V.SET_LICENSE,new X(tD)),e.set(V.RESTART,new X(GD.default.restart)),e.set(V.RESTART_SERVICE,new X(ri,GD.default.restartService)),e.set(V.CATCHUP,new X(qbe)),e.set(V.SYSTEM_INFORMATION,new X(CQ.default.systemInformation)),e.set(V.DELETE_AUDIT_LOGS_BEFORE,new X(ri,jf.default.deleteAuditLogsBefore)),e.set(V.READ_AUDIT_LOG,new X(gQ.default)),e.set(V.CREATE_AUTHENTICATION_TOKENS,new X(XN)),e.set(V.REFRESH_OPERATION_TOKEN,new X(ZN)),e.set(V.LOGIN,new X(PL)),e.set(V.LOGOUT,new X(LL)),e.set(V.GET_CONFIGURATION,new X($D.default.getConfiguration)),e.set(V.CUSTOM_FUNCTIONS_STATUS,new X(vt.default.customFunctionsStatus)),e.set(V.GET_CUSTOM_FUNCTIONS,new X(vt.default.getCustomFunctions)),e.set(V.GET_COMPONENT_FILE,new X(vt.default.getComponentFile)),e.set(V.GET_COMPONENTS,new X(vt.default.getComponents)),e.set(V.SET_COMPONENT_FILE,new X(vt.default.setComponentFile)),e.set(V.DROP_COMPONENT,new X(vt.default.dropComponent)),e.set(V.GET_CUSTOM_FUNCTION,new X(vt.default.getCustomFunction)),e.set(V.SET_CUSTOM_FUNCTION,new X(vt.default.setCustomFunction)),e.set(V.DROP_CUSTOM_FUNCTION,new X(vt.default.dropCustomFunction)),e.set(V.ADD_CUSTOM_FUNCTION_PROJECT,new X(vt.default.addComponent)),e.set(V.ADD_COMPONENT,new X(vt.default.addComponent)),e.set(V.DROP_CUSTOM_FUNCTION_PROJECT,new X(vt.default.dropCustomFunctionProject)),e.set(V.PACKAGE_CUSTOM_FUNCTION_PROJECT,new X(vt.default.packageComponent)),e.set(V.PACKAGE_COMPONENT,new X(vt.default.packageComponent)),e.set(V.DEPLOY_CUSTOM_FUNCTION_PROJECT,new X(vt.default.deployComponent)),e.set(V.DEPLOY_COMPONENT,new X(vt.default.deployComponent)),e.set(V.READ_TRANSACTION_LOG,new X(VD.default.readTransactionLog)),e.set(V.DELETE_TRANSACTION_LOGS_BEFORE,new X(ri,VD.default.deleteTransactionLogsBefore)),e.set(V.INSTALL_NODE_MODULES,new X(OQ.default.installModules)),e.set(V.GET_BACKUP,new X(vi.default.getBackup)),e.set(V.CLEANUP_ORPHAN_BLOBS,new X(vi.default.cleanupOrphanBlobs)),e.set(V.ADD_SSH_KEY,new X(vt.default.addSSHKey)),e.set(V.UPDATE_SSH_KEY,new X(vt.default.updateSSHKey)),e.set(V.DELETE_SSH_KEY,new X(vt.default.deleteSSHKey)),e.set(V.LIST_SSH_KEYS,new X(vt.default.listSSHKeys)),e.set(V.SET_SSH_KNOWN_HOSTS,new X(vt.default.setSSHKnownHosts)),e.set(V.GET_SSH_KNOWN_HOSTS,new X(vt.default.getSSHKnownHosts)),e.set(V.GET_ANALYTICS,new X(HL)),e.set(V.LIST_METRICS,new X(GL)),e.set(V.DESCRIBE_METRIC,new X(qL)),e.set(V.GET_STATUS,new X(QL)),e.set(V.SET_STATUS,new X(JL)),e.set(V.CLEAR_STATUS,new X(jL)),e.set(V.INSTALL_USAGE_LICENSE,new X(QP)),e.set(V.GET_USAGE_LICENSES,new X(eL)),e}var zf,NE,vi,CE,jf,gQ,Wf,OE,vt,PE,SQ,TQ,kD,yQ,RQ,bQ,AQ,IQ,gR,HD,wQ,SR,ni,GD,KD,_u,NQ,CQ,qD,$D,VD,OQ,PQ,LQ,Eu,DQ,vQ,EQ,Cn,Fbe,kbe,FD,Gbe,_Q,xL=se(()=>{zf=b(gn()),NE=b(yD()),vi=b(DT()),CE=b(kl()),jf=b(Nl()),gQ=b(mO()),Wf=b(Es()),OE=b(Jp()),vt=b(ML()),PE=b(J()),SQ=b(gO()),TQ=b(VT()),kD=b(KO()),yQ=b(YT()),RQ=b(zO()),bQ=b(jO()),AQ=b(XO()),IQ=b(eP()),gR=b(JT()),HD=b(LD()),wQ=b(lR()),SR=b(UD());H();ni=b(_e()),GD=b(Hf()),KD=b(require("util")),_u=b(Vn()),NQ=b(to()),CQ=b(wh()),qD=b(fQ());kd();Yy();$D=b(gt()),VD=b(eR()),OQ=b(kL()),PQ=b(ci()),LQ=b(oe());Hr();Eu=b(ys());mf();VL();DQ=b(cC()),vQ=b(pQ());fE();zh();nD();hQ();({HTTP_STATUS_CODES:EQ}=ni.hdbErrors),Cn=PE.default.loggerWithTag("operation"),{transactToClusteringUtils:Fbe}=vQ.default,kbe=KD.promisify(zf.default.search);a(Hbe,"evaluateSQL");Gbe={[V.CREATE_ATTRIBUTE]:!0,[V.CREATE_TABLE]:!0,[V.CREATE_SCHEMA]:!0,[V.DROP_ATTRIBUTE]:!0,[V.DROP_TABLE]:!0,[V.DROP_SCHEMA]:!0};a(MQ,"processLocalTransaction");_Q=$be();Be.operation=YD;a(UQ,"chooseOperation");a(xQ,"getOperationFunction");(0,PQ._assignPackageExport)("operation",YD);a(YD,"operation");a(qbe,"catchup");a(ri,"executeJob");a($be,"initializeOperationFunctionMap")});var RR=M((EGe,HQ)=>{"use strict";var TR=(H(),v(z)),Vbe=oe(),gu=J(),{handleHDBError:yR,hdbErrors:LE}=_e(),{isMainThread:Kbe}=require("worker_threads"),{Readable:Ybe}=require("stream"),BQ=require("os"),Wbe=require("util"),zbe=tC(),kQ=Wbe.promisify(zbe.authorize),FQ=(xL(),v(UL)),{createGzip:jbe,constants:Qbe}=require("zlib"),Jbe=[TR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,TR.OPERATIONS_ENUM.LOGIN,TR.OPERATIONS_ENUM.LOGOUT];function Xbe(e){let t=`Found an uncaught exception with message: ${e.message}. ${BQ.EOL}Stack: ${e.stack} ${BQ.EOL}Terminating ${Kbe?"HDB":"thread"}.`;console.error(t),gu.fatal(t),process.exit(1)}a(Xbe,"handleServerUncaughtException");function Zbe(e,t,r){if(gu[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:LE.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(Zbe,"serverErrorHandler");function eAe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=yR(new Error,"Invalid JSON.",LE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(Vbe.isEmpty(e.body.operation)){let n=yR(new Error,"Request body must include an 'operation' property.",LE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(eAe,"reqBodyValidationHandler");function tAe(e,t,r){let n;!Jbe.includes(e.body.operation)||e.body.operation===TR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?kQ(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{gu.warn(i),gu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let o=typeof i=="string"?{error:i}:{error:i.message};r(yR(i,o,LE.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(tAe,"authHandler");function rAe(e,t,r){kQ(e,t).then(n=>{e.hdb_user=n,r()}).catch(n=>{gu.warn(n),gu.warn(`{"ip":"${e.socket?.remoteAddress}", "error":"${n.stack}"`);let s=typeof n=="string"?{error:n}:{error:n.message};r(yR(n,s,LE.HTTP_STATUS_CODES.UNAUTHORIZED),null)})}a(rAe,"authAndEnsureUserOnRequest");async function nAe(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=FQ.chooseOperation(e.body);let s=await FQ.processLocalTransaction(e,n);if(s instanceof Ybe&&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(jbe({level:Qbe.Z_BEST_SPEED})))}return s}catch(s){throw gu.error(s),s}}a(nAe,"handlePostRequest");HQ.exports={authHandler:tAe,authAndEnsureUserOnRequest:rAe,handlePostRequest:nAe,handleServerUncaughtException:Xbe,serverErrorHandler:Zbe,reqBodyValidationHandler:eAe}});var VQ=M((gGe,$Q)=>{"use strict";var sAe=require("fastify-plugin"),{handlePostRequest:GQ,authHandler:iAe,reqBodyValidationHandler:oAe}=RR();async function aAe(e){e.decorate("hdbCore",{preValidation:[oAe,iAe],request:a(t=>qQ(GQ(t,response)),"request"),requestWithoutAuthentication:a((t,r)=>qQ(GQ(t,r,!0)),"requestWithoutAuthentication")})}a(aAe,"hdbCore");async function qQ(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(qQ,"convertAsyncIterators");$Q.exports=sAe(aAe)});var YQ=M((yGe,KQ)=>{"use strict";var TGe=require("fs"),bR=me();bR.initSync();var{CONFIG_PARAMS:WD}=(H(),v(z)),cAe=1024*1024*1024;function lAe(e){let t=bR.get(WD.HTTP_TIMEOUT),r=bR.get(WD.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:cAe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:bR.get(WD.HTTP_MAXPARAMLENGTH)??1e3,https:e}}a(lAe,"getServerOptions");KQ.exports=lAe});var jQ=M((bGe,zQ)=>{"use strict";var zD=me();zD.initSync();var{CONFIG_PARAMS:WQ}=(H(),v(z));function uAe(){let e=zD.get(WQ.HTTP_CORSACCESSLIST),t=zD.get(WQ.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(uAe,"getCORSOptions");zQ.exports=uAe});var XQ=M((IGe,JQ)=>{"use strict";var QQ=me();QQ.initSync();var dAe=(H(),v(z));function fAe(){return QQ.get(dAe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(fAe,"getHeaderTimeoutConfig");JQ.exports=fAe});var QD={};ye(QD,{customFunctionsServer:()=>hAe,ready:()=>fJ,start:()=>pAe});function pAe(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){wa||(wa=dJ(t),Be.http((await wa).server));let o=await wa,c=(0,jD.dirname)(s),l=(0,jD.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!ZQ.has(c)){ZQ.add(c);try{o.register(_Ae(c,l))}catch(u){if(u.message==="Root plugin has already booted")Tt.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:fJ}}async function hAe(){try{Tt.info("In Custom Functions Fastify server"+process.cwd()),Tt.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tt.debug(`Custom Functions server process ${process.pid} starting up.`),await EAe();let e=iJ.get(F.HTTP_SECUREPORT)>0,t;try{t=wa=await dJ(e)}catch(r){throw Tt.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Tt.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Tt.error(`Custom Functions ${process.pid} Error: ${e}`),Tt.error(e),process.exit(1)}}async function EAe(){try{Tt.info("Custom Functions starting configuration."),await oJ.setUsersWithRolesCache(),Tt.info("Custom Functions completed configuration.")}catch(e){Tt.error(e)}}function _Ae(e,t){return async function(r){try{Tt.info("Custom Functions starting buildRoutes"),Tt.trace("Loading fastify routes folder "+e),(0,eJ.existsSync)(e)&&r.register(sJ.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Tt.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Tt.error(s.message):s&&Tt.error(s),o()})}catch(n){Tt.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function dJ(e){Tt.info("Custom Functions starting buildServer.");let t=(0,aJ.default)(e),r=(0,tJ.default)(t);r.server.headersTimeout=(0,lJ.default)(),r.setErrorHandler(uJ.serverErrorHandler);let n=(0,cJ.default)();return n&&r.register(rJ.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),o()}),r.register(nJ.default),await r.register(mAe),await r.after(),Um(r),Tt.info("Custom Functions completed buildServer."),r}function fJ(){if(wa)return wa.then?wa.then(e=>e.ready()):wa.ready()}var jD,eJ,tJ,rJ,nJ,sJ,iJ,Tt,mAe,oJ,aJ,cJ,lJ,uJ,wa,ZQ,mJ=se(()=>{jD=require("path"),eJ=require("fs"),tJ=b(require("fastify")),rJ=b(require("@fastify/cors")),nJ=b(zN()),sJ=b(require("@fastify/autoload")),iJ=b(me());H();Tt=b(J()),mAe=b(VQ()),oJ=b(Es()),aJ=b(YQ()),cJ=b(jQ()),lJ=b(XQ()),uJ=b(RR());Fo();Hr();ZQ=new Set;a(pAe,"start");a(hAe,"customFunctionsServer");a(EAe,"setUp");a(_Ae,"buildRouteFolder");a(dJ,"buildServer");a(fJ,"ready")});var XD={};ye(XD,{handleApplication:()=>gAe,suppressHandleApplicationWarning:()=>SAe});function gAe(e){let t=new Map,r=new Map;e.options.on("change",(n,s)=>{if(n[0]==="files"||n[0]==="urlPath"){t.clear(),r.clear(),e.logger.info(`Static files reinitialized due to change in ${n.join(".")}`);return}}),e.handleEntry(n=>{switch(n.eventType){case"addDir":case"unlinkDir":let s=(0,Jf.join)(n.absolutePath,"index.html");(0,Qf.existsSync)(s)&&r[n.eventType==="addDir"?"set":"delete"](n.urlPath,s);break;case"add":t.set(n.urlPath,n.absolutePath),n.urlPath.endsWith("index.html")&&r.set((0,Jf.dirname)(n.urlPath),n.absolutePath);break;case"unlink":t.delete(n.urlPath),n.urlPath.endsWith("index.html")&&r.delete((0,Jf.dirname)(n.urlPath));break}}),e.server.http((n,s)=>{if(n.method!=="GET"||n.isWebSocket)return s(n);let i=e.options.get(["fallthrough"])??!0;if(typeof i!="boolean")throw new Error(`Invalid fallthrough option: ${i}. Must be a boolean.`);let o=t.get(n.pathname);if(!o){let d=e.options.get(["index"])??!1;if(typeof d!="boolean")throw new Error(`Invalid index option: ${d}. Must be a boolean.`);d&&(o=r.get(n.pathname))}if(!o){let d=e.options.get(["extensions"])??[];if(!Array.isArray(d)||d.some(f=>typeof f!="string"))throw new Error(`Invalid extensions option: ${d}. Must be an array of strings.`);for(let f of d)if(o=t.get(`${n.pathname}.${f}`),o)break}if(o)return{handlesHeaders:!0,body:(0,JD.default)(n,(0,Qf.realpathSync)(o))};if(i)return s(n);let c=e.options.get(["notFound"]);if(TAe(c),!c)return{status:404,body:"File not found"};let l=(0,Jf.join)(e.directory,typeof c=="string"?c:c.file),u=typeof c=="object"?c.statusCode:404;if(!(0,Qf.existsSync)(l))throw new Error(`Not found file does not exist: ${l}`);return{status:u,handlesHeaders:!0,body:(0,JD.default)(n,(0,Qf.realpathSync)(l))}},{runFirst:!0})}function TAe(e){if(!(e===void 0||typeof e=="string")){if(typeof e=="object"&&e!==null&&!Array.isArray(e)){if(!("file"in e)||typeof e.file!="string")throw new Error(`Invalid \`notFound.file\` option: ${e.file}. Must be a string.`);if(!("statusCode"in e)||typeof e.statusCode!="number")throw new Error(`Invalid \`notFound.statusCode\` option: ${e.statusCode}. Must be a number.`);return}throw new Error(`Invalid notFound option: ${e}. Must be a string or an object with file and statusCode properties.`)}}var Qf,Jf,JD,SAe,pJ=se(()=>{Qf=require("node:fs"),Jf=require("node:path"),JD=b(require("send"));a(gAe,"handleApplication");SAe=!0;a(TAe,"validateNotFoundOption")});var ZD={};ye(ZD,{start:()=>yAe});function yAe({override:e}){return{handleFile:a((t,r,n)=>{AR.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,hJ.parse)(t))){if(process.env[s]!==void 0)if(AR.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)AR.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var hJ,AR,EJ=se(()=>{hJ=require("dotenv"),AR=b(J());a(yAe,"start")});var ev={};ye(ev,{DataLoaderError:()=>Ls,DataLoaderResult:()=>Xf,EmptyFileError:()=>NR,FileParseError:()=>wR,InvalidPropertyTypeError:()=>CR,MissingRequiredPropertyError:()=>DE,RecordProcessingError:()=>vE,SystemDatabaseError:()=>OR,UnsupportedFileExtensionError:()=>IR,handleApplication:()=>bAe,loadDataFile:()=>yJ,suppressHandleApplicationWarning:()=>RAe});function bAe(e){if((0,gJ.getWorkerIndex)()!==0){Io.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||yJ(t,Rn,Me).then(r=>{Io.debug?.("Data loader processed file: %s: %s",(0,Na.basename)(t.absolutePath),r.message)})})}async function yJ({contents:e,absolutePath:t,stats:r},n,s){let i=(0,Na.extname)(t)||"unknown",o;try{if(i===".yaml"||i===".yml")o=(0,_J.parseDocument)(e.toString()).toJSON();else if(i===".json")o=JSON.parse(e.toString());else throw new IR(t,i);o.mtime=r.mtimeMs}catch(f){throw f instanceof Ls?f:new wR(t,f)}if(!o)throw new NR(t);let{database:c,table:l,records:u}=o;if(!l)throw new DE(t,"table");if(!u)throw new DE(t,"records");if(!Array.isArray(u))throw new CR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new OR(c,l);try{let f;if(c&&s[c]&&s[c][l])Io.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])Io.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{Io.debug?.(`Table ${d} not found, creating new table`);let R=[];if(u.length>0){let S=u[0];Object.keys(S).map(y=>{let N={name:y,type:typeof S[y]};return y==="id"&&(N.isPrimaryKey=!0),N}).forEach(y=>{R.push(y)})}f=await Xe({database:c,table:l,attributes:R})}let m=u.length,p=0,h=0,E=0,g=100;for(let R=0;R<u.length;R+=g){let S=u.slice(R,R+g),y=[];for(let N of S)y.push(async()=>{try{let I=null,$=N.id;if($!==void 0&&(I=await f.get($)),!I)return p++,f.put(N);let ee=I.getUpdatedTime();return o.mtime>ee?(h++,f.put(N)):(E++,Promise.resolve({inserted:0,updated:0}))}catch(I){if(I instanceof Ls)Io.error?.(`Record processing error: ${I.message}`);else{let $=new vE(d,I);Io.error?.(`Record processing error: ${$.message}`)}return Promise.resolve({inserted:0,updated:0,error:I.message})}});await Promise.all(y.map(N=>N()))}if(p>0||h>0){let R=`Loaded ${p} new and updated ${h} records in ${d}`;return E>0&&(R+=` (${E} records skipped)`),Io.info?.(R),new Xf(t,c,l,"success",p+h,R)}else if(E>0){let R=`All ${E} records in ${d} already up-to-date`;return Io.info?.(R),new Xf(t,c,l,"skipped",m,R)}else{let R=`No records to process in ${d}`;return Io.info?.(R),new Xf(t,c,l,"success",0,R)}}catch(f){throw f instanceof Ls?f:new vE(d,f)}}var Na,_J,gJ,Ca,SJ,TJ,Io,RAe,Ls,IR,wR,NR,DE,CR,OR,vE,Xf,RJ=se(()=>{Na=require("node:path"),_J=require("yaml");we();gJ=b(st()),Ca=b(Jr()),SJ=b(_e()),TJ=b(J()),Io=TJ.default.forComponent("dataLoader"),RAe=!0;a(bAe,"handleApplication");a(yJ,"loadDataFile");Ls=class extends SJ.ClientError{static{a(this,"DataLoaderError")}constructor(t,r=Ca.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},IR=class extends Ls{static{a(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Na.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},wR=class extends Ls{static{a(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Na.basename)(t)}: ${r.message}`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},NR=class extends Ls{static{a(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Na.basename)(t)} is empty or invalid`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},DE=class extends Ls{static{a(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Na.basename)(t)} is missing required "${r}" property`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},CR=class extends Ls{static{a(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Na.basename)(t)} has invalid "${r}" property, expected ${n}`,Ca.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},OR=class extends Ls{static{a(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ca.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},vE=class extends Ls{static{a(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ca.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},Xf=class{static{a(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,o){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=o}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var tv={};ye(tv,{calculateRestHttpURL:()=>UJ,hdbServer:()=>NAe,start:()=>NAe});async function NAe(e){try{Mi.default.debug("In Fastify server"+process.cwd()),Mi.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Mi.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=bJ.default.isMaster,await CAe();let t=e.securePort>0;Zf=OAe(t,e.resources),await Zf.ready(),e||(e={}),e.isOperationsServer=!0;try{Be.http(Zf.server,e),Zf.server.closeIdleConnections||await Zf.listen({port:0,host:"::"})}catch(r){throw Zf.close(),Mi.default.error(r),Mi.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Mi.default.fatal(t),process.exit(1)}}async function CAe(){return Mi.default.trace("Configuring HarperDB process."),LJ.default.setSchemaDataToGlobal(),vJ.default.setUsersWithRolesCache()}function OAe(e,t){Mi.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let r=DAe(e),n=(0,AJ.default)(r);n.server.headersTimeout=MAe(),n.setErrorHandler(wo.serverErrorHandler);let s=vAe();s&&n.register(IJ.default,s),n.register(function(o,c,l){o.setNotFoundHandler(function(u,d){n.server.emit("unhandled",u.raw,d.raw)}),l()}),n.register(CJ.default),n.register(wJ.default),Um(n),n.get("/health",()=>"HarperDB is running."),n.register(NJ.default,{root:OJ.default.join(PJ.PACKAGE_ROOT,"studio/web")});let i=Ui.default.get(gm.LOCAL_STUDIO_ON);return!DJ.default.isEmpty(i)&&i.toString().toLowerCase()==="true"?n.get("/",(o,c)=>c.sendFile("index.html")):n.get("/",(o,c)=>c.sendFile("running.html")),n.get("/api/openapi/rest",{preValidation:[wo.authAndEnsureUserOnRequest]},PAe(t)),n.post("/",{preValidation:[wo.reqBodyValidationHandler,wo.authHandler],config:{isOperation:!0}},LAe),Mi.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),n}function PAe(e){let t=Ui.default.get(F.HTTP_PORT),r=Ui.default.get(F.HTTP_SECUREPORT);return n=>n.hdb_user?.role?.permission?.super_user?CS(e,UJ(t,r,n)):(Mi.default.warn(`{"ip":"${n.socket.remoteAddress}", "error":"attempt to access /api/openapi/rest without being super_user"`),new MJ.ServerError("Forbidden",403))}function UJ(e,t,r){let n=new URL(`${r.protocol}://${r.hostname}`);return r.hostname.toLowerCase()==="localhost"||r.hostname.match(/^[\d.:]+$/)?t?(n.port=t,n.protocol="https:"):e&&(n.port=e,n.protocol="http:"):(n.port="443",n.protocol="https:"),n.toString()}function LAe(e,t){return e.body?.operation?.startsWith("restart")&&t.header("Connection","close"),(0,wo.handlePostRequest)(e,t)}function DAe(e){let t=Ui.default.get(em.OPERATIONSAPI_NETWORK_TIMEOUT),r=Ui.default.get(em.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:IAe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,http2:Ui.default.get(em.OPERATIONSAPI_NETWORK_HTTP2),https:e}}function vAe(){let e=Ui.default.get(em.OPERATIONSAPI_NETWORK_CORS),t=Ui.default.get(em.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===wAe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}function MAe(){return Ui.default.get(em.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??AAe}var bJ,Ui,Mi,AJ,IJ,wJ,NJ,CJ,OJ,PJ,LJ,DJ,vJ,wo,MJ,AAe,IAe,wAe,em,Zf,xJ=se(()=>{bJ=b(require("cluster")),Ui=b(me());H();Mi=b(J()),AJ=b(require("fastify")),IJ=b(require("@fastify/cors")),wJ=b(require("@fastify/compress")),NJ=b(require("@fastify/static")),CJ=b(zN()),OJ=b(require("path")),PJ=b(yt()),LJ=b(to()),DJ=b(oe()),vJ=b(Es());Hr();wo=b(RR());Fo();$N();MJ=b(_e());Ui.default.initSync();AAe=6e4,IAe=1024*1024*1024,wAe="TRUE",{CONFIG_PARAMS:em}=z;a(NAe,"operationsServer");a(CAe,"setUp");a(OAe,"buildServer");a(PAe,"restOpenAPIHandler");a(UJ,"calculateRestHttpURL");a(LAe,"handler");a(DAe,"getServerOptions");a(vAe,"getCORSOpts");a(MAe,"getHeaderTimeoutConfig")});var av={};ye(av,{disableNATS:()=>xAe,publishToStream:()=>DR,setNATSReplicator:()=>rv,setPublishToStream:()=>BAe,setSubscription:()=>ov,start:()=>UAe});function UAe(){ME.default.get(F.CLUSTERING_ENABLED)&&kAe()}function xAe(e=!0){GJ=e}function BAe(e,t){DR=e,ov=t}function kAe(){if(GJ||process.env._DISABLE_NATS)return;let e=ct(),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];rv(s,r,i)}}Bl((r,n)=>{rv(r.tableName,r.databaseName,r),n&&$J(r)}),!BJ&&(BJ=!0)}function rv(e,t,r){if(t==="system"&&HAe.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 lr{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){$J(i)}static subscribe(){let i=new ns;return ov(t,e,i),i}static subscribeOnThisThread(i){return i<(ME.default.get(F.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??FAe)}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 PR(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=qJ;return i}a(n,"getNATSTransaction")}function $J(e){let t=ME.default.get(F.CLUSTERING_NODENAME);DR(`${sv.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,iv.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 FJ,sv,iv,kJ,HJ,ME,LR,GJ,DR,ov,FAe,qJ,BJ,HAe,PR,nv,VJ=se(()=>{we();Vo();FJ=b(_r()),sv=b(Ct()),iv=b(no());Uu();kJ=b(vR()),HJ=b(Un()),ME=b(me());H();LR=b(J());a(UAe,"start");a(xAe,"disableNATS");DR=FJ.publishToStream,ov=kJ.setSubscription;a(BAe,"setPublishToStream");FAe=2;a(kAe,"assignReplicationSource");HAe=["hdb_job","hdb_raw_analytics","hdb_info"];a(rv,"setNATSReplicator");a($J,"publishSchema");PR=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=ME.default.get(F.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let o=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(LR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=o)),l.table===f&&l.operation===m?(o.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(DR(`${sv.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,iv.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw LR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},nv=class extends PR{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,HJ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};qJ=new nv});async function jJ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await cv.get(e,{returnNonexistent:!0});i=new dv(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await cv.get(e);o&&o.delete()}i=new UR(e,t)}return n&&(n.id=e,n.user={username:t?.username},UE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function lv(){return MR++,MR>65500&&(MR=1),MR}function uv(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=Bs.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=new ui(i.relativeURL);o.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return bt(r,()=>s?t===void 0?c.delete(o,r):c.put(o,e.data,r):c.publish(o,e.data,r))}var YJ,$c,WJ,zJ,KJ,cv,UE,MR,UR,dv,QJ=se(()=>{we();za();YJ=b(Un()),$c=b(J());Ga();WJ=b(st()),zJ=b(dL());Hr();pg();KJ=100,cv=Xe({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),UE=Xe({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,WJ.getWorkerIndex)()===0&&(async()=>{await zJ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of UE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await Be.getUser(r.user.username));try{await uv(r,t,r)}catch{(0,$c.warn)("Failed to publish will",t)}UE.delete(e.id)}})();a(jJ,"getSession");MR=1;a(lv,"getNextMessageId");UR=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(S=>S.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:o,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};o&&(0,$c.trace)("Resuming subscription from",s,"from",o);let p=Bs.getMatch(u,"mqtt");if(!p){let S=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw S.statusCode=404,S}m.url=p.relativeURL;let h;if(m.url.indexOf("+")>-1||(h=m.url.indexOf("#"))>-1){let S=m.url.slice(1);if(h--,h>-1&&h!==S.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,S.indexOf("+")===S.length-1)m.onlyChildren=!0,m.url="/"+S.slice(0,S.length-1);else{let y=S.split("/"),N;for(let ee=0;ee<y.length;ee++)if(y[ee].indexOf("+")>-1)if(y[ee]==="+")N=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&N)throw new Error("Filters can not be combined");let I=!0;y[y.length-1]==="#"&&(y.length--,I=!1),N&&(n=a(ee=>{let G=ee.id;if(!Array.isArray(G))if(G?.indexOf?.("/")>-1)G=G.split("/");else return!1;if(I&&G.length!==y.length)return!1;for(let k=0;k<y.length;k++)if(y[k]!=="+"&&y[k]!==G[k])return!1;return!0},"filter"));let $=y.indexOf("+");m.url="/"+($>-1?y.slice(0,$):y).concat("").join("/")}}else m.isCollection=!1;let E=p.path,g=p.Resource,R=await bt(m,async()=>{let S=this.createContext();S.topic=s,S.retainHandling=i,S.isCollection=m.isCollection;let y=await g.subscribe(m,S);if(!y)return;if(!y[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let N=(async()=>{for await(let I of y)try{let $;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,$=this.needsAcknowledge(I)):(I.acknowledge?.(),$=lv());let ee=I.id;if(Array.isArray(ee)&&(ee=td(ee)),ee==null&&(ee=""),await this.listener(E+"/"+ee,I.value,$,t)===!1)break;this.awaitingAcks?.size>KJ?await new Promise(k=>setTimeout(k,this.awaitingAcks.size-KJ)):await new Promise(setImmediate)}catch($){(0,$c.warn)($)}})();return y});if(R)return R.topic=s,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=lv();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 uv(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();bt(r,async()=>{try{if(!t){let n=await UE.get(this.sessionId);n?.doesExist()&&await uv(n,n.data,r)}}finally{await UE.delete(this.sessionId)}}).catch(n=>{(0,$c.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(uv,"publish");dv=class extends UR{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=lv(),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,$c.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,YJ.getNextMonotonicTime)()),(0,$c.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),cv.put(this.sessionRecord)}}});var fv={};ye(fv,{bypassAuth:()=>GAe,start:()=>$Ae});function GAe(){n3=!0}function $Ae({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new r3.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);o.events.emit("connection",u),Zt.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:p,onClose:h}=XJ(u,E=>{u.send(E)},d,Promise.resolve(f).then(()=>d?.user),o);u.on("message",p),u.on("close",h),u.on("error",E=>{Zt.info?.("WebSocket error",E)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(o.events.emit("connection",u),Zt.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{let p=u.getPeerCertificate(!0);if(p?.subject){let E=await nf(p,l);if(!E.valid)throw Zt.error?.("Certificate verification failed:",E.status,"for",p.subject.CN),new Error("Certificate revoked or verification failed")}let h=l.user;if(h!==null){(h===void 0||h==="Common Name"||h==="CN")&&(h=u.getPeerCertificate().subject.CN);try{d=await e.getUser(h,null,null),(0,tm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&BR.notify?.({username:d?.username,status:ai.SUCCESS,type:Fa.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(E){throw(0,tm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&BR.error?.({username:h,status:ai.FAILURE,type:Fa.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),E}}else Zt.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(p){o.events.emit("error",p,u),Zt.error?.(p)}else if(l.required)return Zt.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&qAe(u.remoteAddress)&&(d=await(0,ZJ.getSuperUser)(),Zt.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=XJ(u,p=>u.write(p),null,d,o);u.on("data",f),u.on("close",m),u.on("error",p=>{Zt.info?.("Socket error",p)})},{port:t,securePort:s,mtls:l})),c}function XJ(e,t,r,n,s){JJ||(JJ=!0,Qm(f=>{xR>0&&f.push({metric:"mqtt-connections",connections:xR,byThread:!0})}));let i;xR++;let o,c={protocolVersion:4},l=(0,FR.parser)({protocolVersion:5});function u(f){l.parse(f)}a(u,"onMessage");function d(){xR--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!1,"connection","mqtt","disconnect"),Zt.debug?.("MQTT connection was closed",e.remoteAddress))}return a(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(y){e.close?.(1008,"Unauthorized"),Zt.info?.(y);return}let m=f.cmd;if(o)o.then&&await o;else if(m!=="connect"){Zt.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let p=f.topic,h=p?.indexOf("/",1),E=h>0?p.slice(0,h):p;Ve(f.length,"bytes-received",E,R(f),"mqtt");try{switch(o?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await Be.getUser(f.username,f.password.toString(),r),(0,tm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&BR.notify?.({username:n?.username,status:ai.SUCCESS,type:Fa.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(j){return(0,tm.get)(F.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&BR.error?.({username:f.username,status:ai.FAILURE,type:Fa.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,j),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(f,n),f.will){let j=e.deserialize||(e.deserialize=Bo(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?j(f.will.payload):void 0,delete f.will.payload}o=jJ({user:n,...f}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(j){return Zt.error?.(j),s.events.emit("auth-failed",f,e,j),tn(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:j.code||5,returnCode:j.code||128})}s.events.emit("connected",o,e),tn(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0});let y=a(async(j,Y,ce,de)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",j);let te=j.indexOf("/",1),ge=te>0?j.slice(0,te):j;g({cmd:"publish",topic:j,payload:await S(Y),messageId:ce||Math.floor(Math.random()*1e8),qos:de.qos},ge);let be=e._socket??e;return be.writableNeedDrain?new Promise(Ye=>be.once("drain",Ye)):!be.closed}catch(te){return Zt.error?.(te),o?.disconnect(),s.sessions.delete(o),!1}},"listener");o.setListener(y),o.sessionWasPresent&&await o.resume();break;case"subscribe":let N=[];for(let j of f.subscriptions){let Y;try{let ce=await o.addSubscription(j,j.qos>=1);Y=ce?ce.qos||0:c.protocolVersion<5?128:143}catch(ce){s.events.emit("error",ce,e,j,o),ce.statusCode?ce.statusCode===500?Zt.warn?.(ce):Zt.info?.(ce):Zt.error?.(ce),Y=c.protocolVersion<5?128:ce.statusCode===403?135:ce.statusCode===404?143:128}N.push(Y)}await o.committed,g({cmd:"suback",granted:N,messageId:f.messageId});break;case"unsubscribe":{let j=[];for(let Y of f.unsubscriptions)j.push(o.removeSubscription(Y)?0:17);g({cmd:"unsuback",granted:j,messageId:f.messageId});break}case"pubrel":g({cmd:"pubcomp",messageId:f.messageId,reasonCode:0});return;case"publish":let I=f.qos===2?"pubrec":"puback",$=e.deserialize||(e.deserialize=Bo(r?.headers.get?.("content-type"))),G=(f.payload?.length||0)>0?$(f.payload):void 0,k;try{k=await o.publish(f,G)}catch(j){s.events.emit("error",j,e,f,o),Zt.warn?.(j),f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:I,messageId:f.messageId,reasonCode:k===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),tn(!0,"connection","mqtt","disconnect"),Zt.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(y){s.events.emit("error",y,e,f,o),Zt.error?.(y),g({cmd:"disconnect"})}function g(y,N){let I=(0,FR.generate)(y,c);t(I),Ve(I.length,"bytes-sent",N,R(y),"mqtt")}a(g,"sendPacket");function R(y){return y.qos>0?y.cmd+",qos="+y.qos:y.cmd}a(R,"packetMethodName");function S(y){return xo(y,r)}a(S,"serialize")}),l.on("error",f=>{Zt.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var FR,ZJ,tm,e3,t3,r3,BR,Zt,n3,qAe,JJ,xR,s3=se(()=>{FR=require("mqtt-packet");QJ();ZJ=b(Es());Fo();is();Hr();tm=b(me());H();e3=b(wr()),t3=b(J()),r3=require("events");bT();BR=(0,e3.loggerWithTag)("auth-event"),Zt=(0,t3.forComponent)("mqtt"),n3=(0,tm.get)(F.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(GAe,"bypassAuth");qAe=a(e=>n3&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");a($Ae,"start");xR=0;a(XJ,"onSocket")});function kR(e,t){if(t?.includes(".."))throw new mv(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var mv,pv=se(()=>{mv=class extends Error{static{a(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};a(kR,"resolveBaseURLPath")});function i3(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(o=>o[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var o3=se(()=>{a(i3,"deriveCommonPatternBase")});function HR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=a((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var hv=se(()=>{a(HR,"deriveGlobOptions")});var a3,Ev,xE,c3=se(()=>{pv();o3();hv();a3=require("micromatch"),Ev=class extends Error{static{a(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},xE=class{static{a(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=kR(this.name,this.config.urlPath),this.globOptions=HR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new Ev(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,a3.scan)(s).base),this.commonPatternBase=i3(this.patternBases)}}});function l3(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function Su(e,t,r){t.startsWith("./")&&(t=t.slice(2));for(let n of e.patternBases)if(n.startsWith("./")&&(n=n.slice(2)),n!==""){if(r==="file"){if(t===n){let s=t.split("/");t=s[s.length-1];break}else if(l3(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(l3(n,t)){t=t.slice(n.length+1);break}}}return(0,u3.join)(e.baseURLPath,t)}var u3,_v=se(()=>{u3=require("node:path");a(l3,"pathStartsWithBase");a(Su,"deriveURLPath")});function d3(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var qR,f3,m3,gv,p3,h3,GR,E3=se(()=>{qR=require("node:events");c3();f3=b(J()),m3=b(require("chokidar")),gv=require("node:path"),p3=require("node:fs/promises");_v();h3=require("micromatch"),GR=class extends qR.EventEmitter{static{a(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new xE(t,r,d3(n)),this.#r=s||f3.default.loggerWithTag(t),this.ready=(0,qR.once)(this,"ready"),this.#a()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,h3.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,gv.join)(this.directory,r);switch(t){case"add":case"change":{let i=Su(this.#e,r,"file");(0,p3.readFile)(s).then(o=>{let c={eventType:t,entryType:"file",contents:o,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=Su(this.#e,r,"file"),o={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}case"addDir":case"unlinkDir":{let i=Su(this.#e,r,"directory"),o={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",o),this.emit(t,o);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,gv.join)(this.#e.directory,r));return this.#t=m3.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:a(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new xE(this.name,this.directory,d3(t)),this.#a()}};a(d3,"castConfig")});var $R,Sv=se(()=>{$R={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var KR,_3,g3,S3,T3,y3,Tv,yv,Rv,bv,Av,VR,R3=se(()=>{KR=require("events"),_3=b(require("yaml")),g3=b(require("chokidar")),S3=require("node:fs/promises"),T3=require("util"),y3=b(J());Sv();Tv=class extends Error{static{a(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},yv=class extends Error{static{a(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},Rv=class extends Error{static{a(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},bv=class extends Error{static{a(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},Av=class extends Error{static{a(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},VR=class extends KR.EventEmitter{static{a(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||y3.default.loggerWithTag(t),this.ready=(0,KR.once)(this,"ready"),this.#t=g3.default.watch(r,{persistent:!1}).on("add",this.#a.bind(this)).on("change",this.#a.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#a.bind(this))}#a(){(0,S3.readFile)(this.#e,"utf-8").then(t=>{this.#n=_3.default.parse(t),this.#n&&this.#s in this.#n?this.#r?this.#f(this.#n[this.#s],this.#r):(this.#r=this.#n[this.#s],this.emit("ready",this.#r)):this.#r&&(this.#r=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#n?(this.#o(),this.emit("remove")):(this.#o(),this.emit("ready"));return}this.emit("error",t)})}#d(t){this.emit("error",new Tv(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Reverting to default configuration. Recreate it to restore the options watcher.`),this.#o(),this.emit("remove")}#o(){this.#n=$R,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let o=n.concat(s),c=this.#m(o);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(o,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,o):this.#u(o,i);continue}(0,T3.isDeepStrictEqual)(i,c)||this.#u(o,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new yv;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new Rv(t,r);let n=this.#r;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new bv(t,s);n=n[s]}if(n==null||typeof n!="object")throw new Av(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#r)}close(){return this.#t.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#r?this.#m(t):void 0}getAll(){return structuredClone(this.#r)}getRoot(){return this.#n}}});var zR,b3,YR,WR,A3=se(()=>{zR=require("node:events");E3();R3();b3=b(J());WL();YR=class extends Error{static{a(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},WR=class extends zR.EventEmitter{static{a(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=(0,b3.loggerWithTag)(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,zR.once)(this,"ready"),this.options=new VR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#f.bind(this)()).on("ready",this.#a.bind(this))}get logger(){return this.#i}get name(){return this.#r}get directory(){return this.#t}#a(){this.emit("ready")}#d(t){this.emit("error",t)}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new GR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return a(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new YR);return}if(typeof t=="function"){if(this.#n)return this.#n.on("all",t);let s=this.#l();if(s)return this.#n=this.#c(s),this.#n.on("all",t);this.emit("error",new YR);return}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug(`Restart requested from ${this.name} scope for ${this.directory}`),k2()}}});function Tu(e){return typeof e=="string"&&e.trim()!==""}function Iv(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>Tu(t))}function C3(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function VAe(e){e.config.root&&BE.default.warn("Resource extension 'root' option is deprecated. Due to backwards compatibility reasons it does not act as assumed. The glob pattern will always be evaluated from the component directory root. The option is only used for the initial root directory handling. Please remove and modify the 'files' glob pattern instead.");let t=[];if(e.config.root&&typeof e.config.files!="string")throw new Dv(e);let r=e.config.root;r&&(r.startsWith("/")&&(r=r.slice(1)),r.endsWith("/")||(r+="/"));let n=e.config.files;if(typeof n=="string"&&!n.includes("**/*")&&(n.indexOf("/*")>-1?r=n.slice(0,n.indexOf("/*")+1):n.indexOf("/")>-1&&(r=n.slice(0,n.lastIndexOf("/")+1))),r&&t.push(r),t.length===0){if(C3(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let o=(0,FE.join)(e.directory,i);jR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,o,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,o,e.resources))}return s}async function O3(e){let t=!1;if(t=await VAe(e),t)return t;let r=await(0,I3.default)(e.globOptions.source,{cwd:e.directory,objectMode:!0,onlyFiles:e.globOptions.onlyFiles,onlyDirectories:e.globOptions.onlyDirectories,ignore:e.globOptions.ignore});for(let n of r){let s=(0,FE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=Su(e,n.path,"directory");jR.isMainThread&&e.module.setupDirectory&&(await e.module.setupDirectory(i,s,e.resources),t=!0),e.resources.isWorker&&e.module.handleDirectory&&(await e.module.handleDirectory(i,s,e.resources),t=!0)}else if(n.dirent.isFile()){let i=Su(e,n.path,"file"),o=await(0,w3.readFile)(s);jR.isMainThread&&e.module.setupFile?(await e.module.setupFile(o,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(o,i,s,e.resources),t=!0)}else BE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var jR,I3,BE,FE,w3,N3,QR,xi,wv,Nv,Cv,Ov,Pv,Lv,Dv,vv,Mv,P3=se(()=>{jR=require("node:worker_threads"),I3=b(require("fast-glob")),BE=b(J());pv();hv();FE=require("node:path"),w3=require("node:fs/promises");_v();N3=require("micromatch"),QR=class{static{a(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!Tu(this.config.files)&&!Iv(this.config.files)&&!C3(this.config.files))throw new wv(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!Iv(this.config.files.source)&&!Tu(this.config.files.source))throw new Nv(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new Cv(this);if(this.config.files.ignore!==void 0&&!Iv(this.config.files.ignore)&&!Tu(this.config.files.ignore))throw new Ov(this)}if(this.config.root!==void 0&&!Tu(this.config.root))throw new Lv(this);if(this.config.path!==void 0&&!Tu(this.config.path))throw new vv(this);if(this.config.path&&(BE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!Tu(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new Mv(this);this.globOptions=HR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new Pv(this,r);return r.startsWith("/")&&(BE.default.warn("Leading '/' in 'files' glob pattern is deprecated. For backwards compatibility purposes, it is currently transformed to the relative path of the component, but in the future will result in an error. Paths are automatically derived from the root of the component directory. Please remove (e.g. '/web/*' -> 'web/*')."),r=r==="/"?".":r.slice(1)),r}),this.patternBases=this.globOptions.source.map(r=>(0,N3.scan)(r).base),this.baseURLPath=kR(this.name,this.config.urlPath)}},xi=class extends Error{static{a(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,FE.basename)(r.directory)}) ${t}`)}},wv=class extends xi{static{a(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},Nv=class extends xi{static{a(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},Cv=class extends xi{static{a(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},Ov=class extends xi{static{a(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},Pv=class extends xi{static{a(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},Lv=class extends xi{static{a(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},Dv=class extends xi{static{a(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},vv=class extends xi{static{a(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},Mv=class extends xi{static{a(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};a(Tu,"isNonEmptyString");a(Iv,"isArrayOfNonEmptyStrings");a(C3,"isObject");a(VAe,"handleRoots");a(O3,"processResourceExtensionComponent")});var xy={};ye(xy,{getComponentName:()=>vy,loadComponent:()=>eb,loadComponentDirectories:()=>M3,setErrorReporter:()=>YAe});function M3(e,t){t&&(xv=t),e&&(Hv=e);let r=[];if((0,Vt.existsSync)(Uv)){let s=(0,Vt.readdirSync)(Uv,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Wr.join)(Uv,o);r.push(eb(c,xv,vb,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(eb(n,xv,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{v3=!0})}function YAe(e){XR=e}function WAe(e){return new Promise((t,r)=>{let n=setTimeout(()=>{Aa.primaryStore.unlock(e,0),r(new Error("symlinking harperdb module timed out"))},1e4);if(Aa.primaryStore.attemptLock(e,0,()=>{clearTimeout(n),t()}))try{let s=(0,Wr.join)(e,"node_modules");(0,Vt.existsSync)(s)||(0,Vt.mkdirSync)(s);let i=(0,Wr.join)(s,"harperdb");if((0,Vt.existsSync)(i)){if((0,Vt.realpathSync)(i)===(0,Vt.realpathSync)(kv.PACKAGE_ROOT))return t();(0,Vt.rmSync)(i,{recursive:!0,force:!0})}(0,Vt.symlinkSync)(kv.PACKAGE_ROOT,i,"dir"),t()}finally{Aa.primaryStore.unlock(e,0)}})}function U3(e,t){return e.ready.then(()=>{let r=e.options.get(["timeout"])||t.defaultTimeout||3e4;if(typeof r!="number")throw new Error(`Invalid timeout value for ${e.name}. Expected a number, received: ${typeof r}`);let n,s;return Aa.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(U3(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,o)=>setTimeout(()=>o(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{Aa.primaryStore.unlock(e.name,0)}):new Promise((i,o)=>{n=i,s=setTimeout(()=>{o(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function eb(e,t,r,n,s,i){let o=(0,Vt.realpathSync)(e);if(JR.has(o))return JR.get(o);JR.set(o,!0),s&&(Hv=s);try{let c,l=(0,Wr.join)(e,"harperdb-config.yaml");if((0,Vt.existsSync)(l)?c=n?(0,tb.getConfigObj)():(0,Fv.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Vt.existsSync)(l=(0,Wr.join)(e,"config.yaml"))?c=(0,Fv.parseDocument)((0,Vt.readFileSync)(l,"utf8")).toJSON():c=$R,!n)try{await WAe(e)}catch(m){Oa.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&Oa.default.error('You may need to enable developer mode in "Settings" / "System" (or "Update & Security") / "For developers", in order to enable symlinks so components can use `import from "harperdb"`')}let u=ZR,d={};for(let m in c){let p=n?m:`${(0,Wr.basename)(e)}.${m}`;ZR=m;let h=c[m];if(!h)continue;ao.loading(p);let E,g=h.package;try{if(g){let I=null;if(n)I=(0,Wr.join)(e,"components",m);else{let $=e;for(I=(0,Wr.join)($,"node_modules",m);!(0,Vt.existsSync)(I);){if($=(0,Wr.dirname)($),$.length<(0,D3.getHdbBasePath)().length){I=null;break}I=(0,Wr.join)($,"node_modules",m)}}if(I)E=await eb(I,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${g}`)}else E=KAe[m];if(!E){ao.loaded(p,`Application component '${p}' processed`);continue}let R=a(I=>(I.origin=r,Xe(I)),"ensureTable"),S=h.network||(h.port||h.securePort)&&h,y=S?.securePort||S?.https&&S.port,N=!S?.https&&S?.port;if("handleApplication"in E&&("start"in E||"startOnMainThread"in E||"handleFile"in E||"handleDirectory"in E||"setupFile"in E||"setupDirectory"in E)){let I=new Error(`Plugin ${m} is exporting old extension APIs. Remove them.`);throw ao.failed(p,I,`Component '${p}' failed to load`),I}if(t.isWorker&&E.handleApplication){E.suppressHandleApplicationWarning!==!0&&Oa.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new WR(m,e,l,t,Be);await U3(I,E),ao.loaded(p,`Component '${p}' loaded successfully`);continue}if(Bv.isMainThread&&(E=await E.startOnMainThread?.({server:Be,ensureTable:R,port:N,securePort:y,resources:t,...h})||E,n&&S))for(let I of[N,y])try{if(+I&&!L3.includes(I)){let $=Gv.get(F.HTTP_SESSIONAFFINITY);$&&Oa.default.warn("Session affinity is not recommended and may cause memory leaks"),($||!OS)&&(L3.push(I),hL(I,$))}}catch($){console.error("Error listening on socket",I,$,m)}if(t.isWorker&&(E=await E.start?.({server:Be,ensureTable:R,port:N,securePort:y,resources:t,...h})||E),Hv.set(E,!0),(E.handleFile||E.handleDirectory||E.setupFile||E.setupDirectory)&&h.files!=null){let I=new QR({config:h,name:m,directory:e,module:E,resources:t});d[m]=await O3(I)}ao.loaded(p,`Component '${p}' loaded successfully`)}catch(R){R.message=`Could not load component '${m}' for application '${(0,Wr.basename)(e)}' due to: ${R.message}`,XR?.(R),((0,kE.getWorkerIndex)()===0?console:Oa.default).error(R),t.set(h.path||"/",new ml(R),null,!0),ao.failed(p,R,`Could not load component '${p}'`)}}if(ZR=u,Bv.isMainThread&&!v3&&i&&(0,kE.watchDir)(e,async()=>M3()),c.extensionModule||c.pluginModule){let m=await IS((0,Wr.join)(e,c.extensionModule||c.pluginModule));return JR.set(o,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;XR?.(new Error(m)),((0,kE.getWorkerIndex)()===0?console:Oa.default).error(m),ao.failed((0,Wr.basename)(e),m)}for(let[m,p]of Object.entries(d))p||Oa.default.warn(`Component ${m} from (${(0,Wr.basename)(e)}) did not load any functionality.`)}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,XR?.(c),t.set("",new ml(c))}}var Vt,Wr,Bv,Fv,Gv,kv,Oa,kE,D3,tb,Uv,Hv,v3,xv,KAe,L3,JR,XR,ZR,vy,Zh=se(()=>{Vt=require("node:fs"),Wr=require("node:path"),Bv=require("node:worker_threads"),Fv=require("yaml"),Gv=b(me()),kv=b(yt());H();gq();Cq();qq();zq();jq();u$();mJ();pJ();EJ();Oa=b(J());RJ();kE=b(st());xN();Hr();we();_L();D3=b(me());xJ();Yy();VJ();Ss();s3();tb=b(gt());Zp();ZA();A3();P3();lL();fE();Mp();Sv();Uv=(0,tb.resolvePath)(Gv.get(F.COMPONENTSROOT)),Hv=new Map;a(M3,"loadComponentDirectories");KAe={REST:LS,rest:LS,graphql:CN,graphqlSchema:wN,roles:UN,jsResource:BN,fastifyRoutes:QD,login:kN,static:XD,operationsApi:tv,customFunctions:{},http:Dy,clustering:av,replication:ra,authentication:iE,mqtt:fv,loadEnv:ZD,logging:Oa.default,dataLoader:ev},L3=[],JR=new Map;a(YAe,"setErrorReporter");vy=a(()=>ZR,"getComponentName");a(WAe,"symlinkHarperModule");a(U3,"sequentiallyHandleApplication");a(eb,"loadComponent")});var By=M((l$e,x3)=>{var{isMainThread:qv}=require("worker_threads"),{getTables:zAe}=(we(),v(ft)),{loadComponentDirectories:jAe,loadComponent:QAe}=(Zh(),v(xy)),{resetResources:JAe}=(za(),v(eI)),XAe=gt(),{dirname:ZAe}=require("path"),{getConnection:eIe}=_r(),tIe=me(),{CONFIG_PARAMS:rIe}=(H(),v(z)),{loadCertificates:nIe}=ys(),{installApplications:sIe}=(Qy(),v(jy)),{loadAndWatchLicensesDir:iIe}=(zh(),v(wy)),$v=new Map;async function oIe(e=!1){!qv&&tIe.get(rIe.CLUSTERING_ENABLED)&&eIe();try{qv&&await sIe()}catch(n){console.error(n)}let t=JAe();zAe(),t.isWorker=e,qv&&iIe(),await nIe(),await QAe(ZAe(XAe.getConfigFilePath()),t,"hdb",!0,$v),await jAe($v,t);let r=[];for(let[n]of $v)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(oIe,"loadRootComponents");x3.exports.loadRootComponents=oIe});var st=M((d$e,Fi)=>{"use strict";Gb();var{Worker:aIe,MessageChannel:cIe,parentPort:No,isMainThread:zv,threadId:lIe,workerData:Co}=require("worker_threads"),{PACKAGE_ROOT:uIe}=yt(),{join:H3,isAbsolute:dIe,extname:fIe}=require("path"),{server:G3}=(Hr(),v(Tm)),{watch:mIe,readdir:pIe}=require("fs/promises"),{totalmem:B3}=require("os"),rm=(H(),v(z)),q3=me(),Bi=J(),{randomBytes:hIe}=require("crypto"),{_assignPackageExport:EIe}=ci(),F3=1024*1024,Pa=[],si=[],_Ie=50,jv=1e4,gIe="restart",$3="request_thread_info",V3="resource_report",K3="thread_info",Y3="added-port",SIe="ack",Vv;EIe("threads",si);Fi.exports={startWorker:Kv,restartWorkers:Jv,shutdownWorkers:X3,shutdownWorkersNow:AIe,workers:Pa,setMonitorListener:DIe,onMessageFromWorkers:IIe,onMessageByType:eX,broadcast:NIe,broadcastWithAcknowledgement:OIe,setChildListenerByType:bIe,getWorkerIndex:W3,getWorkerCount:z3,getTicketKeys:Q3,setMainIsWorker:yIe,setTerminateTimeout:TIe,restartNumber:Co?.restartNumber||1};si.onMessageByType=eX;si.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=si.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};Fi.exports.whenThreadsStarted=new Promise(e=>{Fi.exports.threadsHaveStarted=e});var Qv;function TIe(e){jv=e}a(TIe,"setTerminateTimeout");function W3(){return Co?Co.workerIndex:Qv?0:void 0}a(W3,"getWorkerIndex");function z3(){return Co?Co.workerCount:Qv?1:void 0}a(z3,"getWorkerCount");function yIe(e){Qv=e,Fi.exports.threadsHaveStarted()}a(yIe,"setMainIsWorker");var j3=1,rb;function Q3(){return rb||(rb=zv?hIe(48):Co.ticketKeys,rb)}a(Q3,"getTicketKeys");Object.defineProperty(G3,"workerIndex",{get(){return W3()}});Object.defineProperty(G3,"workerCount",{get(){return z3()}});var J3={[$3](e,t){PIe(t)},[V3](e,t){LIe(t,e)}};function Kv(e,t={}){let r=process.constrainedMemory?.()||B3();r=Math.min(r,B3(),2e4*F3);let n=q3.get(rm.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/F3/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let l of si){let u=new cIe;u.existingPort=l,i.push(u),o.push(u.port2)}fIe(e)||(e+=".js");let c=new aIe(dIe(e)?e:H3(uIe,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:j3=t.threadCount,name:t.name,restartNumber:Fi.exports.restartNumber,ticketKeys:Q3()},transferList:o,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:Y3,port:l,threadId:c.threadId},[l]);return sb(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>Kv(e,t),c.on("error",l=>{Bi.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{Pa.splice(Pa.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<_Ie?(t.unexpectedRestarts=c.unexpectedRestarts+1,Kv(e,t)):Bi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{J3[l.type]?.(l,c)}),Pa.push(c),MIe(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(Kv,"startWorker");var RIe=[rm.THREAD_TYPES.HTTP];async function Jv(e=null,t=Math.max(j3>3,1),r=!0){if(zv){try{process.chdir(process.cwd())}catch(o){Bi.error("Unable to reestablish current working directory",o)}if(r){let{loadRootComponents:o}=By();await o()}Fi.exports.restartNumber++,t<1&&(t=t*Pa.length);let n=[],s=[];for(let o of Pa.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Bi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Fi.exports.restartNumber,type:rm.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=RIe.indexOf(o.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate, terminating from the outside",o.threadId),o.terminate()},jv*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(f=>{let m=a(p=>{p.type===rm.ITC_EVENT_TYPES.CHILD_STARTED&&(Bi.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Bi.trace("Waiting for worker to start",u.threadId),u.on("message",m)});s.push(d),n.length>=t&&await Promise.race(n),s.length>=t&&await Promise.race(s)}}await Promise.all(n),await Promise.all(s);let{restartService:i}=Hf();r&&(e==="http"||!e)&&q3.get(rm.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else No.postMessage({type:gIe,workerType:e})}a(Jv,"restartWorkers");function bIe(e,t){J3[e]=t}a(bIe,"setChildListenerByType");function X3(e){return Jv(e,1/0,!1)}a(X3,"shutdownWorkers");function AIe(e){return X3(e),Promise.all(Pa.map(t=>t.terminate()))}a(AIe,"shutdownWorkersNow");var Z3=[];function IIe(e){Z3.push(e)}a(IIe,"onMessageFromWorkers");var Yv=new Map;function eX(e,t){let r=Yv.get(e);r||Yv.set(e,r=[]),r.push(t)}a(eX,"onMessageByType");var wIe=10;async function NIe(e,t){let r=0;for(let n of si)try{n.postMessage(e),r++>wIe&&(r=0,await new Promise(setImmediate))}catch(s){Bi.error("Unable to send message to worker",s)}t&&rX(e,null)}a(NIe,"broadcast");var nb=new Map,CIe=1;function OIe(e){return new Promise(t=>{let r=0;for(let n of si)try{let s=CIe++,i=a(()=>{nb.delete(s),--r===0&&t(),n!==No&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,nb.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of nb)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Bi.error("Unable to send message to worker",s)}r===0&&t()})}a(OIe,"broadcastWithAcknowledgement");function PIe(e){e.postMessage({type:K3,workers:tX()})}a(PIe,"sendThreadInfo");function tX(){let e=Date.now();return Pa.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(tX,"getChildWorkerInfo");function LIe(e,t){e.resources=t,e.resources.updated=Date.now()}a(LIe,"recordResourceReport");var Wv;function DIe(e){Wv=e}a(DIe,"setMonitorListener");var vIe=1e3,k3=!1;function MIe(){k3||(k3=!0,setInterval(()=>{for(let e of Pa){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}Wv&&Wv()},vIe).unref())}a(MIe,"startMonitoring");var UIe=1e3;if(No&&Co?.addPorts){sb(No);for(let e=0,t=Co.addPorts.length;e<t;e++){let r=Co.addPorts[e];r.threadId=Co.addThreadIds[e],sb(r)}setInterval(()=>{let e=process.memoryUsage();No.postMessage({type:V3,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},UIe).unref(),Vv=a(()=>new Promise((e,t)=>{No.on("message",r),No.postMessage({type:$3});function r(n){n.type===K3&&(No.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else Vv=tX;Fi.exports.getThreadInfo=Vv;function sb(e,t){si.push(e),e.on("message",r=>{if(r.type===Y3)r.port.threadId=r.threadId,sb(r.port);else if(r.type===SIe){let n=nb.get(r.id);n&&n()}else rX(r,e)}).on("close",()=>{si.splice(si.indexOf(e),1)}).on("exit",()=>{si.splice(si.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(sb,"addPort");function rX(e,t){for(let n of Z3)n(e,t);let r=Yv.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Bi.error(s)}}a(rX,"notifyMessageListeners");if(zv){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await pIe(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(H3(s,o.name));try{for await(let{filename:o}of mIe(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await Jv(),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)}},"watchDir");Fi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else No.on("message",async e=>{let{type:t}=e;t===rm.ITC_EVENT_TYPES.SHUTDOWN&&(Fi.exports.restartNumber=e.restartNumber,No.unref(),setTimeout(()=>{Bi.warn("Thread did not voluntarily terminate",lIe),process.exit(0)},jv).unref())})});var cX=M((h$e,aX)=>{"use strict";var{promises:nm,createReadStream:xIe,createWriteStream:BIe}=require("fs"),{createGzip:FIe}=require("zlib"),{promisify:kIe}=require("util"),{pipeline:HIe}=require("stream"),GIe=kIe(HIe),Zv=require("path"),oX=me();oX.initSync();var ib=J(),{CONFIG_PARAMS:qIe,ITC_EVENT_TYPES:m$e}=(H(),v(z)),{onMessageFromWorkers:p$e}=st(),{convertToMS:nX}=oe(),{onStorageReclamation:$Ie}=(V_(),v(Tx)),VIe=6e4,KIe="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",YIe="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",Xv,sX;aX.exports=WIe;function WIe({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:o}){if(s===!1)return;let c=0;if($Ie(e.path,f=>{c=f},!0),!t&&!r)throw new Error(KIe);if(!i)throw new Error(YIe);let l;if(t){let f=t.slice(-1),m=t.slice(0,-1);f==="G"?l=m*1e9:f==="M"?l=m*1e6:l=m*1e3}let u;r&&(u=nX(r));let d;return Xv=Date.now(),ib.trace("Log rotate enabled, maxSize:",t,"interval:",r),sX=setInterval(async()=>{if(l){let f;f=await nm.stat(e.path),f.size>=l&&(d=await iX(e.path,i))}if(u&&Date.now()-Xv>=u&&(d=await iX(e.path,i),Xv=Date.now()),n||c){let f=nX(n??"1M")/(1+c);c=0;let m=await nm.readdir(i);for(let p of m)try{let h=await nm.stat(Zv.join(i,p));Date.now()-h.mtimeMs>f&&await nm.unlink(Zv.join(i,p))}catch(h){ib.error("Error trying to remove log",p,h)}}},o??VIe).unref(),{end(){clearInterval(sX)},getLastRotatedLogPath(){return d}}}a(WIe,"logRotator");async function iX(e,t){let r=oX.get(qIe.LOGGING_ROTATION_COMPRESS),n=Zv.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await nm.rename(e,n),r&&(e=n,n+=".gz",await GIe(xIe(e),FIe(),BIe(n)),await nm.unlink(e)),ib.closeLogFile(),ib.notify(`hdb.log rotated, old log moved to ${n}`),n}a(iX,"moveLogFile")});var mX={};ye(mX,{RootConfigWatcher:()=>eM});var lX,uX,dX,ob,fX,eM,pX=se(()=>{lX=b(require("chokidar")),uX=require("node:fs/promises"),dX=b(gt()),ob=require("node:stream"),fX=require("yaml"),eM=class extends ob.EventEmitter{static{a(this,"RootConfigWatcher")}#e;#t;#r;ready;constructor(){super(),this.#e=(0,dX.getConfigFilePath)(),this.ready=(0,ob.once)(this,"ready"),this.#t=lX.default.watch(this.#e,{persistent:!1}).on("add",this.handleChange.bind(this)).on("change",this.handleChange.bind(this)).on("error",this.handleError.bind(this))}handleError(t){this.emit("error",t)}handleChange(){(0,uX.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,fX.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var J=M((T$e,pb)=>{"use strict";var La=require("fs-extra"),{workerData:zIe,threadId:jIe,isMainThread:TX}=require("worker_threads"),qE=require("path"),yX=require("yaml"),RX=require("properties-reader"),zr=(H(),v(z)),hX=Qc(),QIe=require("os"),{PACKAGE_ROOT:cM}=yt(),{_assignPackageExport:JIe}=ci(),{Console:XIe}=require("console"),rM=process.env.IS_SCRIPTED_SERVICE?function(){}:process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),EX=new Map,{join:Da}=qE,_X=1e4,cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},ZIe={STDOUT:"stdOut",STDERR:"stdErr"},S$e=Da(cM,"logs"),ewe=Da(cM,"config/yaml/",zr.HDB_DEFAULT_CONFIG_FILE),twe=1e4,$E,VE,ab,Oo,nM,tM,lb,Mt,es,ub,db,sm,GE,HE;function cb(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=qE.dirname(n)):t.root?n=Da(t.root,nM):(n=Mt.path,t.root||(t.root=qE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=cr[t.level]??Mt?.level??cr.info,bX(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Mt.path===e.path&&r)}a(cb,"updateLogger");function bX(e){let t=e.conditional??(e.conditional={});t.notify=cr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=cr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=cr.error>=e.level?e.error.bind(e):void 0,t.warn=cr.warn>=e.level?e.warn.bind(e):void 0,t.info=cr.info>=e.level?e.info.bind(e):void 0,t.debug=cr.debug>=e.level?e.debug.bind(e):void 0,t.trace=cr.trace>=e.level?e.trace.bind(e):void 0}a(bX,"updateConditional");async function sM(){HE||(HE=new ywe,await HE.ready,HE.on("change",sM));let e=HE.config,t=e.logging??{};cb(Mt,t),lb=Mt.path,$E=t.console??!1,t.external&&cb(es,t.external);for(let r in e){let n=e[r];n.logging?cb(Mt.forComponent(r),n.logging,r):Mt.hasComponent(r)&&cb(Mt.forComponent(r),t,r)}}a(sM,"updateLogSettings");var iM=class extends XIe{static{a(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){On="trace",this.level<=cr.trace&&super.info(...t),On="info"}debug(...t){On="debug",this.level<=cr.debug&&super.info(...t),On="info"}info(...t){On="info",this.level<=cr.info&&super.info(...t),On="info"}warn(...t){On="warn",this.level<=cr.warn&&super.warn(...t),On="info"}error(...t){On="error",this.level<=cr.error&&super.error(...t),On="info"}fatal(...t){sm=!0;try{On="fatal",this.level<=cr.fatal&&super.error(...t),On="info"}finally{sm=!1}}notify(...t){sm=!0;try{On="notify",this.level<=cr.notify&&super.info(...t),On="info"}finally{sm=!1}}withTag(t){return IX(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};GE===void 0&&AX();pb.exports={notify:uwe,fatal:dwe,error:aM,warn:fwe,info:awe,debug:lwe,trace:cwe,logLevel:Oo,loggerWithTag:IX,suppressLogging:iwe,initLogSettings:AX,logCustomLevel:mwe,closeLogFile:wX,createLogger:mb,logsAtLevel:nwe,getLogFilePath:a(()=>lb,"getLogFilePath"),forComponent:a(e=>Mt.forComponent(e),"forComponent"),setMainLogger:Swe,setLogLevel:hwe,OUTPUTS:ZIe,AuthAuditLog:Twe,start:sM,startOnMainThread:sM,errorToString:gwe,disableStdio:rwe};function rwe(){rM=a(function(){},"nativeStdWrite")}a(rwe,"disableStdio");pb.exports.externalLogger={notify(...e){es.notify(...e)},fatal(...e){es.fatal(...e)},error(...e){es.error(...e)},warn(...e){es.warn(...e)},info(...e){es.info(...e)},debug(...e){es.debug(...e)},trace(...e){es.trace(...e)},withTag(e){return es.withTag(e)},loggerWithTag(e){return es.withTag(e)}};JIe("logger",pb.exports.externalLogger);function nwe(e){return cr[Oo]<=cr[e]}a(nwe,"logsAtLevel");function AX(e=!1){try{if(GE===void 0||e){wX();let t=pwe(),r=hX(["ROOTPATH"]);try{GE=RX(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!La.pathExistsSync(Da(r.ROOTPATH,zr.HDB_CONFIG_FILE)))throw s}let n;if({level:Oo,configLogPath:tM,toFile:VE,logConsole:$E,rotation:n,toStream:ab}=Ewe(r.ROOTPATH?Da(r.ROOTPATH,zr.HDB_CONFIG_FILE):GE.get("settings_path")),nM=zr.LOG_NAMES.HDB,lb=Da(tM,nM),Mt=mb({path:lb,level:Oo,stdStreams:ab,rotation:n}),es=Mt.forComponent("external"),es.tag=null,TX)try{require("segfault-handler").registerHandler(Da(tM,"crash.log"))}catch{}}}catch(t){if(GE=void 0,t.code===zr.NODE_ERROR_CODES.ENOENT||t.code===zr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=hX(Object.keys(zr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=zr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let o=r[s];if(i===zr.CONFIG_PARAMS.LOGGING_LEVEL){Oo=o;continue}i===zr.CONFIG_PARAMS.LOGGING_CONSOLE&&($E=i)}let{defaultLevel:n}=_we();VE=!1,ab=!0,Oo=Oo===void 0?n:Oo,Mt=mb({level:Oo}),es=Mt.forComponent("external"),es.tag=null;return}throw aM("Error initializing log settings"),aM(t),t}process.env.DEV_MODE&&(ab=!0),swe()}a(AX,"initLogSettings");var Vc=!0;function swe(){VE&&(process.stdout.write=function(e){return typeof e=="string"&&Vc&&$E&&(e=e.toString(),e[e.length-1]===`
132
132
  `&&(e=e.slice(0,-1)),db(e)),rM.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Vc&&$E&&(e[e.length-1]===`
133
133
  `&&(e=e.slice(0,-1)),db(e)),rM.apply(process.stderr,arguments)})}a(swe,"stdioLogging");function IX(e,t,r=Mt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=cr[i]?function(...o){fb=e;try{return s.call(r,...o)}finally{fb=void 0}}:null}a(n,"logWithTag")}a(IX,"loggerWithTag");function iwe(e){try{Vc=!1,e()}finally{Vc=!0}}a(iwe,"suppressLogging");var owe=zIe?.name?.replace(/ /g,"-")||"main",On="info",oM,fb;function mb({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:o}){t||(t="info");let c=cr[t],l;function u(p){if(VE)if(l.logToStdstreams){f(p.replace(/\x1b\[[0-9;]*m/g,"")),Vc=!1;try{process.stdout.write(p)}finally{Vc=!0}}else f(p);else r&&process.stdout.write(p)}a(u,"logStdOut");function d(p){if(VE){if(f(p),r){Vc=!1;try{process.stderr.write(p)}finally{Vc=!0}}}else r&&process.stderr.write(p)}a(d,"logStdErr");let f=e&&SX(e,n,s);function m(p){return{write(h){let E=[On];E.unshift(oM||owe+"/"+jIe),fb&&E.push(fb),l.tag&&E.push(l.tag),p(`[${E.join("] [")}]: ${h}`)}}}if(a(m,"logPrepend"),s&&(db=f),l=new iM({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),bX(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(p){e=p,f=SX(e,l.rotation,s),s&&(db=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!o){let p=new Map;l.forComponent=function(h){let E=p.get(h);return E||(E=mb({path:e,level:t,stdStreams:r,isExternalInstance:h==="external",rotation:n,writeToLog:i,component:!0}),p.set(h,E)),E},l.hasComponent=function(h){return p.has(h)}}return l}a(mb,"createLogger");var gX=100;function SX(e,t,r){let n=EX.get(e),s,i,o,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,EX.set(e,n)),TX&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let h=cX();try{n.rotator=h({logger:n,...t})}catch(E){n("Error initializing log rotator",E)}},100));let u=0;return n;function d(h){u++;let E=`${new Date().toISOString()} ${h}${h.endsWith(`
134
134
  `)?"":`
135
135
  `}`;c?(c.length<_X?c.push(E):c.length===_X&&c.push(`Maximum log buffer rate reached, logs will be throttled
136
- `),sm&&(clearTimeout(o),f())):sm||l<performance.now()+gX?f(E):(l=Math.min(l,performance.now()+gX),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();La.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{La.closeSync(s)}catch{}s=null,r&&(ub=null)}function p(h){if(!s){try{s=La.openSync(e,"a"),r&&(ub=s)}catch(E){if(E.code==="ENOENT"&&!h)return La.mkdirpSync(qE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},twe).unref()}}}a(SX,"getFileLogger");function awe(...e){Mt.info(...e)}a(awe,"info");function cwe(...e){Mt.trace(...e)}a(cwe,"trace");function aM(...e){Mt.error(...e)}a(aM,"error");function lwe(...e){Mt.debug(...e)}a(lwe,"debug");function uwe(...e){Mt.notify(...e)}a(uwe,"notify");function dwe(...e){Mt.fatal(...e)}a(dwe,"fatal");function fwe(...e){Mt.warn(...e)}a(fwe,"warn");function mwe(e,t,r,...n){oM=r.service_name;try{Mt[e](...n)}finally{oM=void 0}}a(mwe,"logCustomLevel");function pwe(){let e;try{e=QIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Da(e,zr.HDB_HOME_DIR_NAME,zr.BOOT_PROPS_FILE_NAME);return La.existsSync(t)||(t=Da(cM,"utility/hdb_boot_properties.file")),t}a(pwe,"getPropsFilePath");function hwe(e){Oo=e}a(hwe,"setLogLevel");function Ewe(e){try{if(e.includes("config/settings.js")){let l=RX(e);return{level:l.get(zr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:qE.dirname(l.get(zr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(zr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(zr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=yX.parseDocument(La.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),o=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,rotation:c}}catch(t){if(t.code===zr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Ewe,"getLogConfig");function _we(){try{let e=yX.parseDocument(La.readFileSync(ewe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(_we,"getDefaultConfig");function gwe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(gwe,"errorToString");function Swe(e){Mt=e}a(Swe,"setMainLogger");function wX(){try{La.closeSync(ub)}catch{}ub=null}a(wX,"closeLogFile");function Twe(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(Twe,"AuthAuditLog");var{RootConfigWatcher:ywe}=(pX(),v(mX))});var me=M((PX,LX)=>{"use strict";var lM=require("fs-extra"),yu=require("path"),NX=require("os"),Rwe=require("properties-reader"),YE=J(),KE=oe(),Ge=(H(),v(z)),hb=gt(),bwe="Error initializing environment manager",Eb="BOOT_PROPS_FILE_PATH",CX=!1,Awe={[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},va={};Object.assign(PX,LX.exports={BOOT_PROPS_FILE_PATH:Eb,getHdbBasePath:Iwe,setHdbBasePath:wwe,get:OX,initSync:Cwe,setProperty:tt,initTestEnvironment:Owe});function Iwe(){return va[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Iwe,"getHdbBasePath");function wwe(e){va[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(wwe,"setHdbBasePath");function OX(e){let t=hb.getConfigValue(e);return t===void 0?va[e]:t}a(OX,"get");function tt(e,t){Awe[e]&&(va[e]=t),hb.updateConfigObject(e,t)}a(tt,"setProperty");function Nwe(){let e;try{e=KE.getPropsFilePath(),lM.accessSync(e,lM.constants.F_OK|lM.constants.R_OK),CX=!0;let t=Rwe(e);return va[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ge.HDB_SETTINGS_NAMES.INSTALL_USER),va[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),va[Eb]=e,!0}catch{return YE.trace(`Environment manager found no properties file at ${e}`),!1}}a(Nwe,"doesPropFileExist");function Cwe(e=!1){try{(CX||Nwe()||KE.noBootFile()||e)&&(hb.initConfig(e),va[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=hb.getConfigValue(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){YE.error(bwe),YE.error(t),console.error(t),process.exit(1)}}a(Cwe,"initSync");function Owe(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=yu.join(__dirname,"../../","unitTests");va[Eb]=yu.join(l,"hdb_boot_properties.file"),tt(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,yu.join(l,"settings.test")),tt(Ge.HDB_SETTINGS_NAMES.INSTALL_USER,NX.userInfo()?NX.userInfo().username:void 0),tt(Ge.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),tt(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY,yu.join(l,"envDir","log")),tt(Ge.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),tt(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,yu.join(l,"envDir")),tt(Ge.CONFIG_PARAMS.STORAGE_PATH,yu.join(l,"envDir")),s&&(tt(Ge.CONFIG_PARAMS.HTTP_SECUREPORT,OX(Ge.CONFIG_PARAMS.HTTP_PORT)),tt(Ge.CONFIG_PARAMS.HTTP_PORT,null)),tt(Ge.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),tt(Ge.CONFIG_PARAMS.HTTP_PORT,9926),tt(Ge.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),tt(Ge.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),tt(Ge.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,KE.isEmpty(i)?!1:i),tt(Ge.CONFIG_PARAMS.HTTP_CORS,KE.isEmpty(i)?!1:i),tt(Ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),tt(Ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),tt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,yu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),tt(Ge.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,KE.isEmpty(c)?!1:c),o&&(tt("CORS_ACCESSLIST",o),tt(Ge.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),tt(Ge.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),tt(Ge.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(tt(Ge.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),tt(Ge.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Eb}. Please check your boot props and settings files`;YE.fatal(r),YE.error(t)}}a(Owe,"initTestEnvironment")});var _r=M((C$e,zX)=>{"use strict";var jr=me();jr.initSync();var Pwe=require("fs-extra"),Lwe=require("semver"),jE=require("path"),{monotonicFactory:Dwe}=require("ulidx"),vX=Dwe(),vwe=require("util"),MX=require("child_process"),Mwe=vwe.promisify(MX.exec),Uwe=MX.spawn,mn=Ct(),rt=(H(),v(z)),{packageJson:xwe,PACKAGE_ROOT:Bwe}=yt(),_b=oe(),ki=J(),gb=no(),Fwe=mR(),WE=gt(),{broadcast:kwe,onMessageByType:Hwe,getWorkerIndex:Gwe}=nt(),{isMainThread:UX}=require("worker_threads"),{Encoder:qwe,decode:mM}=require("msgpackr"),xX=new qwe,{isEmpty:Iu}=_b,BX=Es(),b$e=48*36e11;UX&&Hwe(rt.ITC_EVENT_TYPES.RESTART,()=>{Pn=void 0,Au=void 0});var{connect:$we,StorageType:Vwe,RetentionPolicy:Kwe,AckPolicy:pM,DeliverPolicy:hM,DiscardPolicy:Ywe,NatsConnection:A$e,JetStreamManager:I$e,JetStreamClient:w$e,StringCodec:N$e,JSONCodec:Wwe,createInbox:EM,headers:zwe,ErrorCode:DX}=require("nats"),{recordAction:jwe}=(is(),v(ng)),{encodeBlobsAsBuffers:Qwe}=(ss(),v(H_)),FX=Wwe(),Jwe="clustering",Xwe=xwe.engines[mn.NATS_SERVER_NAME],Zwe=jE.join(Bwe,"dependencies"),fM=jE.join(Zwe,`${process.platform}-${process.arch}`,mn.NATS_BINARY_NAME),uM,dM,zE,Ru,bu;zX.exports={runCommand:kX,checkNATSServerInstalled:eNe,createConnection:_M,getConnection:QE,getJetStreamManager:JE,getJetStream:GX,getNATSReferences:Po,getServerList:rNe,createLocalStream:gM,listStreams:qX,deleteLocalStream:nNe,getServerConfig:im,listRemoteStreams:sNe,viewStream:iNe,viewStreamIterator:oNe,publishToStream:aNe,request:uNe,reloadNATS:SM,reloadNATSHub:dNe,reloadNATSLeaf:fNe,extractServerName:lNe,requestErrorHandler:mNe,createLocalTableStream:YX,createTableStreams:ENe,purgeTableStream:WX,purgeSchemaTableStreams:_Ne,getStreamInfo:gNe,updateLocalStreams:TNe,closeConnection:tNe,getJsmServerName:Sb,addNatsMsgHeader:$X,clearClientCache:HX,updateRemoteConsumer:pNe,createConsumer:VX,updateConsumerIterator:hNe};async function kX(e,t=void 0){let{stdout:r,stderr:n}=await Mwe(e,{cwd:t});if(n)throw new Error(n.replace(`
136
+ `),sm&&(clearTimeout(o),f())):sm||l<performance.now()+gX?f(E):(l=Math.min(l,performance.now()+gX),c=[E],o=setTimeout(f,1))}function f(h){if(p(),s){let E=performance.now();La.appendFileSync(s,c?c.join(""):h);let g=performance.now();l=Math.max(g,l)+(g-E)*50}else i||console.log(c?c.join(""):h);c&&(c=null)}function m(){try{La.closeSync(s)}catch{}s=null,r&&(ub=null)}function p(h){if(!s){try{s=La.openSync(e,"a"),r&&(ub=s)}catch(E){if(E.code==="ENOENT"&&!h)return La.mkdirpSync(qE.dirname(e)),p(!0);i||(i=!0,console.error(E))}setTimeout(()=>{m()},twe).unref()}}}a(SX,"getFileLogger");function awe(...e){Mt.info(...e)}a(awe,"info");function cwe(...e){Mt.trace(...e)}a(cwe,"trace");function aM(...e){Mt.error(...e)}a(aM,"error");function lwe(...e){Mt.debug(...e)}a(lwe,"debug");function uwe(...e){Mt.notify(...e)}a(uwe,"notify");function dwe(...e){Mt.fatal(...e)}a(dwe,"fatal");function fwe(...e){Mt.warn(...e)}a(fwe,"warn");function mwe(e,t,r,...n){oM=r.service_name;try{Mt[e](...n)}finally{oM=void 0}}a(mwe,"logCustomLevel");function pwe(){let e;try{e=QIe.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Da(e,zr.HDB_HOME_DIR_NAME,zr.BOOT_PROPS_FILE_NAME);return La.existsSync(t)||(t=Da(cM,"utility/hdb_boot_properties.file")),t}a(pwe,"getPropsFilePath");function hwe(e){Oo=e}a(hwe,"setLogLevel");function Ewe(e){try{if(e.includes("config/settings.js")){let l=RX(e);return{level:l.get(zr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:qE.dirname(l.get(zr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(zr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(zr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=yX.parseDocument(La.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),o=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:o,rotation:c}}catch(t){if(t.code===zr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Ewe,"getLogConfig");function _we(){try{let e=yX.parseDocument(La.readFileSync(ewe,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(_we,"getDefaultConfig");function gwe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}a(gwe,"errorToString");function Swe(e){Mt=e}a(Swe,"setMainLogger");function wX(){try{La.closeSync(ub)}catch{}ub=null}a(wX,"closeLogFile");function Twe(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(Twe,"AuthAuditLog");var{RootConfigWatcher:ywe}=(pX(),v(mX))});var me=M((PX,LX)=>{"use strict";var lM=require("fs-extra"),yu=require("path"),NX=require("os"),Rwe=require("properties-reader"),YE=J(),KE=oe(),Ge=(H(),v(z)),hb=gt(),bwe="Error initializing environment manager",Eb="BOOT_PROPS_FILE_PATH",CX=!1,Awe={[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},va={};Object.assign(PX,LX.exports={BOOT_PROPS_FILE_PATH:Eb,getHdbBasePath:Iwe,setHdbBasePath:wwe,get:OX,initSync:Cwe,setProperty:rt,initTestEnvironment:Owe});function Iwe(){return va[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Iwe,"getHdbBasePath");function wwe(e){va[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(wwe,"setHdbBasePath");function OX(e){let t=hb.getConfigValue(e);return t===void 0?va[e]:t}a(OX,"get");function rt(e,t){Awe[e]&&(va[e]=t),hb.updateConfigObject(e,t)}a(rt,"setProperty");function Nwe(){let e;try{e=KE.getPropsFilePath(),lM.accessSync(e,lM.constants.F_OK|lM.constants.R_OK),CX=!0;let t=Rwe(e);return va[Ge.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ge.HDB_SETTINGS_NAMES.INSTALL_USER),va[Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),va[Eb]=e,!0}catch{return YE.trace(`Environment manager found no properties file at ${e}`),!1}}a(Nwe,"doesPropFileExist");function Cwe(e=!1){try{(CX||Nwe()||KE.noBootFile()||e)&&(hb.initConfig(e),va[Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=hb.getConfigValue(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){YE.error(bwe),YE.error(t),console.error(t),process.exit(1)}}a(Cwe,"initSync");function Owe(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=yu.join(__dirname,"../../","unitTests");va[Eb]=yu.join(l,"hdb_boot_properties.file"),rt(Ge.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,yu.join(l,"settings.test")),rt(Ge.HDB_SETTINGS_NAMES.INSTALL_USER,NX.userInfo()?NX.userInfo().username:void 0),rt(Ge.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),rt(Ge.HDB_SETTINGS_NAMES.LOG_PATH_KEY,yu.join(l,"envDir","log")),rt(Ge.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),rt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),rt(Ge.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),rt(Ge.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,yu.join(l,"envDir")),rt(Ge.CONFIG_PARAMS.STORAGE_PATH,yu.join(l,"envDir")),s&&(rt(Ge.CONFIG_PARAMS.HTTP_SECUREPORT,OX(Ge.CONFIG_PARAMS.HTTP_PORT)),rt(Ge.CONFIG_PARAMS.HTTP_PORT,null)),rt(Ge.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),rt(Ge.CONFIG_PARAMS.HTTP_PORT,9926),rt(Ge.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),rt(Ge.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),rt(Ge.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,KE.isEmpty(i)?!1:i),rt(Ge.CONFIG_PARAMS.HTTP_CORS,KE.isEmpty(i)?!1:i),rt(Ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),rt(Ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),rt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),rt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),rt(Ge.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,yu.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),rt(Ge.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,KE.isEmpty(c)?!1:c),o&&(rt("CORS_ACCESSLIST",o),rt(Ge.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(rt(Ge.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),rt(Ge.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(rt(Ge.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),rt(Ge.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(rt(Ge.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),rt(Ge.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Eb}. Please check your boot props and settings files`;YE.fatal(r),YE.error(t)}}a(Owe,"initTestEnvironment")});var _r=M((C$e,zX)=>{"use strict";var jr=me();jr.initSync();var Pwe=require("fs-extra"),Lwe=require("semver"),jE=require("path"),{monotonicFactory:Dwe}=require("ulidx"),vX=Dwe(),vwe=require("util"),MX=require("child_process"),Mwe=vwe.promisify(MX.exec),Uwe=MX.spawn,mn=Ct(),nt=(H(),v(z)),{packageJson:xwe,PACKAGE_ROOT:Bwe}=yt(),_b=oe(),ki=J(),gb=no(),Fwe=mR(),WE=gt(),{broadcast:kwe,onMessageByType:Hwe,getWorkerIndex:Gwe}=st(),{isMainThread:UX}=require("worker_threads"),{Encoder:qwe,decode:mM}=require("msgpackr"),xX=new qwe,{isEmpty:Iu}=_b,BX=Es(),b$e=48*36e11;UX&&Hwe(nt.ITC_EVENT_TYPES.RESTART,()=>{Pn=void 0,Au=void 0});var{connect:$we,StorageType:Vwe,RetentionPolicy:Kwe,AckPolicy:pM,DeliverPolicy:hM,DiscardPolicy:Ywe,NatsConnection:A$e,JetStreamManager:I$e,JetStreamClient:w$e,StringCodec:N$e,JSONCodec:Wwe,createInbox:EM,headers:zwe,ErrorCode:DX}=require("nats"),{recordAction:jwe}=(is(),v(ng)),{encodeBlobsAsBuffers:Qwe}=(ss(),v(H_)),FX=Wwe(),Jwe="clustering",Xwe=xwe.engines[mn.NATS_SERVER_NAME],Zwe=jE.join(Bwe,"dependencies"),fM=jE.join(Zwe,`${process.platform}-${process.arch}`,mn.NATS_BINARY_NAME),uM,dM,zE,Ru,bu;zX.exports={runCommand:kX,checkNATSServerInstalled:eNe,createConnection:_M,getConnection:QE,getJetStreamManager:JE,getJetStream:GX,getNATSReferences:Po,getServerList:rNe,createLocalStream:gM,listStreams:qX,deleteLocalStream:nNe,getServerConfig:im,listRemoteStreams:sNe,viewStream:iNe,viewStreamIterator:oNe,publishToStream:aNe,request:uNe,reloadNATS:SM,reloadNATSHub:dNe,reloadNATSLeaf:fNe,extractServerName:lNe,requestErrorHandler:mNe,createLocalTableStream:YX,createTableStreams:ENe,purgeTableStream:WX,purgeSchemaTableStreams:_Ne,getStreamInfo:gNe,updateLocalStreams:TNe,closeConnection:tNe,getJsmServerName:Sb,addNatsMsgHeader:$X,clearClientCache:HX,updateRemoteConsumer:pNe,createConsumer:VX,updateConsumerIterator:hNe};async function kX(e,t=void 0){let{stdout:r,stderr:n}=await Mwe(e,{cwd:t});if(n)throw new Error(n.replace(`
137
137
  `,""));return r.replace(`
138
- `,"")}a(kX,"runCommand");async function eNe(){try{await Pwe.access(fM)}catch{return!1}let e=await kX(`${fM} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Lwe.eq(t,Xwe)}a(eNe,"checkNATSServerInstalled");async function _M(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await BX.getClusterUser();if(Iu(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}ki.trace("create nats connection called");let i=await $we({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:jr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:jr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:jr.get(rt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),ki.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&ki.error("Error with Nats client connection, connection closed",o),i===Pn&&HX()}),i}a(_M,"createConnection");function HX(){Pn=void 0,Ru=void 0,bu=void 0,Au=void 0}a(HX,"clearClientCache");async function tNe(){Pn&&(await Pn.drain(),Pn=void 0,Ru=void 0,bu=void 0,Au=void 0)}a(tNe,"closeConnection");var Pn,Au;async function QE(){return Au||(Au=_M(jr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pn=await Au),Pn||Au}a(QE,"getConnection");async function JE(){if(Ru)return Ru;Iu(Pn)&&await QE();let{domain:e}=im(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Iu(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ru=await Pn.jetstreamManager({domain:e,timeout:6e4}),Ru}a(JE,"getJetStreamManager");async function GX(){if(bu)return bu;Iu(Pn)&&await QE();let{domain:e}=im(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Iu(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return bu=Pn.jetstream({domain:e,timeout:6e4}),bu}a(GX,"getJetStream");async function Po(){let e=Pn||await QE(),t=Ru||await JE(),r=bu||await GX();return{connection:e,jsm:t,js:r}}a(Po,"getNATSReferences");async function rNe(e){let t=jr.get(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await BX.getClusterUser(),s=await _M(t,r,n),i=EM(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=FX.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await _b.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(rNe,"getServerList");async function gM(e,t){let{jsm:r}=await Po(),n=jr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=jr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Vwe.File,retention:Kwe.Limits,subjects:t,discard:Ywe.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(gM,"createLocalStream");async function qX(){let{jsm:e}=await Po(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(qX,"listStreams");async function nNe(e){let{jsm:t}=await Po();await t.streams.delete(e)}a(nNe,"deleteLocalStream");async function sNe(e){let{connection:t}=await Po(),r=[],n=EM(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(FX.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(sNe,"listRemoteStreams");async function iNe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Po(),i=vX(),o={durable_name:i,ack_policy:pM.Explicit};t&&(o.deliver_policy=hM.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=mM(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(mn.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(iNe,"viewStream");async function*oNe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Po(),i=vX(),o={durable_name:i,ack_policy:pM.Explicit};t&&(o.deliver_policy=hM.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=mM(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(mn.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(oNe,"viewStreamIterator");async function aNe(e,t,r,n){ki.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=$X(n,r);let{js:s}=await Po(),i=await Sb(),o=`${e}.${i}`,c=await Qwe(()=>n instanceof Uint8Array?n:xX.encode(n));try{ki.trace(`publishToStream publishing to subject: ${o}`),jwe(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 KX(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){ki.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await gM(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(aNe,"publishToStream");function $X(e,t){t===void 0&&(t=zwe());let r=jr.get(rt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(mn.MSG_HEADERS.ORIGIN)&&r&&t.append(mn.MSG_HEADERS.ORIGIN,r),t}a($X,"addNatsMsgHeader");function im(e){e=e.toLowerCase();let t=jE.join(jr.get(rt.CONFIG_PARAMS.ROOTPATH),Jwe);if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Iu(dM)&&(dM={port:WE.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:WE.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.HUB,config_file:mn.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:jE.join(t,mn.PID_FILES.HUB),hdbNatsPath:t}),dM;if(e===rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Iu(uM)&&(uM={port:WE.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:WE.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.LEAF,config_file:mn.NATS_CONFIG_FILES.LEAF_SERVER,domain:WE.getConfigFromFile(rt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.LEAF,pid_file_path:jE.join(t,mn.PID_FILES.LEAF),hdbNatsPath:t}),uM;ki.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(im,"getServerConfig");async function VX(e,t,r,n){try{await e.consumers.add(t,{ack_policy:pM.Explicit,durable_name:r,deliver_policy:hM.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(VX,"createConsumer");async function cNe(e,t,r){await e.consumers.delete(t,r)}a(cNe,"removeConsumer");function lNe(e){return e.split(".")[1]}a(lNe,"extractServerName");async function uNe(e,t,r=6e4,n=EM()){if(!_b.isObject(t))throw new Error("data param must be an object");let s=xX.encode(t),{connection:i}=await Po(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return mM(c.data)}a(uNe,"request");function SM(e){return new Promise(async(t,r)=>{let n=Uwe(fM,["--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(SM,"reloadNATS");async function dNe(){let{pid_file_path:e}=im(rt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await SM(e)}a(dNe,"reloadNATSHub");async function fNe(){let{pid_file_path:e}=im(rt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await SM(e)}a(fNe,"reloadNATSLeaf");function mNe(e,t,r){let n;switch(e.code){case DX.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case DX.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(mNe,"requestErrorHandler");async function pNe(e,t){let r=t+mn.SERVER_SUFFIX.LEAF,{connection:n}=await Po(),{jsm:s}=await RNe(r),{schema:i,table:o}=e,c=gb.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await KX(async()=>{if(e.subscribe===!0)await VX(s,c,n.info.server_name,l);else try{await cNe(s,c,n.info.server_name)}catch(u){ki.trace(u)}})}a(pNe,"updateRemoteConsumer");async function hNe(e,t,r,n){let s=gb.createNatsTableStreamName(e,t),i=r+mn.SERVER_SUFFIX.LEAF,o={type:rt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!UX&&Gwe()<jr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=vR();await c(o)}await kwe(o),n==="stop"&&await _b.asyncSetTimeout(1e3)}a(hNe,"updateConsumerIterator");function KX(e){return Fwe.writeTransaction(rt.SYSTEM_SCHEMA_NAME,rt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(KX,"exclusiveLock");async function YX(e,t){let r=gb.createNatsTableStreamName(e,t),n=await Sb(),s=SNe(e,t,n);await gM(r,[s])}a(YX,"createLocalTableStream");async function ENe(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await YX(n,s)}}a(ENe,"createTableStreams");async function WX(e,t,r=void 0){if(jr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=gb.createNatsTableStreamName(e,t),{domain:s}=im(rt.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")ki.warn(n);else throw n}}a(WX,"purgeTableStream");async function _Ne(e,t){if(jr.get(rt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await WX(e,t[r])}a(_Ne,"purgeSchemaTableStreams");async function gNe(e){return(await JE()).streams.info(e)}a(gNe,"getStreamInfo");function SNe(e,t,r){return`${mn.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(SNe,"createSubjectName");async function Sb(){if(zE)return zE;if(zE=(await JE())?.nc?.info?.server_name,zE===void 0)throw new Error("Unable to get jetstream manager server name");return zE}a(Sb,"getJsmServerName");async function TNe(){let e=await JE(),t=await Sb(),r=await qX();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=yNe(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(".");ki.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(TNe,"updateLocalStreams");function yNe(e){let{config:t}=e,r=!1,n=jr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=jr.get(rt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(yNe,"updateStreamLimits");async function RNe(e){let t,r;try{t=await Pn.jetstream({domain:e}),r=await Pn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw ki.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(RNe,"connectToRemoteJS")});var vR=M((v$e,o6)=>{"use strict";var{decode:bNe}=require("msgpackr"),{isMainThread:P$e,parentPort:L$e,threadId:D$e}=require("worker_threads"),Rb=_r(),om=Ct(),RM=(H(),v(z)),Ln=J(),yM=me(),ANe=(H(),v(z)),{onMessageByType:INe}=nt(),XX=no(),{recordAction:jX,recordActionBinary:wNe}=(is(),v(ng)),{publishToStream:NNe}=Rb,{ConsumerEvents:QX}=require("nats"),CNe=gn(),{promisify:ONe}=require("util"),{decodeBlobsWithWrites:PNe}=(ss(),v(H_)),ZX=ONe(setTimeout),bb=1e4,Ab,yb,LNe,DNe,e6,XE=new Map,am=new Map;o6.exports={initialize:t6,ingestConsumer:bM,setSubscription:vNe,setIgnoreOrigin:xNe,getDatabaseSubscriptions:UNe,updateConsumer:r6};async function t6(){INe(RM.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await r6(n)}),e6=!0,Ln.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Rb.getNATSReferences();Ab=e,yb=e.info.server_name,LNe=t,DNe=r}a(t6,"initialize");async function r6(e){if(e.status==="start"){let{js:t,jsm:r}=await n6(e.node_domain_name);bM(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=XE.get(e.stream_name+e.node_domain_name);t&&(Ln.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),XE.set(e.stream_name+e.node_domain_name,"close")),am.get(e.node_domain_name)==="failed"&&am.set(e.node_domain_name,"close")}}a(r6,"updateConsumer");var Ib=new Map;function vNe(e,t,r){let n=Ib.get(e);n||Ib.set(e,n=new Map),n.set(t,r),e6||t6().then(MNe)}a(vNe,"setSubscription");async function MNe(){let e=await CNe.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+om.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await n6(r),!n))break;let{schema:o,table:c}=i,l=XX.createNatsTableStreamName(o,c);bM(l,n,s,r)}}}a(MNe,"accessConsumers");async function n6(e){let t,r,n=1;for(;!r;)try{t=await Ab.jetstream({domain:e}),r=await Ab.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(am.get(e)==="close")break;am.set(e,"failed"),n%10===1&&Ln.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<bb?n++*100:bb;await ZX(i)}return{js:t,jsm:r}}a(n6,"connectToRemoteJS");function UNe(){return Ib}a(UNe,"getDatabaseSubscriptions");var s6;function xNe(e){s6=e}a(xNe,"setIgnoreOrigin");var i6=100,JX=new Array(i6),Tb=0;async function bM(e,t,r,n){let{connection:s}=await Rb.getNATSReferences();Ab=s,yb=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,yb),Ln.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(am.get(n)==="close")break;o%10===1&&Ln.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Ln.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Rb.createConsumer(r,e,yb,new Date(Date.now()).toISOString()));let d=o++*100<bb?o++*100:bb;await ZX(d)}let c=!1,l;for(;!c;){if(XE.get(e+n)==="close"||am.get(n)==="close"){XE.delete(e+n),c=!0;continue}l=await i.consume({max_messages:yM.get(RM.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),XE.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===QX.ConsumerDeleted&&(await l.close(),c=!0),d.type===QX.HeartbeatsMissed){let f=d.data;Ln.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Ln.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 JX[Tb],JX[Tb]=BNe(d).catch(f=>{Ln.error(f)}),++Tb>=i6&&(Tb=0)}catch(d){d.message==="consumer deleted"?(Ln.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Ln.error("Error consuming clustering ingest, restarting consumer",d)}}}a(bM,"ingestConsumer");async function BNe(e){let t;await PNe(()=>{t=bNe(e.data)}),jX(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Ln.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=yM.get(RM.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(om.MSG_HEADERS.TRANSACTED_NODES)&&r.values(om.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(om.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!s6),wNe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(om.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;Ln.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Ln.trace(`messageProcessor nats msg id: ${e.headers.get(om.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:g,user:R,node_name:S}=m||{},y=Ib.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:TM(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map(($,ee)=>({type:TM(o),value:$,expiresAt:p,id:f?.[ee],table:u}));for(;l;)I.push({type:TM(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:g,onCommit:h,user:R,nodeName:S})}yM.get(ANe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&NNe(e.subject.split(".").slice(0,-1).join("."),XX.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&jX(N,"replication-latency",e.subject,o,"ingest")}catch(o){Ln.error(o)}e.ack()}a(BNe,"messageProcessor");function TM(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(TM,"convertOperation")});var FNe=vR();(async()=>{try{await FNe.initialize()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();
138
+ `,"")}a(kX,"runCommand");async function eNe(){try{await Pwe.access(fM)}catch{return!1}let e=await kX(`${fM} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Lwe.eq(t,Xwe)}a(eNe,"checkNATSServerInstalled");async function _M(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await BX.getClusterUser();if(Iu(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}ki.trace("create nats connection called");let i=await $we({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:jr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:jr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:jr.get(nt.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),ki.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&ki.error("Error with Nats client connection, connection closed",o),i===Pn&&HX()}),i}a(_M,"createConnection");function HX(){Pn=void 0,Ru=void 0,bu=void 0,Au=void 0}a(HX,"clearClientCache");async function tNe(){Pn&&(await Pn.drain(),Pn=void 0,Ru=void 0,bu=void 0,Au=void 0)}a(tNe,"closeConnection");var Pn,Au;async function QE(){return Au||(Au=_M(jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Pn=await Au),Pn||Au}a(QE,"getConnection");async function JE(){if(Ru)return Ru;Iu(Pn)&&await QE();let{domain:e}=im(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Iu(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ru=await Pn.jetstreamManager({domain:e,timeout:6e4}),Ru}a(JE,"getJetStreamManager");async function GX(){if(bu)return bu;Iu(Pn)&&await QE();let{domain:e}=im(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Iu(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return bu=Pn.jetstream({domain:e,timeout:6e4}),bu}a(GX,"getJetStream");async function Po(){let e=Pn||await QE(),t=Ru||await JE(),r=bu||await GX();return{connection:e,jsm:t,js:r}}a(Po,"getNATSReferences");async function rNe(e){let t=jr.get(nt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await BX.getClusterUser(),s=await _M(t,r,n),i=EM(),o=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of o){let f=FX.decode(d.data);f.response_time=Date.now()-l,c.push(f)}})();return l=Date.now(),await s.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await s.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await s.flush(),await _b.asyncSetTimeout(e),await o.drain(),await s.close(),await u,c}a(rNe,"getServerList");async function gM(e,t){let{jsm:r}=await Po(),n=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Vwe.File,retention:Kwe.Limits,subjects:t,discard:Ywe.Old,maxMsgs:s,maxBytes:i,maxAge:n})}a(gM,"createLocalStream");async function qX(){let{jsm:e}=await Po(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(qX,"listStreams");async function nNe(e){let{jsm:t}=await Po();await t.streams.delete(e)}a(nNe,"deleteLocalStream");async function sNe(e){let{connection:t}=await Po(),r=[],n=EM(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(FX.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(sNe,"listRemoteStreams");async function iNe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Po(),i=vX(),o={durable_name:i,ack_policy:pM.Explicit};t&&(o.deliver_policy=hM.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=mM(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(mn.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}a(iNe,"viewStream");async function*oNe(e,t=void 0,r=void 0){let{jsm:n,js:s}=await Po(),i=vX(),o={durable_name:i,ack_policy:pM.Explicit};t&&(o.deliver_policy=hM.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=mM(u.data);d[0]||(d=[d]);for(let f of d){let m={nats_timestamp:u.info.timestampNanos,nats_sequence:u.info.streamSequence,entry:f};u.headers&&(m.origin=u.headers.get(mn.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}a(oNe,"viewStreamIterator");async function aNe(e,t,r,n){ki.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=$X(n,r);let{js:s}=await Po(),i=await Sb(),o=`${e}.${i}`,c=await Qwe(()=>n instanceof Uint8Array?n:xX.encode(n));try{ki.trace(`publishToStream publishing to subject: ${o}`),jwe(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 KX(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){ki.trace(`publishToStream creating stream: ${t}`);let d=o.split(".");d[2]="*",await gM(t,[o]),await s.publish(o,c,{headers:r})}else throw l}});throw l}}a(aNe,"publishToStream");function $X(e,t){t===void 0&&(t=zwe());let r=jr.get(nt.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(mn.MSG_HEADERS.ORIGIN)&&r&&t.append(mn.MSG_HEADERS.ORIGIN,r),t}a($X,"addNatsMsgHeader");function im(e){e=e.toLowerCase();let t=jE.join(jr.get(nt.CONFIG_PARAMS.ROOTPATH),Jwe);if(e===nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Iu(dM)&&(dM={port:WE.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:WE.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.HUB,config_file:mn.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:jE.join(t,mn.PID_FILES.HUB),hdbNatsPath:t}),dM;if(e===nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Iu(uM)&&(uM={port:WE.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:WE.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.LEAF,config_file:mn.NATS_CONFIG_FILES.LEAF_SERVER,domain:WE.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_NODENAME)+mn.SERVER_SUFFIX.LEAF,pid_file_path:jE.join(t,mn.PID_FILES.LEAF),hdbNatsPath:t}),uM;ki.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(im,"getServerConfig");async function VX(e,t,r,n){try{await e.consumers.add(t,{ack_policy:pM.Explicit,durable_name:r,deliver_policy:hM.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(VX,"createConsumer");async function cNe(e,t,r){await e.consumers.delete(t,r)}a(cNe,"removeConsumer");function lNe(e){return e.split(".")[1]}a(lNe,"extractServerName");async function uNe(e,t,r=6e4,n=EM()){if(!_b.isObject(t))throw new Error("data param must be an object");let s=xX.encode(t),{connection:i}=await Po(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return mM(c.data)}a(uNe,"request");function SM(e){return new Promise(async(t,r)=>{let n=Uwe(fM,["--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(SM,"reloadNATS");async function dNe(){let{pid_file_path:e}=im(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await SM(e)}a(dNe,"reloadNATSHub");async function fNe(){let{pid_file_path:e}=im(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await SM(e)}a(fNe,"reloadNATSLeaf");function mNe(e,t,r){let n;switch(e.code){case DX.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case DX.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(mNe,"requestErrorHandler");async function pNe(e,t){let r=t+mn.SERVER_SUFFIX.LEAF,{connection:n}=await Po(),{jsm:s}=await RNe(r),{schema:i,table:o}=e,c=gb.createNatsTableStreamName(i,o),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await KX(async()=>{if(e.subscribe===!0)await VX(s,c,n.info.server_name,l);else try{await cNe(s,c,n.info.server_name)}catch(u){ki.trace(u)}})}a(pNe,"updateRemoteConsumer");async function hNe(e,t,r,n){let s=gb.createNatsTableStreamName(e,t),i=r+mn.SERVER_SUFFIX.LEAF,o={type:nt.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!UX&&Gwe()<jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=vR();await c(o)}await kwe(o),n==="stop"&&await _b.asyncSetTimeout(1e3)}a(hNe,"updateConsumerIterator");function KX(e){return Fwe.writeTransaction(nt.SYSTEM_SCHEMA_NAME,nt.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(KX,"exclusiveLock");async function YX(e,t){let r=gb.createNatsTableStreamName(e,t),n=await Sb(),s=SNe(e,t,n);await gM(r,[s])}a(YX,"createLocalTableStream");async function ENe(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await YX(n,s)}}a(ENe,"createTableStreams");async function WX(e,t,r=void 0){if(jr.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=gb.createNatsTableStreamName(e,t),{domain:s}=im(nt.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")ki.warn(n);else throw n}}a(WX,"purgeTableStream");async function _Ne(e,t){if(jr.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await WX(e,t[r])}a(_Ne,"purgeSchemaTableStreams");async function gNe(e){return(await JE()).streams.info(e)}a(gNe,"getStreamInfo");function SNe(e,t,r){return`${mn.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(SNe,"createSubjectName");async function Sb(){if(zE)return zE;if(zE=(await JE())?.nc?.info?.server_name,zE===void 0)throw new Error("Unable to get jetstream manager server name");return zE}a(Sb,"getJsmServerName");async function TNe(){let e=await JE(),t=await Sb(),r=await qX();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=yNe(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(".");ki.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}a(TNe,"updateLocalStreams");function yNe(e){let{config:t}=e,r=!1,n=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=jr.get(nt.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=jr.get(nt.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(yNe,"updateStreamLimits");async function RNe(e){let t,r;try{t=await Pn.jetstream({domain:e}),r=await Pn.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw ki.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(RNe,"connectToRemoteJS")});var vR=M((v$e,o6)=>{"use strict";var{decode:bNe}=require("msgpackr"),{isMainThread:P$e,parentPort:L$e,threadId:D$e}=require("worker_threads"),Rb=_r(),om=Ct(),RM=(H(),v(z)),Ln=J(),yM=me(),ANe=(H(),v(z)),{onMessageByType:INe}=st(),XX=no(),{recordAction:jX,recordActionBinary:wNe}=(is(),v(ng)),{publishToStream:NNe}=Rb,{ConsumerEvents:QX}=require("nats"),CNe=gn(),{promisify:ONe}=require("util"),{decodeBlobsWithWrites:PNe}=(ss(),v(H_)),ZX=ONe(setTimeout),bb=1e4,Ab,yb,LNe,DNe,e6,XE=new Map,am=new Map;o6.exports={initialize:t6,ingestConsumer:bM,setSubscription:vNe,setIgnoreOrigin:xNe,getDatabaseSubscriptions:UNe,updateConsumer:r6};async function t6(){INe(RM.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await r6(n)}),e6=!0,Ln.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Rb.getNATSReferences();Ab=e,yb=e.info.server_name,LNe=t,DNe=r}a(t6,"initialize");async function r6(e){if(e.status==="start"){let{js:t,jsm:r}=await n6(e.node_domain_name);bM(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=XE.get(e.stream_name+e.node_domain_name);t&&(Ln.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),XE.set(e.stream_name+e.node_domain_name,"close")),am.get(e.node_domain_name)==="failed"&&am.set(e.node_domain_name,"close")}}a(r6,"updateConsumer");var Ib=new Map;function vNe(e,t,r){let n=Ib.get(e);n||Ib.set(e,n=new Map),n.set(t,r),e6||t6().then(MNe)}a(vNe,"setSubscription");async function MNe(){let e=await CNe.searchByValue({database:"system",table:"hdb_nodes",attribute:"name",value:"*"});for await(let t of e){let r=t.name+om.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await n6(r),!n))break;let{schema:o,table:c}=i,l=XX.createNatsTableStreamName(o,c);bM(l,n,s,r)}}}a(MNe,"accessConsumers");async function n6(e){let t,r,n=1;for(;!r;)try{t=await Ab.jetstream({domain:e}),r=await Ab.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(am.get(e)==="close")break;am.set(e,"failed"),n%10===1&&Ln.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<bb?n++*100:bb;await ZX(i)}return{js:t,jsm:r}}a(n6,"connectToRemoteJS");function UNe(){return Ib}a(UNe,"getDatabaseSubscriptions");var s6;function xNe(e){s6=e}a(xNe,"setIgnoreOrigin");var i6=100,JX=new Array(i6),Tb=0;async function bM(e,t,r,n){let{connection:s}=await Rb.getNATSReferences();Ab=s,yb=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,yb),Ln.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(am.get(n)==="close")break;o%10===1&&Ln.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",u.message),u.code==="404"&&(Ln.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Rb.createConsumer(r,e,yb,new Date(Date.now()).toISOString()));let d=o++*100<bb?o++*100:bb;await ZX(d)}let c=!1,l;for(;!c;){if(XE.get(e+n)==="close"||am.get(n)==="close"){XE.delete(e+n),c=!0;continue}l=await i.consume({max_messages:yM.get(RM.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),XE.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===QX.ConsumerDeleted&&(await l.close(),c=!0),d.type===QX.HeartbeatsMissed){let f=d.data;Ln.trace(`${f} clustering ingest consumer heartbeats missed, node: ${n} stream: ${l.consumer.stream}`),f===100&&(Ln.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 JX[Tb],JX[Tb]=BNe(d).catch(f=>{Ln.error(f)}),++Tb>=i6&&(Tb=0)}catch(d){d.message==="consumer deleted"?(Ln.notify("Nats consumer deleted, closing messages for node:",n,"stream:",l.consumer.stream),await l.close(),c=!0):Ln.error("Error consuming clustering ingest, restarting consumer",d)}}}a(bM,"ingestConsumer");async function BNe(e){let t;await PNe(()=>{t=bNe(e.data)}),jX(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),Ln.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=yM.get(RM.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(om.MSG_HEADERS.TRANSACTED_NODES)&&r.values(om.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(om.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!s6),wNe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(om.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:p}=t;Ln.trace("processing message:",o,c,u,(d?"records: "+d.map(I=>I?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),Ln.trace(`messageProcessor nats msg id: ${e.headers.get(om.MSG_HEADERS.NATS_MSG_ID)}`);let h;d||(d=f);let E=new Promise(I=>h=I),{timestamp:g,user:R,node_name:S}=m||{},y=Ib.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:TM(o),value:d[0],id:f?.[0],expiresAt:p,timestamp:g,table:u,onCommit:h,user:R,nodeName:S});else{let I=d.map(($,ee)=>({type:TM(o),value:$,expiresAt:p,id:f?.[ee],table:u}));for(;l;)I.push({type:TM(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;y.send({type:"transaction",writes:I,table:u,timestamp:g,onCommit:h,user:R,nodeName:S})}yM.get(ANe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&NNe(e.subject.split(".").slice(0,-1).join("."),XX.createNatsTableStreamName(c,u),e.headers,e.data),await E;let N=Date.now()-g;g&&jX(N,"replication-latency",e.subject,o,"ingest")}catch(o){Ln.error(o)}e.ack()}a(BNe,"messageProcessor");function TM(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(TM,"convertOperation")});var FNe=vR();(async()=>{try{await FNe.initialize()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();