harperdb 4.6.0 → 4.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- "use strict";var y4=Object.create;var Df=Object.defineProperty;var A4=Object.getOwnPropertyDescriptor;var b4=Object.getOwnPropertyNames;var I4=Object.getPrototypeOf,N4=Object.prototype.hasOwnProperty;var o=(e,t)=>Df(e,"name",{value:t,configurable:!0});var fe=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ce=(e,t)=>{for(var r in t)Df(e,r,{get:t[r],enumerable:!0})},BD=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of b4(t))!N4.call(e,s)&&s!==r&&Df(e,s,{get:()=>t[s],enumerable:!(n=A4(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?y4(I4(e)):{},BD(t||!e||!e.__esModule?Df(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>BD(Df({},"__esModule",{value:!0}),e);var Rt=M((qbe,kD)=>{var{join:w4,dirname:FD}=require("node:path"),{existsSync:O4,readFileSync:C4}=require("node:fs");function P4(){let t=__dirname,r,n=0;for(;!O4(r=w4(t,"package.json"));)if(t===(t=FD(t))||n++>10)throw new Error("Could not find package root");return r}o(P4,"findPackageJson");var HD=P4(),L4=JSON.parse(C4(HD,"utf8")),D4=FD(HD);kD.exports={packageJson:L4,PACKAGE_ROOT:D4}});var K={};Ce(K,{AUTH_AUDIT_STATUS:()=>Ys,AUTH_AUDIT_TYPES:()=>ma,BOOT_PROPS_FILE_NAME:()=>r3,BOOT_PROP_PARAMS:()=>$D,CLUSTERING_FLAG:()=>Dy,CLUSTERING_PROCESSES:()=>q4,CLUSTER_MESSAGE_TYPE_ENUM:()=>Ly,CLUSTER_OPERATIONS:()=>g3,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>VD,DATABASES_DIR_NAME:()=>Cc,DATABASES_PARAM_CONFIG:()=>y3,DEFAULT_DATABASE_NAME:()=>V4,ESCAPED_FORWARD_SLASH_REGEX:()=>Z4,FORWARD_SLASH_REGEX:()=>J4,FUNC_VAL:()=>M3,GEO_CONVERSION_ENUM:()=>T3,HDB_COMPONENT_CONFIG_FILE:()=>U4,HDB_CONFIG_FILE:()=>M4,HDB_DEFAULT_CONFIG_FILE:()=>v4,HDB_FILE_PERMISSIONS:()=>s3,HDB_HOME_DIR_NAME:()=>t3,HDB_PID_FILE:()=>$4,HDB_PROCESS_SERVICES:()=>G4,HDB_PROC_NAME:()=>x4,HDB_RESTART_SCRIPT:()=>B4,HDB_ROOT_DIR_NAME:()=>Ny,HDB_SETTINGS_NAMES:()=>Py,HDB_SUPPORT_ADDRESS:()=>qD,INFO_TABLE_HASH_ATTRIBUTE:()=>u3,INSERT_MAX_CHARACTER_SIZE:()=>c3,INSTALL_PROMPTS:()=>a3,ITC_EVENT_TYPES:()=>vy,JOB_STATUS_ENUM:()=>h3,JOB_TYPE_ENUM:()=>A3,JWT_ENUM:()=>Uf,LAUNCH_SERVICE_SCRIPTS:()=>Y4,LEGACY_CONFIG_PARAMS:()=>R3,LEGACY_DATABASES_DIR_NAME:()=>yE,LICENSE_FILE_NAME:()=>m3,LICENSE_KEY_DIR_NAME:()=>Cy,LICENSE_VALUES:()=>b3,LOG_LEVELS:()=>Mf,LOG_NAMES:()=>K4,MEM_SETTING_KEY:()=>e3,METADATA_PROPERTY:()=>w3,NODE_ERROR_CODES:()=>N3,OPERATIONS_ENUM:()=>G,PERMS_CRUD_ENUM:()=>L3,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>P3,PRE_4_0_0_VERSION:()=>v3,PROCESS_DESCRIPTORS:()=>k4,PROCESS_NAME_ENV_PROP:()=>o3,RAM_ALLOCATION_ENUM:()=>I3,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>bE,REG_KEY_FILE_NAME:()=>f3,RESTART_TIMEOUT_MS:()=>n3,ROLE_TYPES_ENUM:()=>W4,S3_BUCKET_AUTH_KEYS:()=>E3,SEARCH_NOT_FOUND_MESSAGE:()=>j4,SEARCH_WILDCARDS:()=>D3,SERVICE_ACTIONS_ENUM:()=>S3,SUPPORT_HELP_MSG:()=>z4,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>d3,SYSTEM_SCHEMA_NAME:()=>vf,SYSTEM_TABLE_NAMES:()=>uu,THREAD_TYPES:()=>Uy,TIME_STAMP_NAMES:()=>C3,TIME_STAMP_NAMES_ENUM:()=>O3,TRANSACTIONS_DIR_NAME:()=>i3,UNICODE_FORWARD_SLASH:()=>X4,UNICODE_PERIOD:()=>Q4,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>l3,VALID_S3_FILE_TYPES:()=>p3,VALID_SQL_OPS_ENUM:()=>_3,VALUE_SEARCH_COMPARATORS:()=>AE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>My});var TE,RE,M4,v4,Ny,U4,x4,B4,GD,Iy,wy,Oy,F4,H4,k4,G4,q4,$4,V4,K4,Mf,Y4,W4,qD,z4,j4,Q4,J4,X4,Z4,e3,vf,t3,Cy,r3,n3,s3,Cc,yE,i3,o3,$D,a3,c3,l3,uu,u3,d3,f3,m3,h3,G,p3,E3,_3,g3,S3,T3,Py,R3,U,VD,y3,A3,Ly,b3,I3,N3,w3,Dy,KD,YD,O3,C3,P3,AE,My,L3,D3,M3,bE,Uf,vy,Uy,v3,Ys,ma,k=fe(()=>{TE=require("node:path"),RE=w(Rt()),M4="harperdb-config.yaml",v4="defaultConfig.yaml",Ny="hdb",U4="config.yaml",x4="harperdb.js",B4="restartHdb.js",GD="HarperDB",Iy="Custom Functions",wy="Clustering Hub",Oy="Clustering Leaf",F4="Clustering Ingest Service",H4="Clustering Reply Service",k4={HDB:GD,CLUSTERING_HUB:wy,CLUSTERING_LEAF:Oy,CLUSTERING_INGEST_SERVICE:F4,CLUSTERING_REPLY_SERVICE:H4,CUSTOM_FUNCTIONS:Iy,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"},G4={harperdb:GD,"clustering hub":wy,"clustering leaf":Oy,"custom functions":Iy,custom_functions:Iy,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},q4={CLUSTERING_HUB_PROC_DESCRIPTOR:wy,CLUSTERING_LEAF_PROC_DESCRIPTOR:Oy},$4="hdb.pid",V4="data",K4={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Mf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Y4={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,TE.join)(RE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,TE.join)(RE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,TE.join)(RE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},W4={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},qD="support@harperdb.io",z4=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${qD}`,j4="None of the specified records were found.",Q4="U+002E",J4=/\//g,X4="U+002F",Z4=/U\+002F/g,e3="--max-old-space-size=",vf="system",t3=".harperdb",Cy="keys",r3="hdb_boot_properties.file",n3=6e4,s3=448,Cc="database",yE="schema",i3="transactions",o3="PROCESS_NAME",$D={SETTINGS_PATH_KEY:"settings_path"},a3={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"},c3=250,l3={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},uu={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"},u3="info_id",d3={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"},f3="060493.ks",m3=".license",h3={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},G={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_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status"},p3={CSV:".csv",JSON:".json"},E3={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},_3={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},g3={[G.INSERT]:G.INSERT,[G.UPDATE]:G.UPDATE,[G.UPSERT]:G.UPSERT,[G.DELETE]:G.DELETE},S3={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},T3={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Py={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"},R3={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"},U={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_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_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"},VD={settings_path:$D.SETTINGS_PATH_KEY,hdb_root_key:U.ROOTPATH,hdb_root:U.ROOTPATH,rootpath:U.ROOTPATH,server_port_key:U.OPERATIONSAPI_NETWORK_PORT,server_port:U.OPERATIONSAPI_NETWORK_PORT,cert_key:U.TLS_CERTIFICATE,certificate:U.TLS_CERTIFICATE,private_key_key:U.TLS_PRIVATEKEY,private_key:U.TLS_PRIVATEKEY,http_secure_enabled_key:U.OPERATIONSAPI_NETWORK_HTTPS,https_on:U.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:U.OPERATIONSAPI_NETWORK_CORS,cors_on:U.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:U.LOGGING_LEVEL,log_level:U.LOGGING_LEVEL,log_path_key:U.LOGGING_ROOT,log_path:U.LOGGING_ROOT,clustering_node_name_key:U.CLUSTERING_NODENAME,node_name:U.CLUSTERING_NODENAME,clustering_enabled_key:U.CLUSTERING_ENABLED,clustering:U.CLUSTERING_ENABLED,max_http_threads:U.THREADS_COUNT,max_hdb_processes:U.THREADS_COUNT,server_timeout_key:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:U.LOGGING_AUDITLOG,disable_transaction_log:U.LOGGING_AUDITLOG,operation_token_timeout_key:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:U.HTTP_PORT,custom_functions_port:U.HTTP_PORT,custom_functions_directory_key:U.COMPONENTSROOT,custom_functions_directory:U.COMPONENTSROOT,max_custom_function_processes:U.THREADS_COUNT,logging_console:U.LOGGING_CONSOLE,log_to_file:U.LOGGING_FILE,log_to_stdstreams:U.LOGGING_STDSTREAMS,local_studio_on:U.LOCALSTUDIO_ENABLED,clustering_port:U.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:U.CLUSTERING_USER,customfunctions_network_port:U.HTTP_PORT,customfunctions_tls_certificate:U.TLS_CERTIFICATE,customfunctions_network_cors:U.HTTP_CORS,customfunctions_network_corsaccesslist:U.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:U.HTTP_HEADERSTIMEOUT,customfunctions_network_https:U.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:U.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:U.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:U.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:U.HTTP_TIMEOUT,customfunctions_tls:U.TLS,http_threads:U.THREADS_COUNT,threads:U.THREADS_COUNT,threads_count:U.THREADS_COUNT,customfunctions_processes:U.THREADS_COUNT,customfunctions_root:U.COMPONENTSROOT,operationsapi_root:U.ROOTPATH};for(let e in U){let t=U[e];VD[t.toLowerCase()]=t}y3={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},A3={csv_file_load:"csv_file_load",csv_data_load:G.CSV_DATA_LOAD,csv_url_load:G.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"},Ly={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"},b3={VERSION_DEFAULT:"2.2.0"},I3={DEVELOPMENT:8192,DEFAULT:512},N3={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},w3=Symbol("metadata"),Dy="__clustering__",KD="__createdtime__",YD="__updatedtime__",O3={CREATED_TIME:KD,UPDATED_TIME:YD},C3=[KD,YD],P3=15984864e5,AE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},My={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},L3={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},D3=["*","%"],M3="func_val",bE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Uf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},vy={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"},Uy={HTTP:"http"},v3="3.x.x",Ys={SUCCESS:"success",FAILURE:"failure"},ma={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Pc=M((Vbe,jD)=>{"use strict";var WD=require("minimist");jD.exports=U3;function U3(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=zD(process.env),n=zD(WD(process.argv))):(r=process.env,n=WD(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(U3,"assignCMDENVVariables");function zD(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(zD,"objKeysToLowerCase")});var Ws=M(_s=>{"use strict";global.Resource=_s.Resource=void 0;global.tables=_s.tables={};global.databases=_s.databases={};global.getUser=_s.getUser=void 0;global.authenticateUser=_s.authenticateUser=void 0;global.server=_s.server={};global.contentTypes=_s.contentTypes=null;global.threads=_s.threads=[];global.logger={};global.RequestTarget=_s.RequestTarget=void 0;_s._assignPackageExport=(e,t)=>{global[e]=_s[e]=t}});var xy=M(en=>{"use strict";var x3={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
1
+ "use strict";var N4=Object.create;var Df=Object.defineProperty;var w4=Object.getOwnPropertyDescriptor;var O4=Object.getOwnPropertyNames;var C4=Object.getPrototypeOf,P4=Object.prototype.hasOwnProperty;var o=(e,t)=>Df(e,"name",{value:t,configurable:!0});var fe=(e,t)=>()=>(e&&(t=e(e=0)),t);var M=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ce=(e,t)=>{for(var r in t)Df(e,r,{get:t[r],enumerable:!0})},HD=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of O4(t))!P4.call(e,s)&&s!==r&&Df(e,s,{get:()=>t[s],enumerable:!(n=w4(t,s))||n.enumerable});return e};var w=(e,t,r)=>(r=e!=null?N4(C4(e)):{},HD(t||!e||!e.__esModule?Df(r,"default",{value:e,enumerable:!0}):r,e)),v=e=>HD(Df({},"__esModule",{value:!0}),e);var Rt=M((Wbe,qD)=>{var{join:L4,dirname:kD}=require("node:path"),{existsSync:D4,readFileSync:M4}=require("node:fs");function v4(){let t=__dirname,r,n=0;for(;!D4(r=L4(t,"package.json"));)if(t===(t=kD(t))||n++>10)throw new Error("Could not find package root");return r}o(v4,"findPackageJson");var GD=v4(),U4=JSON.parse(M4(GD,"utf8")),x4=kD(GD);qD.exports={packageJson:U4,PACKAGE_ROOT:x4}});var K={};Ce(K,{AUTH_AUDIT_STATUS:()=>Ys,AUTH_AUDIT_TYPES:()=>ha,BOOT_PROPS_FILE_NAME:()=>o3,BOOT_PROP_PARAMS:()=>KD,CLUSTERING_FLAG:()=>vy,CLUSTERING_PROCESSES:()=>Y4,CLUSTER_MESSAGE_TYPE_ENUM:()=>My,CLUSTER_OPERATIONS:()=>y3,CONFIG_PARAMS:()=>U,CONFIG_PARAM_MAP:()=>YD,DATABASES_DIR_NAME:()=>Pc,DATABASES_PARAM_CONFIG:()=>N3,DEFAULT_DATABASE_NAME:()=>z4,ESCAPED_FORWARD_SLASH_REGEX:()=>n3,FORWARD_SLASH_REGEX:()=>t3,FUNC_VAL:()=>B3,GEO_CONVERSION_ENUM:()=>b3,HDB_COMPONENT_CONFIG_FILE:()=>H4,HDB_CONFIG_FILE:()=>B4,HDB_DEFAULT_CONFIG_FILE:()=>F4,HDB_FILE_PERMISSIONS:()=>c3,HDB_HOME_DIR_NAME:()=>i3,HDB_PID_FILE:()=>W4,HDB_PROCESS_SERVICES:()=>K4,HDB_PROC_NAME:()=>k4,HDB_RESTART_SCRIPT:()=>G4,HDB_ROOT_DIR_NAME:()=>Oy,HDB_SETTINGS_NAMES:()=>Dy,HDB_SUPPORT_ADDRESS:()=>VD,INFO_TABLE_HASH_ATTRIBUTE:()=>h3,INSERT_MAX_CHARACTER_SIZE:()=>f3,INSTALL_PROMPTS:()=>d3,ITC_EVENT_TYPES:()=>xy,JOB_STATUS_ENUM:()=>g3,JOB_TYPE_ENUM:()=>w3,JWT_ENUM:()=>Uf,LAUNCH_SERVICE_SCRIPTS:()=>Q4,LEGACY_CONFIG_PARAMS:()=>I3,LEGACY_DATABASES_DIR_NAME:()=>yE,LICENSE_FILE_NAME:()=>_3,LICENSE_KEY_DIR_NAME:()=>Ly,LICENSE_VALUES:()=>O3,LOG_LEVELS:()=>Mf,LOG_NAMES:()=>j4,MEM_SETTING_KEY:()=>s3,METADATA_PROPERTY:()=>L3,NODE_ERROR_CODES:()=>P3,OPERATIONS_ENUM:()=>G,PERMS_CRUD_ENUM:()=>U3,PERMS_UPDATE_RELEASE_TIMESTAMP:()=>v3,PRE_4_0_0_VERSION:()=>F3,PROCESS_DESCRIPTORS:()=>V4,PROCESS_NAME_ENV_PROP:()=>u3,RAM_ALLOCATION_ENUM:()=>C3,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:()=>bE,REG_KEY_FILE_NAME:()=>E3,RESTART_TIMEOUT_MS:()=>a3,ROLE_TYPES_ENUM:()=>J4,S3_BUCKET_AUTH_KEYS:()=>T3,SEARCH_NOT_FOUND_MESSAGE:()=>Z4,SEARCH_WILDCARDS:()=>x3,SERVICE_ACTIONS_ENUM:()=>A3,SUPPORT_HELP_MSG:()=>X4,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:()=>p3,SYSTEM_SCHEMA_NAME:()=>vf,SYSTEM_TABLE_NAMES:()=>uu,THREAD_TYPES:()=>By,TIME_STAMP_NAMES:()=>M3,TIME_STAMP_NAMES_ENUM:()=>D3,TRANSACTIONS_DIR_NAME:()=>l3,UNICODE_FORWARD_SLASH:()=>r3,UNICODE_PERIOD:()=>e3,UPGRADE_JSON_FIELD_NAMES_ENUM:()=>m3,VALID_S3_FILE_TYPES:()=>S3,VALID_SQL_OPS_ENUM:()=>R3,VALUE_SEARCH_COMPARATORS:()=>AE,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:()=>Uy});var TE,RE,B4,F4,Oy,H4,k4,G4,$D,wy,Cy,Py,q4,$4,V4,K4,Y4,W4,z4,j4,Mf,Q4,J4,VD,X4,Z4,e3,t3,r3,n3,s3,vf,i3,Ly,o3,a3,c3,Pc,yE,l3,u3,KD,d3,f3,m3,uu,h3,p3,E3,_3,g3,G,S3,T3,R3,y3,A3,b3,Dy,I3,U,YD,N3,w3,My,O3,C3,P3,L3,vy,WD,zD,D3,M3,v3,AE,Uy,U3,x3,B3,bE,Uf,xy,By,F3,Ys,ha,k=fe(()=>{TE=require("node:path"),RE=w(Rt()),B4="harperdb-config.yaml",F4="defaultConfig.yaml",Oy="hdb",H4="config.yaml",k4="harperdb.js",G4="restartHdb.js",$D="HarperDB",wy="Custom Functions",Cy="Clustering Hub",Py="Clustering Leaf",q4="Clustering Ingest Service",$4="Clustering Reply Service",V4={HDB:$D,CLUSTERING_HUB:Cy,CLUSTERING_LEAF:Py,CLUSTERING_INGEST_SERVICE:q4,CLUSTERING_REPLY_SERVICE:$4,CUSTOM_FUNCTIONS:wy,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"},K4={harperdb:$D,"clustering hub":Cy,"clustering leaf":Py,"custom functions":wy,custom_functions:wy,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers",http:"http"},Y4={CLUSTERING_HUB_PROC_DESCRIPTOR:Cy,CLUSTERING_LEAF_PROC_DESCRIPTOR:Py},W4="hdb.pid",z4="data",j4={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Mf={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Q4={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:(0,TE.join)(RE.PACKAGE_ROOT,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:(0,TE.join)(RE.PACKAGE_ROOT,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:(0,TE.join)(RE.PACKAGE_ROOT,"launchServiceScripts/launchUpdateNodes4-0-0.js")},J4={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},VD="support@harperdb.io",X4=`For support, please submit a request at https://harperdbhelp.zendesk.com/hc/en-us/requests/new or contact ${VD}`,Z4="None of the specified records were found.",e3="U+002E",t3=/\//g,r3="U+002F",n3=/U\+002F/g,s3="--max-old-space-size=",vf="system",i3=".harperdb",Ly="keys",o3="hdb_boot_properties.file",a3=6e4,c3=448,Pc="database",yE="schema",l3="transactions",u3="PROCESS_NAME",KD={SETTINGS_PATH_KEY:"settings_path"},d3={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"},f3=250,m3={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},uu={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"},h3="info_id",p3={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"},E3="060493.ks",_3=".license",g3={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},G={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_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup",SIGN_CERTIFICATE:"sign_certificate",CREATE_CSR:"create_csr",LIST_CERTIFICATES:"list_certificates",ADD_CERTIFICATES:"add_certificate",REMOVE_CERTIFICATE:"remove_certificate",ADD_NODE_BACK:"add_node_back",REMOVE_NODE_BACK:"remove_node_back",ADD_SSH_KEY:"add_ssh_key",UPDATE_SSH_KEY:"update_ssh_key",DELETE_SSH_KEY:"delete_ssh_key",LIST_SSH_KEYS:"list_ssh_keys",SET_SSH_KNOWN_HOSTS:"set_ssh_known_hosts",GET_SSH_KNOWN_HOSTS:"get_ssh_known_hosts",GET_KEY:"get_key",GET_ANALYTICS:"get_analytics",LIST_METRICS:"list_metrics",GET_STATUS:"get_status",SET_STATUS:"set_status",CLEAR_STATUS:"clear_status"},S3={CSV:".csv",JSON:".json"},T3={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},R3={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},y3={[G.INSERT]:G.INSERT,[G.UPDATE]:G.UPDATE,[G.UPSERT]:G.UPSERT,[G.DELETE]:G.DELETE},A3={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status",OPERATION:"operation",RENEWCERTS:"renew-certs",COPYDB:"copy-db"},b3={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Dy={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"},I3={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"},U={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_MAXHEADERSIZE:"http_maxHeaderSize",HTTP_THREADRANGE:"http_threadRange",HTTP_HTTP2:"http_http2",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_CONSOLE:"logging_console",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_EXTERNAL_LEVEL:"logging_external_level",LOGGING_EXTERNAL_TAG:"logging_external_tag",LOGGING_EXTERNAL_PATH:"logging_external_path",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_ROTATION_RETENTION:"logging_rotation_retention",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_DOMAINSOCKET:"operationsApi_network_domainSocket",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_NETWORK_HTTP2:"operationsApi_network_http2",OPERATIONSAPI_TLS:"operationsApi_tls",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_SYSINFO_NETWORK:"operationsApi_sysInfo_network",OPERATIONSAPI_SYSINFO_DISK:"operationsApi_sysInfo_disk",REPLICATION:"replication",REPLICATION_HOSTNAME:"replication_hostname",REPLICATION_URL:"replication_url",REPLICATION_PORT:"replication_port",REPLICATION_SECUREPORT:"replication_securePort",REPLICATION_ROUTES:"replication_routes",REPLICATION_DATABASES:"replication_databases",REPLICATION_ENABLEROOTCAS:"replication_enableRootCAs",REPLICATION_SHARD:"replication_shard",REPLICATION_COPYTABLESTOCATCHUP:"replication_copyTablesToCatchUp",ROOTPATH:"rootPath",SERIALIZATION_BIGINT:"serialization_bigInt",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_MAXTRANSACTIONQUEUETIME:"storage_maxTransactionQueueTime",STORAGE_PATH:"storage_path",STORAGE_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"},YD={settings_path:KD.SETTINGS_PATH_KEY,hdb_root_key:U.ROOTPATH,hdb_root:U.ROOTPATH,rootpath:U.ROOTPATH,server_port_key:U.OPERATIONSAPI_NETWORK_PORT,server_port:U.OPERATIONSAPI_NETWORK_PORT,cert_key:U.TLS_CERTIFICATE,certificate:U.TLS_CERTIFICATE,private_key_key:U.TLS_PRIVATEKEY,private_key:U.TLS_PRIVATEKEY,http_secure_enabled_key:U.OPERATIONSAPI_NETWORK_HTTPS,https_on:U.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:U.OPERATIONSAPI_NETWORK_CORS,cors_on:U.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:U.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:U.LOGGING_LEVEL,log_level:U.LOGGING_LEVEL,log_path_key:U.LOGGING_ROOT,log_path:U.LOGGING_ROOT,clustering_node_name_key:U.CLUSTERING_NODENAME,node_name:U.CLUSTERING_NODENAME,clustering_enabled_key:U.CLUSTERING_ENABLED,clustering:U.CLUSTERING_ENABLED,max_http_threads:U.THREADS_COUNT,max_hdb_processes:U.THREADS_COUNT,server_timeout_key:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:U.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:U.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:U.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:U.LOGGING_AUDITLOG,disable_transaction_log:U.LOGGING_AUDITLOG,operation_token_timeout_key:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:U.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:U.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:U.HTTP_PORT,custom_functions_port:U.HTTP_PORT,custom_functions_directory_key:U.COMPONENTSROOT,custom_functions_directory:U.COMPONENTSROOT,max_custom_function_processes:U.THREADS_COUNT,logging_console:U.LOGGING_CONSOLE,log_to_file:U.LOGGING_FILE,log_to_stdstreams:U.LOGGING_STDSTREAMS,local_studio_on:U.LOCALSTUDIO_ENABLED,clustering_port:U.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:U.CLUSTERING_USER,customfunctions_network_port:U.HTTP_PORT,customfunctions_tls_certificate:U.TLS_CERTIFICATE,customfunctions_network_cors:U.HTTP_CORS,customfunctions_network_corsaccesslist:U.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:U.HTTP_HEADERSTIMEOUT,customfunctions_network_https:U.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:U.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:U.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:U.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:U.HTTP_TIMEOUT,customfunctions_tls:U.TLS,http_threads:U.THREADS_COUNT,threads:U.THREADS_COUNT,threads_count:U.THREADS_COUNT,customfunctions_processes:U.THREADS_COUNT,customfunctions_root:U.COMPONENTSROOT,operationsapi_root:U.ROOTPATH};for(let e in U){let t=U[e];YD[t.toLowerCase()]=t}N3={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},w3={csv_file_load:"csv_file_load",csv_data_load:G.CSV_DATA_LOAD,csv_url_load:G.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"},My={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"},O3={VERSION_DEFAULT:"2.2.0"},C3={DEVELOPMENT:8192,DEFAULT:512},P3={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},L3=Symbol("metadata"),vy="__clustering__",WD="__createdtime__",zD="__updatedtime__",D3={CREATED_TIME:WD,UPDATED_TIME:zD},M3=[WD,zD],v3=15984864e5,AE={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Uy={"<":"LESS","<=":"LESS_OR_EQ",">":"GREATER",">=":"GREATER_OR_EQ","...":"BETWEEN"},U3={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},x3=["*","%"],B3="func_val",bE={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Uf={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},xy={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"},By={HTTP:"http"},F3="3.x.x",Ys={SUCCESS:"success",FAILURE:"failure"},ha={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"}});var Lc=M((jbe,JD)=>{"use strict";var jD=require("minimist");JD.exports=H3;function H3(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=QD(process.env),n=QD(jD(process.argv))):(r=process.env,n=jD(process.argv));let s={};for(let i=0,a=e.length;i<a;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}o(H3,"assignCMDENVVariables");function QD(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}o(QD,"objKeysToLowerCase")});var Ws=M(_s=>{"use strict";global.Resource=_s.Resource=void 0;global.tables=_s.tables={};global.databases=_s.databases={};global.getUser=_s.getUser=void 0;global.authenticateUser=_s.authenticateUser=void 0;global.server=_s.server={};global.contentTypes=_s.contentTypes=null;global.threads=_s.threads=[];global.logger={};global.RequestTarget=_s.RequestTarget=void 0;_s._assignPackageExport=(e,t)=>{global[e]=_s[e]=t}});var Fy=M(en=>{"use strict";var k3={cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
2
2
  `),key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
3
- `)},B3="certificate.pem",F3="privateKey.pem",H3="caCertificate.pem",k3="natsCertificate.pem",G3="natsCaCertificate.pem",bt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},q3={tls_certificate:bt.SERVER,tlsCertificateAuthority:bt.CA,customFunctions_tls_certificate:bt.SERVER,customFunctionsTlsCertificateAuthority:bt.CA,operationsApi_tls_certificate:bt["OPERATIONS-API"],operationsApiTlsCertificateAuthority:bt["OPERATIONS-CA"]},$3={[bt.SERVER]:2,[bt.DEFAULT]:1},V3={[bt["OPERATIONS-API"]]:3,[bt.SERVER]:2,[bt.DEFAULT]:1},K3={[bt["OPERATIONS-API"]]:3,[bt.SERVER]:2,[bt.DEFAULT]:1},Y3={[bt["OPERATIONS-CA"]]:3,[bt.CA]:2,[bt["DEFAULT-CA"]]:1},W3={[bt["OPERATIONS-CA"]]:3,[bt.CA]:2,[bt["DEFAULT-CA"]]:1},z3={[bt.CA]:2,[bt["DEFAULT-CA"]]:1};en.CERTIFICATE_PEM_NAME=B3;en.PRIVATEKEY_PEM_NAME=F3;en.CA_PEM_NAME=H3;en.CERT_NAME=bt;en.CERT_CONFIG_NAME_MAP=q3;en.CERT_PREFERENCE_APP=$3;en.CERT_PREFERENCE_OPS=V3;en.CERT_PREFERENCE_REP=K3;en.CA_CERT_PREFERENCE_REP=Y3;en.CA_CERT_PREFERENCE_OPS=W3;en.CA_CERT_PREFERENCE_APP=z3;en.CERTIFICATE_VALUES=x3;en.NATS_CERTIFICATE_PEM_NAME=k3;en.NATS_CA_PEM_NAME=G3});var at=M((zbe,QD)=>{"use strict";var Tn=require("validate.js");Tn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Tn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Tn.validators.type.checks={Object:o(function(e){return Tn.isObject(e)&&!Tn.isArray(e)},"Object"),Array:Tn.isArray,Integer:Tn.isInteger,Number:Tn.isNumber,String:Tn.isString,Date:Tn.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};Tn.validators.hasValidFileExt=function(e,t){return Tn.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};QD.exports={validateObject:j3,validateObjectAsync:Q3,validateBySchema:J3};function j3(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Tn(e,t,{format:"flat"});return r?new Error(r):null}o(j3,"validateObject");async function Q3(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Tn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(Q3,"validateObjectAsync");function J3(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(J3,"validateBySchema")});var Fy=M((Jbe,rM)=>{"use strict";var eM=require("fs-extra"),Se=require("joi"),X3=require("os"),{boolean:qe,string:Et,number:ir,array:ha}=Se.types(),{totalmem:JD}=require("os"),Lc=require("path"),Z3=z(),By=ie(),Qbe=xy(),XD=(k(),v(K)),eX=at(),ZD="log",tX="components",rX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",nX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",sX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",iX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",oX="rootPath config parameter is undefined",Rn=Se.alternatives([ir.min(0),Et]).optional().empty(null),IE=Se.alternatives([ha.items(Et,{host:Et.required(),port:Rn},{hostname:Et.required(),port:Rn}).empty(null),ha.items(Et)]),Ii,tM=!1;rM.exports={configValidator:aX,routesValidator:mX,routeConstraints:IE};function aX(e,t=!1){if(tM=t,Ii=e.rootPath,By.isEmpty(Ii))throw oX;let r=qe.optional(),n=ir.min(0).max(1e3).empty(null).default(fX),s=Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(xf),i=Et.optional().empty(null),a=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Se.string().empty(null).default(xf),l=Se.custom(lX).empty(null).default(xf),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:Rn,routes:IE}).required()}).required(),leafNodes:Se.object({network:Se.object({port:Rn}).required()}).required(),network:Se.object({port:Rn}).required()}).required(),leafServer:Se.object({network:Se.object({port:Rn,routes:IE}).required(),streams:Se.object({maxAge:ir.min(120).allow(null).optional(),maxBytes:ir.min(1).allow(null).optional(),maxMsgs:ir.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Se.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:qe.optional(),databaseLevel:qe.optional(),tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:qe.required(),verify:qe.optional()}),user:Et.optional().empty(null)}).optional():f=Se.object({enabled:r,tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:qe.optional()})}).optional(),Se.object({authentication:Se.alternatives(Se.object({authorizeLocal:qe,cacheTTL:ir.required(),cookie:Se.object({domains:ha.items(Et).optional(),expires:Et.optional()}),enableSessions:qe,hashFunction:Et.valid("md5","sha256","argon2id").optional().empty(null)}),qe).optional(),analytics:Se.object({aggregatePeriod:ir,replicate:qe.optional()}),replication:Se.object({hostname:Se.alternatives(Et,ir).optional().empty(null),url:Et.optional().empty(null),port:Rn,securePort:Rn,routes:ha.optional().empty(null),databases:Se.alternatives(Et,ha),enableRootCAs:qe.optional(),copyTablesToCatchUp:qe.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Se.object({enabled:r}).required(),logging:Se.object({auditAuthEvents:Se.object({logFailed:qe,logSuccessful:qe}),file:qe.required(),level:Se.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Se.object({enabled:qe.optional(),compress:qe.optional(),interval:Et.custom(dX).optional().empty(null),maxSize:Et.custom(uX).optional().empty(null),path:Et.optional().empty(null).default(xf)}).required(),root:s,stdStreams:qe.required(),auditLog:qe.required()}).required(),operationsApi:Se.object({network:Se.object({cors:qe.optional(),corsAccessList:ha.optional(),headersTimeout:ir.min(1).optional(),keepAliveTimeout:ir.min(1).optional(),port:Rn,domainSocket:Se.optional().empty("hdb/operations-server").default(xf),securePort:Rn,timeout:ir.min(1).optional()}).optional(),tls:Se.alternatives([Se.array().items(d),d])}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Se.object({network:Se.object({port:Rn,securePort:Rn,mtls:Se.alternatives([qe.optional(),Se.object({user:Et.optional(),certificateAuthority:i,required:qe.optional()})])}).required(),webSocket:qe.optional(),requireAuthentication:qe.optional()}),http:Se.object({compressionThreshold:ir.optional(),cors:qe.optional(),corsAccessList:ha.optional(),headersTimeout:ir.min(1).optional(),port:Rn,securePort:Rn,maxHeaderSize:ir.optional(),mtls:Se.alternatives([qe.optional(),Se.object({user:Et.optional(),certificateAuthority:i,required:qe.optional()})]),threadRange:Se.alternatives([ha.optional(),Et.optional()])}).required(),threads:Se.alternatives(n.optional(),Se.object({count:n.optional(),debug:Se.alternatives(qe.optional(),Se.object({startingPort:ir.min(1).optional(),host:Et.optional(),waitForDebugger:qe.optional()})),maxHeapMemory:ir.min(0).optional()})),storage:Se.object({writeAsync:qe.required(),overlappingSync:qe.optional(),caching:qe.optional(),compression:Se.alternatives([qe.optional(),Se.object({dictionary:Et.optional(),threshold:ir.optional()})]),compactOnStart:qe.optional(),compactOnStartKeepBackup:qe.optional(),noReadAhead:qe.optional(),path:l,prefetchWrites:qe.optional(),maxFreeSpaceToLoad:ir.optional(),maxFreeSpaceToRetain:ir.optional()}).required(),ignoreScripts:qe.optional(),tls:Se.alternatives([Se.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(aX,"configValidator");function cX(e){return tM||eM.existsSync(e)?null:`Specified path ${e} does not exist.`}o(cX,"doesPathExist");function lX(e,t){Se.assert(e,Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=cX(e);if(r)return t.message(r)}o(lX,"validatePath");function uX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(rX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(sX):e}o(uX,"validateRotationMaxSize");function dX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(nX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(iX):e}o(dX,"validateRotationInterval");function fX(e,t){let r=t.state.path.join("."),n=X3.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||JD();return i=Math.round(Math.min(i,JD())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),Z3.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(fX,"setDefaultThreads");function xf(e,t){let r=t.state.path.join(".");if(!By.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(By.isEmpty(Ii))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Lc.join(Ii,tX);case"logging.root":return Lc.join(Ii,ZD);case"clustering.leafServer.streams.path":return Lc.join(Ii,"clustering","leaf");case"storage.path":let n=Lc.join(Ii,XD.LEGACY_DATABASES_DIR_NAME);return eM.existsSync(n)?n:Lc.join(Ii,XD.DATABASES_DIR_NAME);case"logging.rotation.path":return Lc.join(Ii,ZD);case"operationsApi.network.domainSocket":return r==null?null:Lc.join(Ii,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(xf,"setDefaultRoot");function mX(e){let t=Se.object({routes:IE});return eX.validateBySchema({routes:e},t)}o(mX,"routesValidator")});var kt=M((Zbe,sM)=>{"use strict";var hX="__dbis__",pX="__txns__",EX="__environment_name__",_X="__dbi_defintion__",gX={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"},SX=["__createdtime__","__updatedtime__"],TX="\uFFFF",nM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},RX=Object.values(nM);sM.exports={AUDIT_STORE_NAME:pX,INTERNAL_DBIS_NAME:hX,DBI_DEFINITION_NAME:_X,SEARCH_TYPES:gX,TIMESTAMP_NAMES:SX,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:EX,TRANSACTIONS_DBI_NAMES_ENUM:nM,TRANSACTIONS_DBIS:RX,OVERFLOW_MARKER:TX}});var tn=M((eIe,mM)=>{"use strict";var iM=(k(),v(K)),oM=kt(),aM={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},cM=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),lM={500:cM("There was an error processing your request."),400:"Invalid request"},yX=lM[aM.INTERNAL_SERVER_ERROR],AX={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},bX={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},IX={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},NX={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${oM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${oM.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"},wX={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${iM.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 ${iM.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"},uM={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"},OX={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},CX={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},PX={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},LX={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},DX={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},dM={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},fM={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},MX={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"},vX={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},UX={...uM,...IX,...AX,...OX,...CX,...PX,...LX,...DX,...wX,...dM,...fM,...MX,...vX,...bX};mM.exports={CHECK_LOGS_WRAPPER:cM,HDB_ERROR_MSGS:UX,DEFAULT_ERROR_MSGS:lM,DEFAULT_ERROR_RESP:yX,HTTP_STATUS_CODES:aM,LMDB_ERRORS_ENUM:NX,AUTHENTICATION_ERROR_MSGS:uM,VALIDATION_ERROR_MSGS:dM,ITC_ERRORS:fM}});var Ee=M((rIe,EM)=>{"use strict";var du=tn(),xX=z(),BX=(k(),v(K)),NE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,hM),this.statusCode=n||du.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(du.DEFAULT_ERROR_MSGS[n]?du.DEFAULT_ERROR_MSGS[n]:du.DEFAULT_ERROR_MSGS[du.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&&xX[s](i)}},Hy=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},ky=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function hM(e,t,r,n=BX.LOG_LEVELS.ERROR,s=null,i=!1){if(pM(e))return e;let a=new NE(e,t,r,n,s);return i&&delete a.stack,a}o(hM,"handleHDBError");function fu(e){this.message=e}o(fu,"Violation");fu.prototype=Object.create(Error.prototype);fu.prototype.constructor=fu;fu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var Gy=class extends fu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function pM(e){return e.__proto__.constructor.name===NE.name}o(pM,"isHDBError");EM.exports={isHDBError:pM,handleHDBError:hM,ClientError:Hy,ServerError:ky,AccessViolation:Gy,Violation:fu,hdbErrors:du}});var Bf={};Ce(Bf,{server:()=>ve});var _M,ve,Pr=fe(()=>{_M=w(Ws()),ve={};(0,_M._assignPackageExport)("server",ve)});var yt=M(Qt=>{"use strict";var gs=(k(),v(K)),Tr=ie(),or=z(),{configValidator:FX,routesValidator:gM}=Fy(),rn=require("fs-extra"),TM=require("yaml"),qn=require("path"),HX=require("is-number"),RM=require("properties-reader"),kX=require("lodash"),{handleHDBError:GX}=Ee(),{HTTP_STATUS_CODES:qX,HDB_ERROR_MSGS:mu}=tn(),{server:$X}=(Pr(),v(Bf)),{PACKAGE_ROOT:yM}=Rt(),{DATABASES_PARAM_CONFIG:Ff,CONFIG_PARAMS:Gn,CONFIG_PARAM_MAP:zs}=gs,VX="Unable to get config value because config is uninitialized",KX="Config successfully initialized",YX="Error backing up config file",WX="Empty parameter sent to getConfigValue",AM=qn.join(yM,"config","yaml",gs.HDB_DEFAULT_CONFIG_FILE),zX=qn.join(yM,"config","yaml","defaultNatsConfig.yaml"),jX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",SM={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"},wE,Mt,OE;Qt.createConfigFile=QX;Qt.getDefaultConfig=JX;Qt.getConfigValue=IM;Qt.initConfig=CE;Qt.flattenConfig=hu;Qt.updateConfigValue=NM;Qt.updateConfigObject=ZX;Qt.getConfiguration=rZ;Qt.setConfiguration=nZ;Qt.readConfigFile=Ky;Qt.getClusteringRoutes=sZ;Qt.initOldConfig=wM;Qt.getConfigFromFile=iZ;Qt.getConfigFilePath=Dc;Qt.addConfig=oZ;Qt.deleteConfigFromFile=aZ;Qt.getConfigObj=cZ;Qt.resolvePath=qy;Qt.getFlatConfigObj=lZ;function qy(e){if(e?.startsWith("~/"))return qn.join(Tr.getHomeDir(),e.slice(1));let t=ce();try{return qn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(qy,"resolvePath");function QX(e,t=!1){let r=pa(AM);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=TM.parseDocument(rn.readFileSync(zX,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}wE=hu(r.toJSON());let n;for(let c in e){let l=zs[c.toLowerCase()];if(l===Gn.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=$y(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){or.error(f)}}}n&&bM(r,n),Vy(r,t);let s=r.toJSON();Mt=hu(s);let i=r.getIn(["rootPath"]),a=qn.join(i,gs.HDB_CONFIG_FILE);if(rn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);rn.writeFileSync(a,String(r)),or.trace(`Config file written to ${a}`)}o(QX,"createConfigFile");function bM(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Tr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Ff.TABLES))for(let i in n[s][Ff.TABLES])for(let a in n[s][Ff.TABLES][i]){let c=n[s][Ff.TABLES][i][a],l=[Gn.DATABASES,s,Ff.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[Gn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){or.error("Error parsing schemas CLI/env config arguments",n)}}o(bM,"setSchemasConfig");function JX(e){if(wE===void 0){let r=pa(AM);wE=hu(r.toJSON())}let t=zs[e.toLowerCase()];if(t!==void 0)return wE[t.toLowerCase()]}o(JX,"getDefaultConfig");function IM(e){if(e==null){or.info(WX);return}if(Mt===void 0){or.trace(VX);return}let t=zs[e.toLowerCase()];if(t!==void 0)return Mt[t.toLowerCase()]}o(IM,"getConfigValue");function Dc(e=Tr.getPropsFilePath()){let t=Tr.getEnvCliRootPath();if(t)return qy(qn.join(t,gs.HDB_CONFIG_FILE));let r=RM(e);return qy(r.get(gs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Dc,"getConfigFilePath");function CE(e=!1){if(Mt===void 0||e){let t;if(!Tr.noBootFile()){t=Tr.getPropsFilePath();try{rn.accessSync(t,rn.constants.F_OK|rn.constants.R_OK)}catch(i){throw or.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Dc(t),n;if(r.includes("config/settings.js"))try{wM(r);return}catch(i){if(i.code!==gs.NODE_ERROR_CODES.ENOENT)throw i}try{n=pa(r)}catch(i){if(i.code===gs.NODE_ERROR_CODES.ENOENT){or.trace(`HarperDB config file not found at ${r}.
4
- This can occur during early stages of install where the config file has not yet been created`);return}else throw or.error(i),new Error(`Error reading HarperDB config file at ${r}`)}XX(n,r),Vy(n);let s=n.toJSON();if($X.config=s,Mt=hu(s),Mt.logging_rotation_rotate)for(let i in SM)Mt[i]&&or.error(`Config ${SM[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);or.trace(KX)}}o(CE,"initConfig");function XX(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],qn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],qn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(or.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);rn.writeFileSync(t,String(e))}}o(XX,"checkForUpdatedConfig");function Vy(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 mu.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 mu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=FX(r,t);if(n.error)throw mu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(Vy,"validateConfig");function ZX(e,t){Mt===void 0&&(Mt={});let r=zs[e.toLowerCase()];if(r===void 0){or.trace(`Unable to update config object because config param '${e}' does not exist`);return}Mt[r.toLowerCase()]=t}o(ZX,"updateConfigObject");function NM(e,t,r=void 0,n=!1,s=!1,i=!1){Mt===void 0&&CE();let a=IM(zs.hdb_root),c=qn.join(a,gs.HDB_CONFIG_FILE),l=pa(c),u;if(r&&Mt){let m=!1;for(let h in r)if(r[h]!=Mt[h.toLowerCase()]){m=!0;break}if(!m){or.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Gn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=zs[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=m.split("_"),p=$y(m,t);l.setIn([...h],p)}else for(let m in r){let h=zs[m.toLowerCase()];if(h===Gn.HTTP_SECUREPORT&&r[m]===Mt[Gn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===Gn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Mt[Gn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),h===Gn.DATABASES){u=r[m];continue}if(h?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!h&&(m.endsWith("_package")||m.endsWith("_port"))&&(h=m),h!==void 0){let p=h.split("_"),_=gs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];_&&_.startsWith("customFunctions")&&l.hasIn(_.split("_"))&&(h=_,p=_.split("_"));let g=$y(h,r[m]);h==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(y){or.error(y)}}}u&&bM(l,u),Vy(l);let d=l.getIn(["rootPath"]),f=qn.join(d,gs.HDB_CONFIG_FILE);if(n===!0&&eZ(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);rn.writeFileSync(f,String(l)),s&&(Mt=hu(l.toJSON())),or.trace(`Config parameter: ${e} updated with value: ${t}`)}o(NM,"updateConfigValue");function eZ(e,t){try{let r=qn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${gs.HDB_CONFIG_FILE}.bak`);rn.copySync(e,r),or.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){or.error(YX),or.error(r)}}o(eZ,"backupConfigFile");var tZ=["databases"];function hu(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}),OE=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])&&!tZ.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Gn[l.toUpperCase()]&&zs[l]&&(s[zs[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(hu,"flattenConfig");function $y(e,t){if(e===Gn.CLUSTERING_NODENAME||e===Gn.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(HX(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Tr.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 Tr.autoCast(t)}o($y,"castConfigValue");function rZ(){let e=Tr.getPropsFilePath(),t=Dc(e);return pa(t).toJSON()}o(rZ,"getConfiguration");async function nZ(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return NM(void 0,void 0,s,!0),jX}catch(i){throw typeof i=="string"||i instanceof String?GX(i,i,qX.BAD_REQUEST,void 0,void 0,!0):i}}o(nZ,"setConfiguration");function Ky(){let e=Tr.getPropsFilePath();try{rn.accessSync(e,rn.constants.F_OK|rn.constants.R_OK)}catch(n){if(!Tr.noBootFile())throw or.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Dc(e);return pa(t).toJSON()}o(Ky,"readConfigFile");function pa(e){return TM.parseDocument(rn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(pa,"parseYamlDoc");function sZ(){let e=Ky(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Tr.isEmptyOrZeroLength(t)?[]:t;let r=gM(t);if(r)throw mu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Tr.isEmptyOrZeroLength(n)?[]:n;let s=gM(n);if(s)throw mu.CONFIG_VALIDATION(s.message);if(!Tr.isEmptyOrZeroLength(n)&&!Tr.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Tr.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw mu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(sZ,"getClusteringRoutes");function wM(e){let t=RM(e);Mt={};for(let r in zs){let n=t.get(r.toUpperCase());if(Tr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=zs[r].toLowerCase();s===Gn.LOGGING_ROOT?Mt[s]=qn.dirname(n):Mt[s]=n}return Mt}o(wM,"initOldConfig");function iZ(e){let t=Ky();return kX.get(t,e.replaceAll("_","."))}o(iZ,"getConfigFromFile");async function oZ(e,t){let r=pa(Dc());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 rn.writeFile(Dc(),String(r))}o(oZ,"addConfig");function aZ(e){let t=Dc(Tr.getPropsFilePath()),r=pa(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=qn.join(n,gs.HDB_CONFIG_FILE);rn.writeFileSync(s,String(r))}o(aZ,"deleteConfigFromFile");function cZ(){return OE||(CE(),OE)}o(cZ,"getConfigObj");function lZ(){return Mt||CE(),Mt}o(lZ,"getFlatConfigObj")});var ce=M((DM,MM)=>{"use strict";var Yy=require("fs-extra"),Mc=require("path"),OM=require("os"),uZ=require("properties-reader"),kf=z(),Hf=ie(),Ue=(k(),v(K)),PE=yt(),dZ="Error initializing environment manager",LE="BOOT_PROPS_FILE_PATH",CM=!1,fZ={[Ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ao={};Object.assign(DM,MM.exports={BOOT_PROPS_FILE_PATH:LE,getHdbBasePath:mZ,setHdbBasePath:hZ,get:PM,initSync:EZ,setProperty:je,initTestEnvironment:gZ,setCloneVar:_Z});function mZ(){return ao[Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(mZ,"getHdbBasePath");function hZ(e){ao[Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(hZ,"setHdbBasePath");function PM(e){let t=PE.getConfigValue(e);return t===void 0?ao[e]:t}o(PM,"get");function je(e,t){fZ[e]&&(ao[e]=t),PE.updateConfigObject(e,t)}o(je,"setProperty");function pZ(){let e;try{e=Hf.getPropsFilePath(),Yy.accessSync(e,Yy.constants.F_OK|Yy.constants.R_OK),CM=!0;let t=uZ(e);return ao[Ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ue.HDB_SETTINGS_NAMES.INSTALL_USER),ao[Ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ao[LE]=e,!0}catch{return kf.trace(`Environment manager found no properties file at ${e}`),!1}}o(pZ,"doesPropFileExist");function EZ(e=!1){try{((CM||pZ()||Hf.noBootFile())&&!LM||e)&&(PE.initConfig(e),ao[Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=PE.getConfigValue(Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){kf.error(dZ),kf.error(t),console.error(t),process.exit(1)}}o(EZ,"initSync");var LM=!1;function _Z(e){LM=e}o(_Z,"setCloneVar");function gZ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=Mc.join(__dirname,"../../","unitTests");ao[LE]=Mc.join(l,"hdb_boot_properties.file"),je(Ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Mc.join(l,"settings.test")),je(Ue.HDB_SETTINGS_NAMES.INSTALL_USER,OM.userInfo()?OM.userInfo().username:void 0),je(Ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),je(Ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Mc.join(l,"envDir","log")),je(Ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),je(Ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),je(Ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),je(Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Mc.join(l,"envDir")),je(Ue.CONFIG_PARAMS.STORAGE_PATH,Mc.join(l,"envDir")),s&&(je(Ue.CONFIG_PARAMS.HTTP_SECUREPORT,PM(Ue.CONFIG_PARAMS.HTTP_PORT)),je(Ue.CONFIG_PARAMS.HTTP_PORT,null)),je(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),je(Ue.CONFIG_PARAMS.HTTP_PORT,9926),je(Ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),je(Ue.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),je(Ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Hf.isEmpty(i)?!1:i),je(Ue.CONFIG_PARAMS.HTTP_CORS,Hf.isEmpty(i)?!1:i),je(Ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),je(Ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),je(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),je(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),je(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Mc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),je(Ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Hf.isEmpty(c)?!1:c),a&&(je("CORS_ACCESSLIST",a),je(Ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(je(Ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),je(Ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(je(Ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),je(Ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(je(Ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),je(Ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${LE}. Please check your boot props and settings files`;kf.fatal(r),kf.error(t)}}o(gZ,"initTestEnvironment")});var Wy=M((aIe,vM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=Rt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],p="ts-build";if(u){let y=!1,T=!1;if(T=s(n(m,p))){let R=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:m}).forEach(I=>{let P=0,Y=0;try{R.add(I),P=i(n(m,I)).mtimeMs-5e3,Y=i(n(m,p,I.replace(/.ts$/,".js"))).mtimeMs}catch{}P>Y&&(y=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(m,p)}).forEach(I=>{if(!R.has(I.replace(/.js$/,".ts")))try{l(n(m,p,I))}catch{}})}else y=!0;if(y){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),T){let I=n(t(),"harperdb-tsc.pid"),P=!1;if(s(I))try{process.kill(+a(I,"utf8"),0),P=!0}catch{}if(!P){console.log("Starting background TypeScript compilation...");let Y=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});Y.on("error",te=>{console.error("Error trying to compile TypeScript",te)}),Y.pid&&c(I,String(Y.pid),"utf-8"),Y.unref()}}}}let _=vM.constructor,g=_._findPath;_._findPath=function(y,T,R){if(y.startsWith(".")&&!R&&T.length===1&&T[0].startsWith(m)&&!T[0].includes("node_modules")){let I=r(m,T[0]),P;I.startsWith(p)?P=n(m,r(p,I)):P=n(m,p,I),(y.endsWith(".js")||y.endsWith(".ts"))&&(y=y.slice(0,-3));let Y=n(P,y),te=Y+".js";if(s(te))return te;if(Y.includes(".")&&s(Y))return Y}return g(y,T,R)}}});var At=M((cIe,GM)=>{"use strict";var Kf=(k(),v(K)),SZ=ie(),yn=ce(),Yf=require("path"),TZ=require("minimist"),UM=require("fs-extra"),xM=require("lodash");yn.initSync();var{CONFIG_PARAMS:Ea,DATABASES_PARAM_CONFIG:Gf,SYSTEM_SCHEMA_NAME:DE}=Kf,qf,$f,Vf;function BM(){if(qf!==void 0)return qf;if(yn.getHdbBasePath()!==void 0)return qf=yn.get(Ea.STORAGE_PATH)||Yf.join(yn.getHdbBasePath(),Kf.DATABASES_DIR_NAME),qf}o(BM,"getBaseSchemaPath");function FM(){if($f!==void 0)return $f;if(yn.getHdbBasePath()!==void 0)return $f=kM(DE),$f}o(FM,"getSystemSchemaPath");function HM(){if(Vf!==void 0)return Vf;if(yn.getHdbBasePath()!==void 0)return Vf=yn.get(Kf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Yf.join(yn.getHdbBasePath(),Kf.TRANSACTIONS_DIR_NAME),Vf}o(HM,"getTransactionAuditStoreBasePath");function RZ(e,t){let r=yn.get(Ea.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Yf.join(HM(),e.toString())}o(RZ,"getTransactionAuditStorePath");function kM(e,t){e=e.toString(),t=t&&t.toString();let r=yn.get(Kf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Yf.join(BM(),e)}o(kM,"getSchemaPath");function yZ(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,TZ(process.argv));let n=r[Ea.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!SZ.isObject(n))throw a;i=n}for(let a of i){let c=a[DE];if(!c)continue;let l=yn.get(Ea.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Gf.PATH];if(u)return xM.set(l,[DE,Gf.TABLES,t,Gf.PATH],u),yn.setProperty(Ea.DATABASES,l),u;let d=c?.[Gf.PATH];if(d)return xM.set(l,[DE,Gf.PATH],d),yn.setProperty(Ea.DATABASES,l),d}}let s=r[Ea.STORAGE_PATH.toUpperCase()];if(s){if(!UM.pathExistsSync(s))throw new Error(s+" does not exist");let i=Yf.join(s,e);return UM.mkdirsSync(i),yn.setProperty(Ea.STORAGE_PATH,s),i}return FM()}o(yZ,"initSystemSchemaPaths");function AZ(){qf=void 0,$f=void 0,Vf=void 0}o(AZ,"resetPaths");GM.exports={getBaseSchemaPath:BM,getSystemSchemaPath:FM,getTransactionAuditStorePath:RZ,getTransactionAuditStoreBasePath:HM,getSchemaPath:kM,initSystemSchemaPaths:yZ,resetPaths:AZ}});var An=M((fIe,YM)=>{"use strict";var bZ=tn().LMDB_ERRORS_ENUM,uIe=require("lmdb"),IZ=kt(),dIe=require("buffer").Buffer,{OVERFLOW_MARKER:qM,MAX_SEARCH_KEY_LENGTH:ME}=IZ,$M=["number","string","symbol","boolean","bigint"];function NZ(e){if(e=e?.primaryStore||e,!e)throw new Error(bZ.ENV_REQUIRED)}o(NZ,"validateEnv");function wZ(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(wZ,"stringifyData");function OZ(e){return e instanceof Date?e.valueOf():e}o(OZ,"convertKeyValueToWrite");function CZ(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if($M.includes(typeof e))return e.length>ME?[e.slice(0,ME)+qM]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if($M.includes(typeof i))i.length>ME?r.push(i.slice(0,ME)+qM):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(CZ,"getIndexedValues");var vE=0,VM=0;function KM(){VM=Date.now()-performance.now()}o(KM,"adjustStartTime");KM();var PZ=6e4;setInterval(KM,PZ).unref();function LZ(){let e=performance.now()+VM;return e>vE?(vE=e,e):(vE+=488e-6,vE)}o(LZ,"getNextMonotonicTime");YM.exports={validateEnv:NZ,stringifyData:wZ,convertKeyValueToWrite:OZ,getNextMonotonicTime:LZ,getIndexedValues:CZ}});var Wf=M((hIe,WM)=>{"use strict";var DZ=(k(),v(K)).OPERATIONS_ENUM,zy=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=DZ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};WM.exports=zy});var zf=M((_Ie,JM)=>{"use strict";var EIe=Wf(),UE=(k(),v(K)),jy=ie(),zM=z(),MZ=require("uuid"),{handleHDBError:xE,hdbErrors:vZ}=Ee(),{HDB_ERROR_MSGS:BE,HTTP_STATUS_CODES:FE}=vZ;JM.exports=jM;function jM(e,t,r){for(let s=0;s<t.length;s++)QM(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];UZ(i,r,e.operation)}}o(jM,"processRows");jM.validateAttribute=QM;function QM(e){if(Buffer.byteLength(String(e))>UE.INSERT_MAX_CHARACTER_SIZE)throw xE(new Error,BE.ATTR_NAME_LENGTH_ERR(e),FE.BAD_REQUEST,void 0,void 0,!0);if(jy.isEmptyOrZeroLength(e)||jy.isEmpty(e.trim()))throw xE(new Error,BE.ATTR_NAME_NULLISH_ERR,FE.BAD_REQUEST,void 0,void 0,!0)}o(QM,"validateAttribute");function UZ(e,t,r){if(!e.hasOwnProperty(t)||jy.isEmptyOrZeroLength(e[t])){if(r===UE.OPERATIONS_ENUM.INSERT||r===UE.OPERATIONS_ENUM.UPSERT){e[t]=MZ.v4();return}throw zM.error("Update transaction aborted due to record with no hash value:",e),xE(new Error,BE.RECORD_MISSING_HASH_ERR,FE.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>UE.INSERT_MAX_CHARACTER_SIZE)throw zM.error(e),xE(new Error,BE.HASH_VAL_LENGTH_ERR,FE.BAD_REQUEST,void 0,void 0,!0)}o(UZ,"validateHash")});function sv(e){Jy=e}function HZ(){FZ=setInterval(function(){for(let e of Qy)if(e.stale){let t=e.getContext()?.url;tv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},BZ).unref()}var Xy,ev,tv,rv,nv,XM,Qy,xZ,co,jf,ZM,Jy,lo,HE,BZ,FZ,Qf=fe(()=>{Xy=w(An()),ev=w(Ee()),tv=w(z()),rv=w(ce());k();nv=w(ie()),XM=100,Qy=new Set,xZ=(0,nv.convertToMS)(rv.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,co={CLOSED:0,OPEN:1,LINGERING:2};o(sv,"replicationConfirmation");lo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=co.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===co.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),Qy.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Qy.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(jf&&!this.overloadChecked&&performance.now()-ZM>xZ)throw new ev.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===co.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===co.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,Xy.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 h=f;h<this.validated;h++)this.writes[h]?.validate?.(this.timestamp);let m;for(let h=f;h<this.validated;h++){let p=this.writes[h];p&&(p.before||p.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let h=0;h<2;h++){let p;for(let _=f;_<this.validated;_++){let g=this.writes[_];if(!g)continue;let y=g[h===0?"before":"beforeIntermediate"];if(y){let T=y();p?p.push?p.push(T):p=[p,T]:p=T}}p&&await(p.push?Promise.all(p):p)}}catch(h){throw this.abort(),h}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?co.LINGERING:co.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<XM>>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 jf||(jf=s,ZM=performance.now(),jf.then(()=>{jf=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,h=this.writes[this.writes.length-1];Jy&&h&&i.push(Jy(m,h.store.getEntry(h.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+XM/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=co.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},HE=class extends lo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Xy.getNextMonotonicTime)())}getReadTxn(){}},BZ=3e4;o(HZ,"startMonitoringTxns");HZ()});var iv,$n,Zy,pu=fe(()=>{iv=require("events"),$n=class extends iv.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new Zy;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)}},Zy=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function vt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===co.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 lo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var ov,vc=fe(()=>{ov=w(Ws());Qf();o(vt,"transaction");(0,ov._assignPackageExport)("transaction",vt);vt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};vt.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={};Ce(tA,{add:()=>kE,applyReverse:()=>av,getRecordAtTime:()=>eA,rebuildUpdateBefore:()=>GE});function kE(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 GE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,kE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function av(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=kZ[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=cv}}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=Ut(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":av(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===cv&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ut(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var kZ,cv,qE=fe(()=>{uo();o(kE,"add");kE.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)};kZ={add:kE};o(GE,"rebuildUpdateBefore");o(av,"applyReverse");cv={};o(eA,"getRecordAtTime")});var Ni=M(VE=>{var $E=z();for(let e of["trace","debug","info","warn","error","fatal","notify"])$E.logsAtLevel(e)&&(VE[e]=$E[e]);VE.loggerWithTag=e=>$E.loggerWithTag(e,!0);VE.setLogLevel=$E.setLogLevel});var pv={};Ce(pv,{parse:()=>sA,streamAsJSON:()=>Xf,stringify:()=>Uc});function Xf(e){return new rA({value:e})}function lv(e){return console.error(e),JSON.stringify(Jf(e))}function uv(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function Uc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===mv)return hv(e);if(t.resolution)return t.resolution.then(()=>Uc(e));throw t}}function hv(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+=hv(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+Uc(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()),$Z.test(e)?GZ.parse(e):JSON.parse(e)):null}var dv,nA,fv,GZ,qZ,mv,Jf,rA,$Z,iA=fe(()=>{dv=require("stream"),nA=w(z()),fv=w(require("json-bigint-fixes")),GZ=(0,fv.default)({useNativeBigInt:!0}),qZ=1e4,mv={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw mv};({errorToString:Jf}=nA);o(Xf,"streamAsJSON");rA=class extends dv.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(nA.warn("Error serializing in stream",c),a={done:!1,value:{error:Jf(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Jf(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),lv)}catch(s){yield lv(s)}else yield Uc(t)}else yield Uc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);uv(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Jf(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>qZ?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 uv(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(Jf(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(lv,"handleError");o(uv,"when");o(Uc,"stringify");o(hv,"jsStringify");$Z=/[[,:]\s*-?\d{16,}/;o(sA,"parse")});var Iv={};Ce(Iv,{asyncSerialization:()=>uA,contentTypes:()=>lA,findBestSerializer:()=>YE,getDeserializer:()=>ho,hasAsyncSerialization:()=>dA,registerContentHandlers:()=>tm,serialize:()=>rm,serializeMessage:()=>_a,toCsvStream:()=>KE});function VZ(e){try{return e?.[0]===123?cA(e):e}catch{return e}}function tm(e){e.register(KZ,{serializers:[{regex:/^application\/json$/,serializer:Xf},{regex:/^application\/cbor$/,serializer:o(function(t){return new xc.EncoderStream(em).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Bc.Readable.from((0,wi.encodeIter)(t,em)):(0,wi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),KE(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,wi.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 YE(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let p of d){let _=p.indexOf("=");m[p.substring(0,_)]=p.substring(_+1)}f=+m.q;let h=nn.get(u);if(h){let p=(h.q||1)*f;p>s&&(n=h,i=h.type||u,s=p,a=m)}}if(!n){if(r)throw new gv.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(nn.keys()).join(", "),406);n=nn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function rm(e,t,r){let n=_v&&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 Ss)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=YE(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 a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,mo.createBrotliCompress)({params:{[mo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?mo.constants.BROTLI_MODE_TEXT:mo.constants.BROTLI_MODE_GENERIC,[mo.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>_v?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,mo.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function _a(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;fo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=YE(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Zf(e);return fo?.length>0?(fo.length===1?fo[0]:Promise.all(fo)).then(()=>_a(e,t,!0)):n}finally{fo=void 0}}function uA(e){if(fo)fo.push(e);else throw new Error("Unable to serialize asynchronously")}function dA(){return!!fo}function YZ(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 zZ(e){return WZ.includes(e)}function jZ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function ho(e="",t=!1){let r=jZ(e),n=r.type&&nn.get(r.type)?.deserialize||QZ(r);return t?s=>YZ(s).then(n):n}function QZ(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!zZ(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 JZ(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 KE(e,t){let r=Bc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new Rv.Transform(n,s);return r.pipe(i)}var wi,xc,mo,gv,Bc,Sv,oA,Tv,aA,Rv,yv,Av,Zf,cA,em,nn,lA,Ev,bv,KZ,_v,fo,WZ,po=fe(()=>{iA();wi=require("msgpackr"),xc=require("cbor-x"),mo=require("zlib"),gv=w(Ee()),Bc=w(require("stream"));Pr();Sv=w(Ws()),oA=w(ce());k();Tv=w(require("yaml")),aA=w(Ni());Ts();Rv=require("json2csv"),yv=w(require("fastify-plugin")),Av=oA.default.get(U.SERIALIZATION_BIGINT)!==!1,Zf=Av?Uc:JSON.stringify,cA=Av?sA:JSON.parse,em={useRecords:!1,useToJSON:!0},nn=new Map,lA=nn;ve.contentTypes=lA;(0,Sv._assignPackageExport)("contentTypes",lA);nn.set("application/json",{serializeStream:Xf,serialize:Zf,deserialize(e){return cA(e)},q:.8});Ev=new xc.Encoder(em);nn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new xc.EncoderStream(em).end(e)},serialize:Ev.encode,deserialize:Ev.decode,q:1});nn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Bc.Readable.from((0,wi.encodeIter)(e,em)):(0,wi.pack)(e)},serialize:wi.pack,deserialize:wi.unpack,q:.9});nn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),KE(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]),KE(e,e?.getColumns?.())},q:.1});nn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Bc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});nn.set("text/yaml",{serialize(e){return Tv.stringify(e,{aliasDuplicateObjects:!1})},q:.7});nn.set("text/event-stream",{serializeStream:o(function(e){return Bc.Readable.from(JZ(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
3
+ `)},G3="certificate.pem",q3="privateKey.pem",$3="caCertificate.pem",V3="natsCertificate.pem",K3="natsCaCertificate.pem",bt={DEFAULT:"default","DEFAULT-CA":"default-ca",SERVER:"server",CA:"ca","OPERATIONS-API":"operations-api","OPERATIONS-CA":"operations-ca"},Y3={tls_certificate:bt.SERVER,tlsCertificateAuthority:bt.CA,customFunctions_tls_certificate:bt.SERVER,customFunctionsTlsCertificateAuthority:bt.CA,operationsApi_tls_certificate:bt["OPERATIONS-API"],operationsApiTlsCertificateAuthority:bt["OPERATIONS-CA"]},W3={[bt.SERVER]:2,[bt.DEFAULT]:1},z3={[bt["OPERATIONS-API"]]:3,[bt.SERVER]:2,[bt.DEFAULT]:1},j3={[bt["OPERATIONS-API"]]:3,[bt.SERVER]:2,[bt.DEFAULT]:1},Q3={[bt["OPERATIONS-CA"]]:3,[bt.CA]:2,[bt["DEFAULT-CA"]]:1},J3={[bt["OPERATIONS-CA"]]:3,[bt.CA]:2,[bt["DEFAULT-CA"]]:1},X3={[bt.CA]:2,[bt["DEFAULT-CA"]]:1};en.CERTIFICATE_PEM_NAME=G3;en.PRIVATEKEY_PEM_NAME=q3;en.CA_PEM_NAME=$3;en.CERT_NAME=bt;en.CERT_CONFIG_NAME_MAP=Y3;en.CERT_PREFERENCE_APP=W3;en.CERT_PREFERENCE_OPS=z3;en.CERT_PREFERENCE_REP=j3;en.CA_CERT_PREFERENCE_REP=Q3;en.CA_CERT_PREFERENCE_OPS=J3;en.CA_CERT_PREFERENCE_APP=X3;en.CERTIFICATE_VALUES=k3;en.NATS_CERTIFICATE_PEM_NAME=V3;en.NATS_CA_PEM_NAME=K3});var at=M((Zbe,XD)=>{"use strict";var Tn=require("validate.js");Tn.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||Tn.validators.type.checks[t](e)?null:` must be a '${t}' value`};Tn.validators.type.checks={Object:o(function(e){return Tn.isObject(e)&&!Tn.isArray(e)},"Object"),Array:Tn.isArray,Integer:Tn.isInteger,Number:Tn.isNumber,String:Tn.isString,Date:Tn.isDate,Boolean:o(function(e){return typeof e=="boolean"},"Boolean")};Tn.validators.hasValidFileExt=function(e,t){return Tn.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};XD.exports={validateObject:Z3,validateObjectAsync:eX,validateBySchema:tX};function Z3(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Tn(e,t,{format:"flat"});return r?new Error(r):null}o(Z3,"validateObject");async function eX(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Tn.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}o(eX,"validateObjectAsync");function tX(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(tX,"validateBySchema")});var ky=M((rIe,sM)=>{"use strict";var rM=require("fs-extra"),Se=require("joi"),rX=require("os"),{boolean:qe,string:Et,number:ir,array:pa}=Se.types(),{totalmem:ZD}=require("os"),Dc=require("path"),nX=z(),Hy=ie(),tIe=Fy(),eM=(k(),v(K)),sX=at(),tM="log",iX="components",oX="Invalid logging.rotation.maxSize unit. Available units are G, M or K",aX="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",cX="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",lX="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",uX="rootPath config parameter is undefined",Rn=Se.alternatives([ir.min(0),Et]).optional().empty(null),IE=Se.alternatives([pa.items(Et,{host:Et.required(),port:Rn},{hostname:Et.required(),port:Rn}).empty(null),pa.items(Et)]),Ii,nM=!1;sM.exports={configValidator:dX,routesValidator:_X,routeConstraints:IE};function dX(e,t=!1){if(nM=t,Ii=e.rootPath,Hy.isEmpty(Ii))throw uX;let r=qe.optional(),n=ir.min(0).max(1e3).empty(null).default(EX),s=Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(xf),i=Et.optional().empty(null),a=Et.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=Se.string().empty(null).default(xf),l=Se.custom(mX).empty(null).default(xf),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:Rn,routes:IE}).required()}).required(),leafNodes:Se.object({network:Se.object({port:Rn}).required()}).required(),network:Se.object({port:Rn}).required()}).required(),leafServer:Se.object({network:Se.object({port:Rn,routes:IE}).required(),streams:Se.object({maxAge:ir.min(120).allow(null).optional(),maxBytes:ir.min(1).allow(null).optional(),maxMsgs:ir.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:Se.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:qe.optional(),databaseLevel:qe.optional(),tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:qe.required(),verify:qe.optional()}),user:Et.optional().empty(null)}).optional():f=Se.object({enabled:r,tls:Se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:qe.optional()})}).optional(),Se.object({authentication:Se.alternatives(Se.object({authorizeLocal:qe,cacheTTL:ir.required(),cookie:Se.object({domains:pa.items(Et).optional(),expires:Et.optional()}),enableSessions:qe,hashFunction:Et.valid("md5","sha256","argon2id").optional().empty(null)}),qe).optional(),analytics:Se.object({aggregatePeriod:ir,replicate:qe.optional()}),replication:Se.object({hostname:Se.alternatives(Et,ir).optional().empty(null),url:Et.optional().empty(null),port:Rn,securePort:Rn,routes:pa.optional().empty(null),databases:Se.alternatives(Et,pa),enableRootCAs:qe.optional(),copyTablesToCatchUp:qe.optional()}).optional(),componentsRoot:s.optional(),clustering:f,localStudio:Se.object({enabled:r}).required(),logging:Se.object({auditAuthEvents:Se.object({logFailed:qe,logSuccessful:qe}),file:qe.required(),level:Se.valid("notify","fatal","error","warn","info","debug","trace"),rotation:Se.object({enabled:qe.optional(),compress:qe.optional(),interval:Et.custom(pX).optional().empty(null),maxSize:Et.custom(hX).optional().empty(null),path:Et.optional().empty(null).default(xf)}).required(),root:s,stdStreams:qe.required(),auditLog:qe.required()}).required(),operationsApi:Se.object({network:Se.object({cors:qe.optional(),corsAccessList:pa.optional(),headersTimeout:ir.min(1).optional(),keepAliveTimeout:ir.min(1).optional(),port:Rn,domainSocket:Se.optional().empty("hdb/operations-server").default(xf),securePort:Rn,timeout:ir.min(1).optional()}).optional(),tls:Se.alternatives([Se.array().items(d),d])}).required(),rootPath:Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:Se.object({network:Se.object({port:Rn,securePort:Rn,mtls:Se.alternatives([qe.optional(),Se.object({user:Et.optional(),certificateAuthority:i,required:qe.optional()})])}).required(),webSocket:qe.optional(),requireAuthentication:qe.optional()}),http:Se.object({compressionThreshold:ir.optional(),cors:qe.optional(),corsAccessList:pa.optional(),headersTimeout:ir.min(1).optional(),port:Rn,securePort:Rn,maxHeaderSize:ir.optional(),mtls:Se.alternatives([qe.optional(),Se.object({user:Et.optional(),certificateAuthority:i,required:qe.optional()})]),threadRange:Se.alternatives([pa.optional(),Et.optional()])}).required(),threads:Se.alternatives(n.optional(),Se.object({count:n.optional(),debug:Se.alternatives(qe.optional(),Se.object({startingPort:ir.min(1).optional(),host:Et.optional(),waitForDebugger:qe.optional()})),maxHeapMemory:ir.min(0).optional()})),storage:Se.object({writeAsync:qe.required(),overlappingSync:qe.optional(),caching:qe.optional(),compression:Se.alternatives([qe.optional(),Se.object({dictionary:Et.optional(),threshold:ir.optional()})]),compactOnStart:qe.optional(),compactOnStartKeepBackup:qe.optional(),noReadAhead:qe.optional(),path:l,prefetchWrites:qe.optional(),maxFreeSpaceToLoad:ir.optional(),maxFreeSpaceToRetain:ir.optional()}).required(),ignoreScripts:qe.optional(),tls:Se.alternatives([Se.array().items(d),d])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(dX,"configValidator");function fX(e){return nM||rM.existsSync(e)?null:`Specified path ${e} does not exist.`}o(fX,"doesPathExist");function mX(e,t){Se.assert(e,Et.pattern(/^[\\\/]$|([\\\/a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=fX(e);if(r)return t.message(r)}o(mX,"validatePath");function hX(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(oX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(cX):e}o(hX,"validateRotationMaxSize");function pX(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(aX);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(lX):e}o(pX,"validateRotationInterval");function EX(e,t){let r=t.state.path.join("."),n=rX.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||ZD();return i=Math.round(Math.min(i,ZD())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),nX.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}o(EX,"setDefaultThreads");function xf(e,t){let r=t.state.path.join(".");if(!Hy.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(Hy.isEmpty(Ii))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Dc.join(Ii,iX);case"logging.root":return Dc.join(Ii,tM);case"clustering.leafServer.streams.path":return Dc.join(Ii,"clustering","leaf");case"storage.path":let n=Dc.join(Ii,eM.LEGACY_DATABASES_DIR_NAME);return rM.existsSync(n)?n:Dc.join(Ii,eM.DATABASES_DIR_NAME);case"logging.rotation.path":return Dc.join(Ii,tM);case"operationsApi.network.domainSocket":return r==null?null:Dc.join(Ii,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(xf,"setDefaultRoot");function _X(e){let t=Se.object({routes:IE});return sX.validateBySchema({routes:e},t)}o(_X,"routesValidator")});var kt=M((sIe,oM)=>{"use strict";var gX="__dbis__",SX="__txns__",TX="__environment_name__",RX="__dbi_defintion__",yX={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"},AX=["__createdtime__","__updatedtime__"],bX="\uFFFF",iM={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},IX=Object.values(iM);oM.exports={AUDIT_STORE_NAME:SX,INTERNAL_DBIS_NAME:gX,DBI_DEFINITION_NAME:RX,SEARCH_TYPES:yX,TIMESTAMP_NAMES:AX,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:TX,TRANSACTIONS_DBI_NAMES_ENUM:iM,TRANSACTIONS_DBIS:IX,OVERFLOW_MARKER:bX}});var tn=M((iIe,pM)=>{"use strict";var aM=(k(),v(K)),cM=kt(),lM={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},uM=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),dM={500:uM("There was an error processing your request."),400:"Invalid request"},NX=dM[lM.INTERNAL_SERVER_ERROR],wX={OP_NOT_SUPPORTED_FOR_FS:o(e=>`${e} is not available for this instance because it uses the File System data store.`,"OP_NOT_SUPPORTED_FOR_FS"),MISSING_VALUE:o(e=>`${e} is missing.`,"MISSING_VALUE"),INVALID_VALUE:o(e=>`${e} is invalid.`,"INVALID_VALUE"),NOT_FOUND:o(e=>`${e} not found.`,"NOT_FOUND")},OX={CONFIG_VALIDATION:o(e=>`HarperDB config file validation error: ${e}`,"CONFIG_VALIDATION")},CX={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:o(e=>`There was an error downloading '${e}'.`,"DOWNLOAD_FILE_ERR"),INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:o(e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,"INVALID_ACTION_PARAM_ERR"),INVALID_FILE_EXT_ERR:o(e=>`Error selecting correct parser - valid file type not found in json - ${e}`,"INVALID_FILE_EXT_ERR"),MAX_FILE_SIZE_ERR:o((e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,"MAX_FILE_SIZE_ERR"),PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:o(e=>`There was an error downloading '${e}' from AWS.`,"S3_DOWNLOAD_ERR"),WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},PX={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${cM.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${cM.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"},LX={ATTR_NAME_LENGTH_ERR:o(e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${aM.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 ${aM.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"},fM={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"},DX={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:o(e=>`Operation '${e}' is restricted to 'super_user' roles`,"OP_IS_SU_ONLY"),OP_NOT_FOUND:o(e=>`Operation '${e}' not found`,"OP_NOT_FOUND"),SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:o((e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,"UNKNOWN_OP_AUTH_ERROR"),USER_HAS_NO_PERMS:o(e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,"USER_HAS_NO_PERMS"),DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},MX={ATTR_PERM_MISSING:o((e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,"ATTR_PERM_MISSING"),ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:o((e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,"ATTR_PERM_NOT_BOOLEAN"),ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:o(e=>`Invalid attribute '${e}' in 'attribute_permissions'`,"INVALID_ATTRIBUTE_IN_PERMS"),INVALID_PERM_KEY:o(e=>`Invalid table permission key value '${e}'`,"INVALID_PERM_KEY"),INVALID_ATTR_PERM_KEY:o(e=>`Invalid attribute permission key value '${e}'`,"INVALID_ATTR_PERM_KEY"),INVALID_ROLE_JSON_KEYS:o(e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,"INVALID_ROLE_JSON_KEYS"),MISMATCHED_TABLE_ATTR_PERMS:o(e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,"MISMATCHED_TABLE_ATTR_PERMS"),OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:o(e=>`A role with name '${e}' already exists`,"ROLE_ALREADY_EXISTS"),ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:o(e=>`Your role does not have permission to view database metadata for '${e}'`,"SCHEMA_PERM_ERROR"),SCHEMA_TABLE_PERM_ERROR:o((e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,"SCHEMA_TABLE_PERM_ERROR"),SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:o(e=>`Value for '${e}' permission must be a boolean`,"SU_CU_ROLE_BOOLEAN_ERROR"),STRUCTURE_USER_ROLE_TYPE_ERROR:o(e=>`Value for '${e}' permission must be a boolean or Array`,"STRUCTURE_USER_ROLE_TYPE_ERROR"),SU_CU_ROLE_NO_PERMS_ALLOWED:o(e=>`Roles with '${e}' set to true cannot have other permissions set.`,"SU_CU_ROLE_NO_PERMS_ALLOWED"),SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:o(e=>`Missing table ${e.toUpperCase()} permission`,"TABLE_PERM_MISSING"),TABLE_PERM_NOT_BOOLEAN:o(e=>`Table ${e.toUpperCase()} permission must be a boolean`,"TABLE_PERM_NOT_BOOLEAN")},vX={ATTR_NOT_FOUND:o((e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,"ATTR_NOT_FOUND"),ATTR_EXISTS_ERR:o((e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,"ATTR_EXISTS_ERR"),DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:o(e=>`Invalid table ${JSON.stringify(e)}`,"INVALID_TABLE_ERR"),SCHEMA_NOT_FOUND:o(e=>`database '${e}' does not exist`,"SCHEMA_NOT_FOUND"),SCHEMA_EXISTS_ERR:o(e=>`database '${e}' already exists`,"SCHEMA_EXISTS_ERR"),TABLE_EXISTS_ERR:o((e,t)=>`Table '${t}' already exists in '${e}'`,"TABLE_EXISTS_ERR"),SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:o((e,t)=>`Table '${e}.${t}' does not exist`,"TABLE_NOT_FOUND"),TABLE_REQUIRED_ERR:"table is required"},UX={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},xX={ALTER_USER_DUP_ROLES:o(e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,"ALTER_USER_DUP_ROLES"),ALTER_USER_ROLE_NOT_FOUND:o(e=>`Update failed. Requested '${e}' role not found.`,"ALTER_USER_ROLE_NOT_FOUND"),DUP_ROLES_FOUND:o(e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,"DUP_ROLES_FOUND"),ROLE_NAME_NOT_FOUND:o(e=>`${e} role not found`,"ROLE_NAME_NOT_FOUND"),USER_ALREADY_EXISTS:o(e=>`User ${e} already exists`,"USER_ALREADY_EXISTS"),USER_NOT_EXIST:o(e=>`User ${e} does not exist`,"USER_NOT_EXIST")},mM={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:o(e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`,"SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE")},hM={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:o(e=>`ITC server received invalid event type: ${e}`,"INVALID_EVENT")},BX={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"},FX={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},HX={...fM,...CX,...wX,...DX,...MX,...vX,...UX,...xX,...LX,...mM,...hM,...BX,...FX,...OX};pM.exports={CHECK_LOGS_WRAPPER:uM,HDB_ERROR_MSGS:HX,DEFAULT_ERROR_MSGS:dM,DEFAULT_ERROR_RESP:NX,HTTP_STATUS_CODES:lM,LMDB_ERRORS_ENUM:PX,AUTHENTICATION_ERROR_MSGS:fM,VALIDATION_ERROR_MSGS:mM,ITC_ERRORS:hM}});var Ee=M((aIe,gM)=>{"use strict";var du=tn(),kX=z(),GX=(k(),v(K)),NE=class extends Error{static{o(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,EM),this.statusCode=n||du.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(du.DEFAULT_ERROR_MSGS[n]?du.DEFAULT_ERROR_MSGS[n]:du.DEFAULT_ERROR_MSGS[du.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&&kX[s](i)}},Gy=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},qy=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function EM(e,t,r,n=GX.LOG_LEVELS.ERROR,s=null,i=!1){if(_M(e))return e;let a=new NE(e,t,r,n,s);return i&&delete a.stack,a}o(EM,"handleHDBError");function fu(e){this.message=e}o(fu,"Violation");fu.prototype=Object.create(Error.prototype);fu.prototype.constructor=fu;fu.prototype.toString=function(){return`${this.constructor.name}: ${this.message}`};var $y=class extends fu{static{o(this,"AccessViolation")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};function _M(e){return e.__proto__.constructor.name===NE.name}o(_M,"isHDBError");gM.exports={isHDBError:_M,handleHDBError:EM,ClientError:Gy,ServerError:qy,AccessViolation:$y,Violation:fu,hdbErrors:du}});var Bf={};Ce(Bf,{server:()=>ve});var SM,ve,Pr=fe(()=>{SM=w(Ws()),ve={};(0,SM._assignPackageExport)("server",ve)});var yt=M(Qt=>{"use strict";var gs=(k(),v(K)),Tr=ie(),or=z(),{configValidator:qX,routesValidator:TM}=ky(),rn=require("fs-extra"),yM=require("yaml"),qn=require("path"),$X=require("is-number"),AM=require("properties-reader"),VX=require("lodash"),{handleHDBError:KX}=Ee(),{HTTP_STATUS_CODES:YX,HDB_ERROR_MSGS:mu}=tn(),{server:WX}=(Pr(),v(Bf)),{PACKAGE_ROOT:bM}=Rt(),{DATABASES_PARAM_CONFIG:Ff,CONFIG_PARAMS:Gn,CONFIG_PARAM_MAP:zs}=gs,zX="Unable to get config value because config is uninitialized",jX="Config successfully initialized",QX="Error backing up config file",JX="Empty parameter sent to getConfigValue",IM=qn.join(bM,"config","yaml",gs.HDB_DEFAULT_CONFIG_FILE),XX=qn.join(bM,"config","yaml","defaultNatsConfig.yaml"),ZX="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",RM={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"},wE,Mt,OE;Qt.createConfigFile=eZ;Qt.getDefaultConfig=tZ;Qt.getConfigValue=wM;Qt.initConfig=CE;Qt.flattenConfig=hu;Qt.updateConfigValue=OM;Qt.updateConfigObject=nZ;Qt.getConfiguration=oZ;Qt.setConfiguration=aZ;Qt.readConfigFile=Wy;Qt.getClusteringRoutes=cZ;Qt.initOldConfig=CM;Qt.getConfigFromFile=lZ;Qt.getConfigFilePath=Mc;Qt.addConfig=uZ;Qt.deleteConfigFromFile=dZ;Qt.getConfigObj=fZ;Qt.resolvePath=Vy;Qt.getFlatConfigObj=mZ;function Vy(e){if(e?.startsWith("~/"))return qn.join(Tr.getHomeDir(),e.slice(1));let t=ce();try{return qn.resolve(t.getHdbBasePath(),e)}catch(r){return console.error("Unable to resolve path",e,r),e}}o(Vy,"resolvePath");function eZ(e,t=!1){let r=Ea(IM);if(e.clustering_enabled||e.CLUSTERING_ENABLED||e.clustering){let c=yM.parseDocument(rn.readFileSync(XX,"utf8"),{simpleKeys:!0});r.addIn(["clustering"],c.toJSON().clustering)}wE=hu(r.toJSON());let n;for(let c in e){let l=zs[c.toLowerCase()];if(l===Gn.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=Ky(l,e[c]);l==="rootPath"&&d?.endsWith("/")&&(d=d.slice(0,-1));try{r.setIn([...u],d)}catch(f){or.error(f)}}}n&&NM(r,n),Yy(r,t);let s=r.toJSON();Mt=hu(s);let i=r.getIn(["rootPath"]),a=qn.join(i,gs.HDB_CONFIG_FILE);if(rn.createFileSync(a),r.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${r.errors}`);rn.writeFileSync(a,String(r)),or.trace(`Config file written to ${a}`)}o(eZ,"createConfigFile");function NM(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Tr.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Ff.TABLES))for(let i in n[s][Ff.TABLES])for(let a in n[s][Ff.TABLES][i]){let c=n[s][Ff.TABLES][i][a],l=[Gn.DATABASES,s,Ff.TABLES,i,a];e.hasIn(l)?e.setIn(l,c):e.addIn(l,c)}else for(let i in n[s]){let a=n[s][i],c=[Gn.DATABASES,s,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(n){or.error("Error parsing schemas CLI/env config arguments",n)}}o(NM,"setSchemasConfig");function tZ(e){if(wE===void 0){let r=Ea(IM);wE=hu(r.toJSON())}let t=zs[e.toLowerCase()];if(t!==void 0)return wE[t.toLowerCase()]}o(tZ,"getDefaultConfig");function wM(e){if(e==null){or.info(JX);return}if(Mt===void 0){or.trace(zX);return}let t=zs[e.toLowerCase()];if(t!==void 0)return Mt[t.toLowerCase()]}o(wM,"getConfigValue");function Mc(e=Tr.getPropsFilePath()){let t=Tr.getEnvCliRootPath();if(t)return Vy(qn.join(t,gs.HDB_CONFIG_FILE));let r=AM(e);return Vy(r.get(gs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}o(Mc,"getConfigFilePath");function CE(e=!1){if(Mt===void 0||e){let t;if(!Tr.noBootFile()){t=Tr.getPropsFilePath();try{rn.accessSync(t,rn.constants.F_OK|rn.constants.R_OK)}catch(i){throw or.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Mc(t),n;if(r.includes("config/settings.js"))try{CM(r);return}catch(i){if(i.code!==gs.NODE_ERROR_CODES.ENOENT)throw i}try{n=Ea(r)}catch(i){if(i.code===gs.NODE_ERROR_CODES.ENOENT){or.trace(`HarperDB config file not found at ${r}.
4
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw or.error(i),new Error(`Error reading HarperDB config file at ${r}`)}rZ(n,r),Yy(n);let s=n.toJSON();if(WX.config=s,Mt=hu(s),Mt.logging_rotation_rotate)for(let i in RM)Mt[i]&&or.error(`Config ${RM[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);or.trace(jX)}}o(CE,"initConfig");function rZ(e,t){let r=e.getIn(["rootPath"]),n=!1;if(e.hasIn(["storage","path"])||(e.setIn(["storage","path"],qn.join(r,"database")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],qn.join(r,"log")),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60,replicate:!1}),n=!0),n){if(or.trace("Updating config file with missing config params"),e.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${e.errors}`);rn.writeFileSync(t,String(e))}}o(rZ,"checkForUpdatedConfig");function Yy(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 mu.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 mu.CONFIG_VALIDATION("operationsApi.network.port and operationsApi.network.securePort cannot be the same value");let n=qX(r,t);if(n.error)throw mu.CONFIG_VALIDATION(n.error.message);typeof n.value.threads=="object"?e.setIn(["threads","count"],n.value.threads.count):e.setIn(["threads"],n.value.threads),e.setIn(["componentsRoot"],n.value.componentsRoot),e.setIn(["logging","root"],n.value.logging.root),e.setIn(["storage","path"],n.value.storage.path),e.setIn(["logging","rotation","path"],n.value.logging.rotation.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket),r?.clustering?.enabled&&e.setIn(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path)}o(Yy,"validateConfig");function nZ(e,t){Mt===void 0&&(Mt={});let r=zs[e.toLowerCase()];if(r===void 0){or.trace(`Unable to update config object because config param '${e}' does not exist`);return}Mt[r.toLowerCase()]=t}o(nZ,"updateConfigObject");function OM(e,t,r=void 0,n=!1,s=!1,i=!1){Mt===void 0&&CE();let a=wM(zs.hdb_root),c=qn.join(a,gs.HDB_CONFIG_FILE),l=Ea(c),u;if(r&&Mt){let m=!1;for(let h in r)if(r[h]!=Mt[h.toLowerCase()]){m=!0;break}if(!m){or.trace("No changes detected in config parameters, skipping update");return}}if(r===void 0&&e.toLowerCase()===Gn.DATABASES)u=t;else if(r===void 0){let m;if(i)m=e;else if(m=zs[e.toLowerCase()],m===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let h=m.split("_"),p=Ky(m,t);l.setIn([...h],p)}else for(let m in r){let h=zs[m.toLowerCase()];if(h===Gn.HTTP_SECUREPORT&&r[m]===Mt[Gn.HTTP_PORT]?.toString()&&l.setIn(["http","port"],null),h===Gn.OPERATIONSAPI_NETWORK_SECUREPORT&&r[m]===Mt[Gn.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&l.setIn(["operationsApi","network","port"],null),h===Gn.DATABASES){u=r[m];continue}if(h?.startsWith("threads_")){let p=l.getIn(["threads"]);p>=0&&(l.deleteIn(["threads"]),l.setIn(["threads","count"],p))}if(!h&&(m.endsWith("_package")||m.endsWith("_port"))&&(h=m),h!==void 0){let p=h.split("_"),_=gs.LEGACY_CONFIG_PARAMS[m.toUpperCase()];_&&_.startsWith("customFunctions")&&l.hasIn(_.split("_"))&&(h=_,p=_.split("_"));let g=Ky(h,r[m]);h==="rootPath"&&g?.endsWith("/")&&(g=g.slice(0,-1));try{p.length>1&&typeof l.getIn(p.slice(0,-1))=="boolean"&&l.deleteIn(p.slice(0,-1)),l.setIn([...p],g)}catch(y){or.error(y)}}}u&&NM(l,u),Yy(l);let d=l.getIn(["rootPath"]),f=qn.join(d,gs.HDB_CONFIG_FILE);if(n===!0&&sZ(c,d),l.errors?.length>0)throw new Error(`Error parsing harperdb-config.yaml ${l.errors}`);rn.writeFileSync(f,String(l)),s&&(Mt=hu(l.toJSON())),or.trace(`Config parameter: ${e} updated with value: ${t}`)}o(OM,"updateConfigValue");function sZ(e,t){try{let r=qn.join(t,"backup",`${new Date(Date.now()).toISOString().replaceAll(":","-")}-${gs.HDB_CONFIG_FILE}.bak`);rn.copySync(e,r),or.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){or.error(QX),or.error(r)}}o(sZ,"backupConfigFile");var iZ=["databases"];function hu(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}),OE=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])&&!iZ.includes(i)){let a=r(n[i]);for(let c in a){if(!a.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let l=i+"_"+c;!Gn[l.toUpperCase()]&&zs[l]&&(s[zs[l].toLowerCase()]=a[c]),s[l]=a[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}o(r,"squashObj")}o(hu,"flattenConfig");function Ky(e,t){if(e===Gn.CLUSTERING_NODENAME||e===Gn.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($X(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Tr.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 Tr.autoCast(t)}o(Ky,"castConfigValue");function oZ(){let e=Tr.getPropsFilePath(),t=Mc(e);return Ea(t).toJSON()}o(oZ,"getConfiguration");async function aZ(e){let{operation:t,hdb_user:r,hdbAuthHeader:n,...s}=e;try{return OM(void 0,void 0,s,!0),ZX}catch(i){throw typeof i=="string"||i instanceof String?KX(i,i,YX.BAD_REQUEST,void 0,void 0,!0):i}}o(aZ,"setConfiguration");function Wy(){let e=Tr.getPropsFilePath();try{rn.accessSync(e,rn.constants.F_OK|rn.constants.R_OK)}catch(n){if(!Tr.noBootFile())throw or.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Mc(e);return Ea(t).toJSON()}o(Wy,"readConfigFile");function Ea(e){return yM.parseDocument(rn.readFileSync(e,"utf8"),{simpleKeys:!0})}o(Ea,"parseYamlDoc");function cZ(){let e=Wy(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Tr.isEmptyOrZeroLength(t)?[]:t;let r=TM(t);if(r)throw mu.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Tr.isEmptyOrZeroLength(n)?[]:n;let s=TM(n);if(s)throw mu.CONFIG_VALIDATION(s.message);if(!Tr.isEmptyOrZeroLength(n)&&!Tr.isEmptyOrZeroLength(t)){let i=t.filter(a=>n.some(c=>c.host===a.host&&c.port===a.port));if(!Tr.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw mu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:n}}o(cZ,"getClusteringRoutes");function CM(e){let t=AM(e);Mt={};for(let r in zs){let n=t.get(r.toUpperCase());if(Tr.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=zs[r].toLowerCase();s===Gn.LOGGING_ROOT?Mt[s]=qn.dirname(n):Mt[s]=n}return Mt}o(CM,"initOldConfig");function lZ(e){let t=Wy();return VX.get(t,e.replaceAll("_","."))}o(lZ,"getConfigFromFile");async function uZ(e,t){let r=Ea(Mc());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 rn.writeFile(Mc(),String(r))}o(uZ,"addConfig");function dZ(e){let t=Mc(Tr.getPropsFilePath()),r=Ea(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=qn.join(n,gs.HDB_CONFIG_FILE);rn.writeFileSync(s,String(r))}o(dZ,"deleteConfigFromFile");function fZ(){return OE||(CE(),OE)}o(fZ,"getConfigObj");function mZ(){return Mt||CE(),Mt}o(mZ,"getFlatConfigObj")});var ce=M((vM,UM)=>{"use strict";var zy=require("fs-extra"),vc=require("path"),PM=require("os"),hZ=require("properties-reader"),kf=z(),Hf=ie(),Ue=(k(),v(K)),PE=yt(),pZ="Error initializing environment manager",LE="BOOT_PROPS_FILE_PATH",LM=!1,EZ={[Ue.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[Ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},ao={};Object.assign(vM,UM.exports={BOOT_PROPS_FILE_PATH:LE,getHdbBasePath:_Z,setHdbBasePath:gZ,get:DM,initSync:TZ,setProperty:je,initTestEnvironment:yZ,setCloneVar:RZ});function _Z(){return ao[Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(_Z,"getHdbBasePath");function gZ(e){ao[Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(gZ,"setHdbBasePath");function DM(e){let t=PE.getConfigValue(e);return t===void 0?ao[e]:t}o(DM,"get");function je(e,t){EZ[e]&&(ao[e]=t),PE.updateConfigObject(e,t)}o(je,"setProperty");function SZ(){let e;try{e=Hf.getPropsFilePath(),zy.accessSync(e,zy.constants.F_OK|zy.constants.R_OK),LM=!0;let t=hZ(e);return ao[Ue.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(Ue.HDB_SETTINGS_NAMES.INSTALL_USER),ao[Ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(Ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),ao[LE]=e,!0}catch{return kf.trace(`Environment manager found no properties file at ${e}`),!1}}o(SZ,"doesPropFileExist");function TZ(e=!1){try{((LM||SZ()||Hf.noBootFile())&&!MM||e)&&(PE.initConfig(e),ao[Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=PE.getConfigValue(Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){kf.error(pZ),kf.error(t),console.error(t),process.exit(1)}}o(TZ,"initSync");var MM=!1;function RZ(e){MM=e}o(RZ,"setCloneVar");function yZ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,l=vc.join(__dirname,"../../","unitTests");ao[LE]=vc.join(l,"hdb_boot_properties.file"),je(Ue.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,vc.join(l,"settings.test")),je(Ue.HDB_SETTINGS_NAMES.INSTALL_USER,PM.userInfo()?PM.userInfo().username:void 0),je(Ue.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),je(Ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY,vc.join(l,"envDir","log")),je(Ue.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),je(Ue.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),je(Ue.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),je(Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,vc.join(l,"envDir")),je(Ue.CONFIG_PARAMS.STORAGE_PATH,vc.join(l,"envDir")),s&&(je(Ue.CONFIG_PARAMS.HTTP_SECUREPORT,DM(Ue.CONFIG_PARAMS.HTTP_PORT)),je(Ue.CONFIG_PARAMS.HTTP_PORT,null)),je(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),je(Ue.CONFIG_PARAMS.HTTP_PORT,9926),je(Ue.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),je(Ue.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT,9925),je(Ue.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Hf.isEmpty(i)?!1:i),je(Ue.CONFIG_PARAMS.HTTP_CORS,Hf.isEmpty(i)?!1:i),je(Ue.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),je(Ue.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),je(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),je(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),je(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,vc.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),je(Ue.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Hf.isEmpty(c)?!1:c),a&&(je("CORS_ACCESSLIST",a),je(Ue.CONFIG_PARAMS.HTTP_CORSACCESSLIST,a)),n&&(je(Ue.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),je(Ue.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(je(Ue.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),je(Ue.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(je(Ue.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),je(Ue.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${LE}. Please check your boot props and settings files`;kf.fatal(r),kf.error(t)}}o(yZ,"initTestEnvironment")});var jy=M((fIe,xM)=>{if(__filename.endsWith("dev.js")&&!process.env.HARPER_SKIP_COMPILE){let e=require("fast-glob"),{tmpdir:t}=require("node:os"),{relative:r,join:n}=require("node:path"),{existsSync:s,statSync:i,readFileSync:a,writeFileSync:c,unlinkSync:l}=require("node:fs"),{isMainThread:u}=require("node:worker_threads"),{spawnSync:d,spawn:f}=require("node:child_process");process.setSourceMapsEnabled(!0);let{PACKAGE_ROOT:m}=Rt(),h=["bin","components","dataLayer","resources","server","sqlTranslator","upgrade","utility","validation"],p="ts-build";if(u){let y=!1,T=!1;if(T=s(n(m,p))){let R=new Set;e.sync(h.map(I=>`${I}/**/*.ts`),{cwd:m}).forEach(I=>{let P=0,Y=0;try{R.add(I),P=i(n(m,I)).mtimeMs-5e3,Y=i(n(m,p,I.replace(/.ts$/,".js"))).mtimeMs}catch{}P>Y&&(y=!0)}),e.sync(h.map(I=>`${I}/**/*.js`),{cwd:n(m,p)}).forEach(I=>{if(!R.has(I.replace(/.js$/,".ts")))try{l(n(m,p,I))}catch{}})}else y=!0;if(y){console.log("Compiling TypeScript...");let R=d("npx",["tsc"],{cwd:m});if(R.stdout?.length&&console.log(R.stdout.toString()),R.stderr?.length&&console.log(R.stderr.toString()),T){let I=n(t(),"harperdb-tsc.pid"),P=!1;if(s(I))try{process.kill(+a(I,"utf8"),0),P=!0}catch{}if(!P){console.log("Starting background TypeScript compilation...");let Y=f("npx",["tsc","--watch"],{detached:!0,cwd:m,stdio:"ignore"});Y.on("error",te=>{console.error("Error trying to compile TypeScript",te)}),Y.pid&&c(I,String(Y.pid),"utf-8"),Y.unref()}}}}let _=xM.constructor,g=_._findPath;_._findPath=function(y,T,R){if(y.startsWith(".")&&!R&&T.length===1&&T[0].startsWith(m)&&!T[0].includes("node_modules")){let I=r(m,T[0]),P;I.startsWith(p)?P=n(m,r(p,I)):P=n(m,p,I),(y.endsWith(".js")||y.endsWith(".ts"))&&(y=y.slice(0,-3));let Y=n(P,y),te=Y+".js";if(s(te))return te;if(Y.includes(".")&&s(Y))return Y}return g(y,T,R)}}});var At=M((mIe,$M)=>{"use strict";var Kf=(k(),v(K)),AZ=ie(),yn=ce(),Yf=require("path"),bZ=require("minimist"),BM=require("fs-extra"),FM=require("lodash");yn.initSync();var{CONFIG_PARAMS:_a,DATABASES_PARAM_CONFIG:Gf,SYSTEM_SCHEMA_NAME:DE}=Kf,qf,$f,Vf;function HM(){if(qf!==void 0)return qf;if(yn.getHdbBasePath()!==void 0)return qf=yn.get(_a.STORAGE_PATH)||Yf.join(yn.getHdbBasePath(),Kf.DATABASES_DIR_NAME),qf}o(HM,"getBaseSchemaPath");function kM(){if($f!==void 0)return $f;if(yn.getHdbBasePath()!==void 0)return $f=qM(DE),$f}o(kM,"getSystemSchemaPath");function GM(){if(Vf!==void 0)return Vf;if(yn.getHdbBasePath()!==void 0)return Vf=yn.get(Kf.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Yf.join(yn.getHdbBasePath(),Kf.TRANSACTIONS_DIR_NAME),Vf}o(GM,"getTransactionAuditStoreBasePath");function IZ(e,t){let r=yn.get(_a.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Yf.join(GM(),e.toString())}o(IZ,"getTransactionAuditStorePath");function qM(e,t){e=e.toString(),t=t&&t.toString();let r=yn.get(Kf.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Yf.join(HM(),e)}o(qM,"getSchemaPath");function NZ(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,bZ(process.argv));let n=r[_a.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(a){if(!AZ.isObject(n))throw a;i=n}for(let a of i){let c=a[DE];if(!c)continue;let l=yn.get(_a.DATABASES);l=l??{};let u=c?.tables?.[t]?.[Gf.PATH];if(u)return FM.set(l,[DE,Gf.TABLES,t,Gf.PATH],u),yn.setProperty(_a.DATABASES,l),u;let d=c?.[Gf.PATH];if(d)return FM.set(l,[DE,Gf.PATH],d),yn.setProperty(_a.DATABASES,l),d}}let s=r[_a.STORAGE_PATH.toUpperCase()];if(s){if(!BM.pathExistsSync(s))throw new Error(s+" does not exist");let i=Yf.join(s,e);return BM.mkdirsSync(i),yn.setProperty(_a.STORAGE_PATH,s),i}return kM()}o(NZ,"initSystemSchemaPaths");function wZ(){qf=void 0,$f=void 0,Vf=void 0}o(wZ,"resetPaths");$M.exports={getBaseSchemaPath:HM,getSystemSchemaPath:kM,getTransactionAuditStorePath:IZ,getTransactionAuditStoreBasePath:GM,getSchemaPath:qM,initSystemSchemaPaths:NZ,resetPaths:wZ}});var An=M((_Ie,zM)=>{"use strict";var OZ=tn().LMDB_ERRORS_ENUM,pIe=require("lmdb"),CZ=kt(),EIe=require("buffer").Buffer,{OVERFLOW_MARKER:VM,MAX_SEARCH_KEY_LENGTH:ME}=CZ,KM=["number","string","symbol","boolean","bigint"];function PZ(e){if(e=e?.primaryStore||e,!e)throw new Error(OZ.ENV_REQUIRED)}o(PZ,"validateEnv");function LZ(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(LZ,"stringifyData");function DZ(e){return e instanceof Date?e.valueOf():e}o(DZ,"convertKeyValueToWrite");function MZ(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(KM.includes(typeof e))return e.length>ME?[e.slice(0,ME)+VM]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(KM.includes(typeof i))i.length>ME?r.push(i.slice(0,ME)+VM):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}o(MZ,"getIndexedValues");var vE=0,YM=0;function WM(){YM=Date.now()-performance.now()}o(WM,"adjustStartTime");WM();var vZ=6e4;setInterval(WM,vZ).unref();function UZ(){let e=performance.now()+YM;return e>vE?(vE=e,e):(vE+=488e-6,vE)}o(UZ,"getNextMonotonicTime");zM.exports={validateEnv:PZ,stringifyData:LZ,convertKeyValueToWrite:DZ,getNextMonotonicTime:UZ,getIndexedValues:MZ}});var Wf=M((SIe,jM)=>{"use strict";var xZ=(k(),v(K)).OPERATIONS_ENUM,Qy=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=xZ.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};jM.exports=Qy});var zf=M((yIe,ZM)=>{"use strict";var RIe=Wf(),UE=(k(),v(K)),Jy=ie(),QM=z(),BZ=require("uuid"),{handleHDBError:xE,hdbErrors:FZ}=Ee(),{HDB_ERROR_MSGS:BE,HTTP_STATUS_CODES:FE}=FZ;ZM.exports=JM;function JM(e,t,r){for(let s=0;s<t.length;s++)XM(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];HZ(i,r,e.operation)}}o(JM,"processRows");JM.validateAttribute=XM;function XM(e){if(Buffer.byteLength(String(e))>UE.INSERT_MAX_CHARACTER_SIZE)throw xE(new Error,BE.ATTR_NAME_LENGTH_ERR(e),FE.BAD_REQUEST,void 0,void 0,!0);if(Jy.isEmptyOrZeroLength(e)||Jy.isEmpty(e.trim()))throw xE(new Error,BE.ATTR_NAME_NULLISH_ERR,FE.BAD_REQUEST,void 0,void 0,!0)}o(XM,"validateAttribute");function HZ(e,t,r){if(!e.hasOwnProperty(t)||Jy.isEmptyOrZeroLength(e[t])){if(r===UE.OPERATIONS_ENUM.INSERT||r===UE.OPERATIONS_ENUM.UPSERT){e[t]=BZ.v4();return}throw QM.error("Update transaction aborted due to record with no hash value:",e),xE(new Error,BE.RECORD_MISSING_HASH_ERR,FE.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>UE.INSERT_MAX_CHARACTER_SIZE)throw QM.error(e),xE(new Error,BE.HASH_VAL_LENGTH_ERR,FE.BAD_REQUEST,void 0,void 0,!0)}o(HZ,"validateHash")});function ov(e){Zy=e}function $Z(){qZ=setInterval(function(){for(let e of Xy)if(e.stale){let t=e.getContext()?.url;nv.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},GZ).unref()}var eA,rv,nv,sv,iv,ev,Xy,kZ,co,jf,tv,Zy,lo,HE,GZ,qZ,Qf=fe(()=>{eA=w(An()),rv=w(Ee()),nv=w(z()),sv=w(ce());k();iv=w(ie()),ev=100,Xy=new Set,kZ=(0,iv.convertToMS)(sv.get(U.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,co={CLOSED:0,OPEN:1,LINGERING:2};o(ov,"replicationConfirmation");lo=class e{static{o(this,"DatabaseTransaction")}#e;writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=co.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===co.OPEN)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),Xy.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn?.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(Xy.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(jf&&!this.overloadChecked&&performance.now()-tv>kZ)throw new rv.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===co.CLOSED)throw new Error("Can not use a transaction that is no longer open");if(this.open===co.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,eA.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 h=f;h<this.validated;h++)this.writes[h]?.validate?.(this.timestamp);let m;for(let h=f;h<this.validated;h++){let p=this.writes[h];p&&(p.before||p.beforeIntermediate)&&(m=!0)}if(m)return(async()=>{try{for(let h=0;h<2;h++){let p;for(let _=f;_<this.validated;_++){let g=this.writes[_];if(!g)continue;let y=g[h===0?"before":"beforeIntermediate"];if(y){let T=y();p?p.push?p.push(T):p=[p,T]:p=T}}p&&await(p.push?Promise.all(p):p)}}catch(h){throw this.abort(),h}return this.commit(t)})()}catch(f){throw this.abort(),f}n||this.doneReadTxn(),this.open=t?.doneWriting?co.LINGERING:co.OPEN;let s,i=[],a=0;this.writes=this.writes.filter(f=>f);let c=o(f=>{f.commit(r,f.entry,n)},"doWrite"),l=o(()=>{let f=this.writes[a++];if(f)if(f.key){(n>0||!f.entry)&&(f.entry=f.store.getEntry(f.key));let m=f.store.ifVersion(f.key,f.entry?.version??null,l);s=s||m}else l();else for(let m of this.writes)c(m)},"nextCondition"),u=this.lmdbDb;if(this.writes.length>0&&(u?.retryRisk&&(u.retryRisk*=.99),this.writes.length+(u?.retryRisk||0)<ev>>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 jf||(jf=s,tv=performance.now(),jf.then(()=>{jf=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,h=this.writes[this.writes.length-1];Zy&&h&&i.push(Zy(m,h.store.getEntry(h.key).localTime,this.replicatedConfirmation))}return this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))}else return u&&(u.retryRisk=(u.retryRisk||0)+ev/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=co.CLOSED,this.writes=[]}getContext(){return this.#e}setContext(t){this.#e=t}},HE=class extends lo{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,eA.getNextMonotonicTime)())}getReadTxn(){}},GZ=3e4;o($Z,"startMonitoringTxns");$Z()});var av,$n,tA,pu=fe(()=>{av=require("events"),$n=class extends av.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new tA;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)}},tA=class{static{o(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function vt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===co.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 lo;e.timestamp&&(n.timestamp=e.timestamp),e.replicatedConfirmation&&(n.replicatedConfirmation=e.replicatedConfirmation),n.setContext(e),e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,a)}catch(c){a(c)}return i(s);function i(c){let l=n.commit({doneWriting:!0});return l.then?l.then(()=>c):c}function a(c){throw n.abort({}),c}}var cv,Uc=fe(()=>{cv=w(Ws());Qf();o(vt,"transaction");(0,cv._assignPackageExport)("transaction",vt);vt.commit=function(e){let t=(e.getContext?.()||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};vt.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 nA={};Ce(nA,{add:()=>kE,applyReverse:()=>lv,getRecordAtTime:()=>rA,rebuildUpdateBefore:()=>GE});function kE(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 GE(e,t,r){let n=null;for(let s in e)if(s in t){let i=t[s];if(i?.__op__){let a=e[s];if(a?.__op__)if(a.__op__===i.__op__)n||(n={}),n[s]=a;else throw new Error("Can not merge updates with different operations");else n||(n={}),n[s]=a,kE(n,s,i)}else r&&(n||(n={}),n[s]=i)}else n||(n={}),n[s]=e[s];return n}function lv(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=VZ[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=uv}}function rA(e,t,r){let n=r.rootStore.auditStore,s={...e.value},i=e.localTime;for(;i>t;){let l=n.get(i),u=Ut(l);switch(u.type){case"put":s=u.getValue(r);break;case"patch":lv(s,u.getValue(r));break;case"delete":s=null}i=u.previousLocalTime}let a={},c=0;for(let l in s)s[l]===uv&&(a[l]=!0,c++);for(;c>0&&i>0;){let l=n.get(i),u=Ut(l),d;switch(u.type){case"put":d=u.getValue(r);break;case"patch":d=u.getValue(r);break}for(let f in d)a[f]&&(s[f]=d[f],a[f]=!1,c--);i=u.previousLocalTime}if(c>0)for(let l in a)s[l]=null;return s}var VZ,uv,qE=fe(()=>{uo();o(kE,"add");kE.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)};VZ={add:kE};o(GE,"rebuildUpdateBefore");o(lv,"applyReverse");uv={};o(rA,"getRecordAtTime")});var Ni=M(VE=>{var $E=z();for(let e of["trace","debug","info","warn","error","fatal","notify"])$E.logsAtLevel(e)&&(VE[e]=$E[e]);VE.loggerWithTag=e=>$E.loggerWithTag(e,!0);VE.setLogLevel=$E.setLogLevel});var _v={};Ce(_v,{parse:()=>oA,streamAsJSON:()=>Xf,stringify:()=>xc});function Xf(e){return new sA({value:e})}function dv(e){return console.error(e),JSON.stringify(Jf(e))}function fv(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function xc(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===pv)return Ev(e);if(t.resolution)return t.resolution.then(()=>xc(e));throw t}}function Ev(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+=Ev(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+xc(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function oA(e){return e?.length>0?(typeof e!="string"&&(e=e.toString()),WZ.test(e)?KZ.parse(e):JSON.parse(e)):null}var mv,iA,hv,KZ,YZ,pv,Jf,sA,WZ,aA=fe(()=>{mv=require("stream"),iA=w(z()),hv=w(require("json-bigint-fixes")),KZ=(0,hv.default)({useNativeBigInt:!0}),YZ=1e4,pv={message:"Cannot serialize BigInt to JSON"};BigInt.prototype.toJSON=function(){throw pv};({errorToString:Jf}=iA);o(Xf,"streamAsJSON");sA=class extends mv.Readable{static{o(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let a;for(;;){try{a=i.next(),a.then&&(yield a.then(c=>(a=c,""),c=>(iA.warn("Error serializing in stream",c),a={done:!1,value:{error:Jf(c)}},i={next:o(()=>({done:!0}),"next")},"")))}catch(c){a={done:!1,value:{error:Jf(c)}},i={next:o(()=>({done:!0}),"next")}}if(a.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(a.value)}}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),dv)}catch(s){yield dv(s)}else yield xc(t)}else yield xc(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);fv(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(Jf(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>YZ?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 fv(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(Jf(r)),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};o(dv,"handleError");o(fv,"when");o(xc,"stringify");o(Ev,"jsStringify");WZ=/[[,:]\s*-?\d{16,}/;o(oA,"parse")});var wv={};Ce(wv,{asyncSerialization:()=>fA,contentTypes:()=>dA,findBestSerializer:()=>YE,getDeserializer:()=>ho,hasAsyncSerialization:()=>mA,registerContentHandlers:()=>tm,serialize:()=>rm,serializeMessage:()=>ga,toCsvStream:()=>KE});function zZ(e){try{return e?.[0]===123?uA(e):e}catch{return e}}function tm(e){e.register(jZ,{serializers:[{regex:/^application\/json$/,serializer:Xf},{regex:/^application\/cbor$/,serializer:o(function(t){return new Bc.EncoderStream(em).end(t)},"serializer")},{regex:/^application\/(x-)?msgpack$/,serializer:o(function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Fc.Readable.from((0,wi.encodeIter)(t,em)):(0,wi.pack)(t)},"serializer")},{regex:/^text\/csv$/,serializer:o(function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),KE(t)},"serializer")}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,wi.unpack)(r))}catch(s){s.statusCode=400,n(s)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,n)=>{try{n(null,(0,Bc.decode)(r))}catch(s){s.statusCode=400,n(s)}})}function YE(e){let t=e.headers.asObject||e.headers,r=e.requestedContentType??t.accept,n,s=0,i,a,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let l of c){let[u,...d]=l.split(/\s*;\s*/),f=1,m={q:1};for(let p of d){let _=p.indexOf("=");m[p.substring(0,_)]=p.substring(_+1)}f=+m.q;let h=nn.get(u);if(h){let p=(h.q||1)*f;p>s&&(n=h,i=h.type||u,s=p,a=m)}}if(!n){if(r)throw new Tv.ClientError("No supported content types found in Accept header, supported types include: "+Array.from(nn.keys()).join(", "),406);n=nn.get("application/json"),i="application/json"}return{serializer:n,type:i,parameters:a}}function rm(e,t,r){let n=Sv&&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 Ss)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),s=e;else{let i=YE(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}),lA.default.warn?.(`Error serializing error ${t?.url||t}: ${l}`),l)),e.getColumns=c}let a=i.serializer.serializeStream(e,r);return n&&(r.headers.set("Content-Encoding","br"),a=a.pipe((0,mo.createBrotliCompress)({params:{[mo.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?mo.constants.BROTLI_MODE_TEXT:mo.constants.BROTLI_MODE_GENERIC,[mo.constants.BROTLI_PARAM_QUALITY]:2}}))),a}s=i.serializer.serialize(e,r)}return n&&s?.length>Sv?(r.headers.set("Content-Encoding","br"),new Promise((i,a)=>(0,mo.brotliCompress)(s,(c,l)=>{c?a(c):i(l)}))):s}function ga(e,t,r){if(e?.contentType!=null&&e.data!=null)return e.data;fo=r?void 0:[];try{let n;if(t){let s=t.serialize;if(s)n=s(e);else{let i=YE(t);s=t.serialize=i.serializer.serialize,n=s(e)}}else n=Zf(e);return fo?.length>0?(fo.length===1?fo[0]:Promise.all(fo)).then(()=>ga(e,t,!0)):n}finally{fo=void 0}}function fA(e){if(fo)fo.push(e);else throw new Error("Unable to serialize asynchronously")}function mA(){return!!fo}function QZ(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 XZ(e){return JZ.includes(e)}function ZZ(e){let t=e.indexOf(";"),r;if(t>-1){r={};let n=e.slice(t+1).split(";");for(let s of n){let[i,a]=s.split("=");r[i.trim()]=a.trim()}e=e.slice(0,t)}return{type:e,parameters:r}}function ho(e="",t=!1){let r=ZZ(e),n=r.type&&nn.get(r.type)?.deserialize||e6(r);return t?s=>QZ(s).then(n):n}function e6(e){return e.type.startsWith("text/")?(e.parameters?.charset&&!XZ(e.parameters.charset)&&lA.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 uA(t)}catch{}return{contentType:e.type||"application/octet-stream",data:t}}}function t6(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 KE(e,t){let r=Fc.default.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),n={};t&&(n.fields=t.map(a=>({label:a,value:a})));let s={objectMode:!0},i=new Av.Transform(n,s);return r.pipe(i)}var wi,Bc,mo,Tv,Fc,Rv,cA,yv,lA,Av,bv,Iv,Zf,uA,em,nn,dA,gv,Nv,jZ,Sv,fo,JZ,po=fe(()=>{aA();wi=require("msgpackr"),Bc=require("cbor-x"),mo=require("zlib"),Tv=w(Ee()),Fc=w(require("stream"));Pr();Rv=w(Ws()),cA=w(ce());k();yv=w(require("yaml")),lA=w(Ni());Ts();Av=require("json2csv"),bv=w(require("fastify-plugin")),Iv=cA.default.get(U.SERIALIZATION_BIGINT)!==!1,Zf=Iv?xc:JSON.stringify,uA=Iv?oA:JSON.parse,em={useRecords:!1,useToJSON:!0},nn=new Map,dA=nn;ve.contentTypes=dA;(0,Rv._assignPackageExport)("contentTypes",dA);nn.set("application/json",{serializeStream:Xf,serialize:Zf,deserialize(e){return uA(e)},q:.8});gv=new Bc.Encoder(em);nn.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Bc.EncoderStream(em).end(e)},serialize:gv.encode,deserialize:gv.decode,q:1});nn.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Fc.Readable.from((0,wi.encodeIter)(e,em)):(0,wi.pack)(e)},serialize:wi.pack,deserialize:wi.unpack,q:.9});nn.set("text/csv",{serializeStream(e,t){return t.headers.set("Content-Disposition",'attachment; filename="data.csv"'),KE(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]),KE(e,e?.getColumns?.())},q:.1});nn.set("text/plain",{serialize(e){return e.toString()},serializeStream(e){return Fc.Readable.from(e.map?e.map(t=>t.toString()):e)},deserialize(e){return e.toString()},q:.2});nn.set("text/yaml",{serialize(e){return yv.stringify(e,{aliasDuplicateObjects:!1})},q:.7});nn.set("text/event-stream",{serializeStream:o(function(e){return Fc.Readable.from(t6(e,this.serialize))},"serializeStream"),serialize:o(function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
5
5
  `),e.data){let r=e.data;typeof r=="object"&&(r=Zf(r)),t+="data: "+r+`
6
6
  `}return e.id&&(t+="id: "+e.id+`
7
7
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -10,26 +10,26 @@
10
10
 
11
11
  `:`data: ${e}
12
12
 
13
- `},"serialize"),compressible:!1,q:.8});nn.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()}});bv={type:"application/json",serializeStream:Xf,serialize:Zf,deserialize:VZ,q:.5};nn.set("*/*",bv);nn.set("",bv);o(VZ,"tryJSONParse");o(tm,"registerContentHandlers");KZ=(0,yv.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=YE(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(YE,"findBestSerializer");_v=oA.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(rm,"serialize");o(_a,"serializeMessage");o(uA,"asyncSerialization");o(dA,"hasAsyncSerialization");o(YZ,"streamToBuffer");WZ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(zZ,"isBufferEncoding");o(jZ,"parseContentType");o(ho,"getDeserializer");o(QZ,"deserializerUnknownType");o(JZ,"transformIterable");o(KE,"toCsvStream")});var EA={};Ce(EA,{Blob:()=>Ss,blobsWereEncoded:()=>Hc,databasePaths:()=>mA,decodeBlobsWithWrites:()=>t_,decodeFromDatabase:()=>kc,decodeWithBlobCallback:()=>r_,deleteBlob:()=>XE,deleteBlobsInObject:()=>ga,deleteRootBlobPathsForDB:()=>pA,encodeBlobsAsBuffers:()=>a6,encodeBlobsWithFilePath:()=>e_,findBlobsInObject:()=>_u,getFileId:()=>ZE,getFilePathForBlob:()=>Uv,getRootBlobPathsForDB:()=>om,setDeletionDelay:()=>t6});function Dv(){}function XE(e){let t=Uv(e);t&&setTimeout(()=>{(0,Ze.unlink)(t,r=>{r&&Eo.default.debug?.("Error trying to remove blob file",r)})},Mv)}function t6(e){Mv=e}function vv(e){let t=bn.get(e);if(!t)t={storageIndex:0,fileId:null,store:In},bn.set(e,t);else{if(t.saving)return t;t.store=In}return n6(t),t.source?fA(e,t.source,t):t.contentBuffer?r6(e,t):fA(e,sm.Readable.from(e.stream()),t),t}function fA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,Ze.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.end(Buffer.concat([p(BigInt(g.length)+0xff000000000000n),g]));return}let m=!1;e.size!==void 0&&(f.write(p(e.size)),m=!0);let h;a?(m||f.write(ZZ),h=(0,QE.createDeflate)(),t.pipe(h).pipe(f)):(m||f.write(XZ),t.pipe(f)),t.on("error",_);function p(g){let y=BigInt(g),T=new Uint8Array(Rr),R=new DataView(T.buffer);return y|=BigInt(a?hA:Lv)<<48n,R.setBigInt64(0,y),T}o(p,"createHeader");function _(g){i.unlock(d,0);let y=f.fd;g?(y&&(0,Ze.close)(y),u(g)):c?(0,Ze.fdatasync)(y,T=>{T&&u(T),l(),(0,Ze.close)(y)}):(l(),(0,Ze.close)(y))}o(_,"finished"),f.on("error",_).on("finish",()=>{if(m)_();else{let g=h?h.bytesWritten:f.bytesWritten-Rr;e.size=g,(0,Ze.write)(f.fd,p(g),0,Rr,0,_)}})}),e}function ZE(e){return bn.get(e)?.fileId}function Uv(e){let t=bn.get(e);return t?.fileId&&im(t)}function om(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 Eo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,JE.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,go.join)(n,e.databaseName)):t=[(0,go.join)((0,JE.getHdbBasePath)(),"blobs",e.databaseName)],mA.set(e,t)}return t}async function pA(e){let t=om(e);t&&await Promise.all(t.map(r=>xv(r)))}async function xv(e){if((0,Ze.existsSync)(e)){for(let t of await(0,js.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await xv((0,go.join)(e,t.name));else try{await(0,js.unlink)((0,go.join)(e,t.name))}catch(r){Eo.default.warn?.("Error deleting file",r)}try{await(0,js.rmdir)(e)}catch(t){Eo.default.warn?.("Error deleting directory",t)}}}function im({storageIndex:e,fileId:t,store:r}){let n=om(r);return(0,go.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 r6(e,t){let r=t.contentBuffer,n=r.length;if(!(n<Pv))return e.size=n,fA(e,sm.Readable.from([r]),t)}function n6(e){let t=om(e.store),r=s6(),n=t?.length>1?i6(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=im(e),a=(0,go.dirname)(i);(0,Ze.existsSync)(a)||(0,Cv.ensureDirSync)(a),e.filePath=i}function s6(){let e=Ov.get(In);if(!e){let t=0,r=om(In);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=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>a&&(a=l)}s+=a,n=(0,go.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(In.getUserSharedBuffer("blob-file-id",e.buffer)),Ov.set(In,e)}return Number(Atomics.add(e,0,1n))}function i6(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(jE);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,o6(e)),e.frequencyTable[t%jE]}async function o6(e){if(!js.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a=await(0,js.statfs)(s),c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(jE),n=t.map(s=>1/s);for(let s=0;s<jE;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function e_(e,t,r){Eu=t,In=r,Hc=!1;try{return e()}finally{Eu=void 0,In=void 0}}function a6(e){Gr=[];let t;try{t=e()}catch(n){throw Gr=void 0,n}let r=Gr.length<2?Gr[0]:Promise.all(Gr);return Gr=void 0,r?r.then(()=>e()):t}function t_(e,t){try{Gr=[],Fc=t,e()}catch(n){throw Fc=void 0,Gr=void 0,n}Fc=void 0;let r=Gr.length<2?Gr[0]:Promise.all(Gr);return Gr=void 0,r}function r_(e,t,r){In=r;try{return Fc=t,e()}finally{Fc=void 0}}function kc(e,t){return In=t,e()}function ga(e){_u(e,t=>{XE(t)})}function _u(e,t){if(e instanceof Ss)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&_u(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&_u(e[r],t)}}function c6(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var _o,js,Ze,QE,sm,Cv,JE,go,Eo,Pv,Rr,Lv,hA,Nv,XZ,ZZ,wv,bn,Fc,Ss,Eu,Gr,In,Hc,nm,WE,e6,zE,Mv,mA,Ov,jE,Ts=fe(()=>{_o=require("msgpackr"),js=require("node:fs/promises"),Ze=require("node:fs"),QE=require("node:zlib"),sm=require("node:stream"),Cv=require("fs-extra"),JE=w(ce());k();go=require("path"),Eo=w(Ni());po();Pv=8192,Rr=8,Lv=0,hA=1,Nv=255,XZ=new Uint8Array([0,Lv,255,255,255,255,255,255]),ZZ=new Uint8Array([0,hA,255,255,255,255,255,255]),wv=0xffffffffffff,bn=new WeakMap,Ss=global.Blob||c6(),Hc=!1,nm=new Uint8Array(8),WE=new DataView(nm.buffer),e6=6e4;o(Dv,"InstanceOfBlobWithNoConstructor");Dv.prototype=Ss.prototype;zE=class e extends Dv{static{o(this,"FileBackedBlob")}type="";size;#e;#r;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#r??=[],this.#r.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=bn.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(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=bn.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=im(t),a,c=o(async()=>{let l,u=Rr;try{if(l=await(0,js.readFile)(i),l.length>=Rr){l.copy(nm,0,0,Rr);let f=WE.getBigUint64(0);if(Number(f>>48n)===Nv)throw new Error("Error in blob: "+buffer.subarray(Rr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<wv&&(this.size=u,this.#r))for(let m of this.#r)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,h=t.fileId+":blob";if(a)throw new Error("Incomplete blob");return new Promise((p,_)=>{if(m.attemptLock(h,0,()=>(a=!0,m.unlock(h,0),p(c()))))return a=!0,m.unlock(h,0),p(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===hA?new Promise((f,m)=>{(0,QE.deflate)(l.subarray(Rr),(h,p)=>{h?m(h):f(d(p))})}):d(l.subarray(Rr))},"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=bn.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(_){_.enqueue(r),_.close()}});let i=im(t),a,c=0,l=0,u,d,f,m=!1,h=this;return new ReadableStream({start(){let _=1e3,g=o((y,T)=>{(0,Ze.open)(i,"r",(R,I)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Eo.default.debug?.("File does not exist yet, waiting for it to be created",i,_),_-- >0))return setTimeout(()=>{p(),g(y,T)},20).unref();T(R),h.#e?.forEach(P=>P(R))}else a=I,y(I)})},"openFile");return new Promise(g)},pull:o(_=>{let g=0,y=100;return new Promise(o(function T(R,I){function P(te){(0,Ze.close)(a),clearTimeout(d),u&&u.close(),I(te),h.#e?.forEach(x=>x(te))}o(P,"onError");let Y=Buffer.allocUnsafe(262144);(0,Ze.read)(a,Y,0,Y.length,c,(te,x,$)=>{if(l+=x,te)return P(te);if(c===0){if(x<Rr){y-- >0&&f!==!1?(p(),Eo.default.debug?.("File was empty, waiting for data to be written",i,y),setTimeout(()=>T(R,I),20).unref()):(Eo.default.debug?.("File was empty, throwing error",i,y),I(new Error(`Blob ${t.fileId} was empty`)));return}$.copy(nm,0,0,Rr);let j=WE.getBigUint64(0);if(Number(j>>48n)===Nv)return P(new Error("Error in blob: "+$.subarray(Rr)));if(g=Number(j&0xffffffffffffn),g<wv&&h.size!==g&&(h.size=g,h.#r))for(let V of h.#r)V(g);$=$.subarray(Rr,x),l-=Rr}else if(x===0){let j=Buffer.allocUnsafe(8);return(0,Ze.read)(a,j,0,Rr,0,V=>{if(V)return P(V);if(nm.set(j),g=Number(WE.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?d=setTimeout(()=>{P(new Error("File read timed out"))},e6).unref():(u=(0,Ze.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,T(R,I))}),T(R,I)):m?P(new Error("Blob is incomplete")):(m=!0,T(R,I));return}(0,Ze.close)(a),_.close(),R()})}else $=$.subarray(0,x);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=x,T(R,I);s&&l>=s&&(l>s&&($=$.subarray(0,s-c)),l=g=s),n&&n>c&&($=$.subarray(n-c))}c+=x;try{_.enqueue($)}catch(j){return Eo.default.debug?.("Error enqueuing chunk",j),R()}l===g&&((0,Ze.close)(a),_.close()),R()})},"readMore"))},"pull"),cancel(){(0,Ze.close)(a),clearTimeout(d),u&&u.close()}});function p(){if(f===void 0){let _=t.store,g=t.fileId+":blob";f=!_.attemptLock(g,0,()=>{f=!1,_.unlock(g,0)}),f||_.unlock(g,0)}return f}}slice(t,r,n){let s=bn.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};bn.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};bn.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(In=t?.primaryStore?.rootStore,!In)throw new Error("No target table specified");return vv(this).saving??Promise.resolve()}},Mv=500;o(XE,"deleteBlob");o(t6,"setDeletionDelay");global.createBlob=function(e,t){let r=new zE(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(bn.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof sm.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=sm.Readable.from(e);else throw new Error("Invalid source type");return r};o(vv,"saveBlob");o(fA,"writeBlobWithStream");o(ZE,"getFileId");o(Uv,"getFilePathForBlob");mA=new Map;o(om,"getRootBlobPathsForDB");o(pA,"deleteRootBlobPathsForDB");o(xv,"rimrafSteadily");o(im,"getFilePath");o(r6,"writeBlobWithBuffer");o(n6,"generateFilePath");Ov=new Map;o(s6,"getNextFileId");jE=128;o(i6,"getNextStorageIndex");o(o6,"createFrequencyTableForStoragePaths");o(e_,"encodeBlobsWithFilePath");o(a6,"encodeBlobsAsBuffers");o(t_,"decodeBlobsWithWrites");o(r_,"decodeWithBlobCallback");o(kc,"decodeFromDatabase");o(ga,"deleteBlobsInObject");o(_u,"findBlobsInObject");(0,_o.addExtension)({Class:Ss,type:11,unpack:o(function(e){let t=(0,_o.unpack)(e),r=new zE;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(bn.set(r,{storageIndex:t[1],fileId:t[2],store:In}),Fc)return Fc(r)??r;if(!In)throw new Error("No store specified, cannot load blob from storage")}else bn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=bn.get(e);if(Eu!==void 0&&(Hc=!0,t?.recordId!==void 0&&t.recordId!==Eu))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<Pv)return r.size=t.contentBuffer.length,(0,_o.pack)([r,t.contentBuffer])}if(Eu!==void 0){if(t=vv(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Eu,(0,_o.pack)([r,t.storageIndex,t.fileId])}if(t)try{let n=(0,Ze.readFileSync)(im(t));if(n.length>=Rr&&(n.copy(nm,0,0,Rr),Number(WE.getBigUint64(0)&0xffffffffffffn)===n.length-Rr))return Buffer.concat([(0,_o.pack)([r]),n]);if(Gr)Gr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Gr)return Gr.push(e.bytes()),Buffer.alloc(0);throw n}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,_o.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(c6,"polyfillBlob")});var Gv={};Ce(Gv,{onStorageReclamation:()=>am,runReclamationHandlers:()=>TA,setAvailableSpaceRatioGetter:()=>u6});function am(e,t,r){(r||(0,s_.getWorkerIndex)()===(0,s_.getWorkerCount)()-1)&&(n_.has(e)||n_.set(e,[]),n_.get(e).push({priority:0,handler:t}),SA||(SA=setTimeout(TA,Fv).unref()))}async function TA(){for(let[e,t]of n_)try{let r=await kv(e),n=l6/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(gA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){gA.default.error?.("Error running storage reclamation handlers",r)}SA=setTimeout(TA,Fv).unref()}function u6(e){kv=e??Hv}var _A,s_,gA,i_,Bv,n_,l6,Fv,SA,Hv,kv,o_=fe(()=>{_A=require("node:fs/promises"),s_=w(st()),gA=w(Ni());k();i_=w(ce()),Bv=w(ie());i_.default.initSync();n_=new Map,l6=i_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,Fv=(0,Bv.convertToMS)(i_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(am,"onStorageReclamation");Hv=o(async e=>{if(_A.statfs){let t=await(0,_A.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"),kv=Hv;o(TA,"runReclamationHandlers");o(u6,"setAvailableSpaceRatioGetter")});var eU={};Ce(eU,{ACTION_32_BIT:()=>d_,ACTION_64_BIT:()=>m6,AUDIT_STORE_OPTIONS:()=>um,Decoder:()=>qc,HAS_BLOBS:()=>Nn,HAS_CURRENT_RESIDENCY_ID:()=>$c,HAS_EXPIRATION_EXTENDED_TYPE:()=>mm,HAS_ORIGINATING_OPERATION:()=>fm,HAS_PREVIOUS_RESIDENCY_ID:()=>Vc,REMOTE_SEQUENCE_UPDATE:()=>f_,createAuditEntry:()=>Su,getLastRemoved:()=>NA,openAuditStore:()=>l_,readAuditEntry:()=>Ut,removeAuditEntry:()=>u_,setAuditRetention:()=>f6,transactionKeyEncoder:()=>Qv});function l_(e){let t=e.auditStore=e.openDB(RA.AUDIT_STORE_NAME,{create:!1,...um});t||(t=e.auditStore=e.openDB(RA.AUDIT_STORE_NAME,um),$v(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=AA;am(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,h;try{for(let{key:p,value:_}of t.getRange({start:1,snapshot:!1,end:Date.now()-yA/(1+i*i)})){try{m=u_(t,p,_)}catch(g){gu.warn("Error removing audit entry",g)}if(h=p,await new Promise(setImmediate),++f>=d6){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,yA/10):($v(t,h),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,lm.getWorkerIndex)()===(0,lm.getWorkerCount)()-1&&c(),(0,lm.getWorkerIndex)()===0&&!qv)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(qv=!0,gu.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function u_(e,t,r){let n=h6(r),s;if(n&Nn){s=Ut(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&kc(()=>ga(s.getValue(i)),i.rootStore)}if((n&15)===bA){s=s||Ut(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 $v(e,t){IA[0]=t,e.put(Symbol.for("last-removed"),Jv)}function NA(e){let t=e.get(Symbol.for("last-removed"));if(t)return Jv.set(t),IA[0]}function f6(e,t=AA){yA=e,AA=t}function Su(e,t,r,n,s,i,a,c,l,u,d,f,m){let h=Xv[a];if(!h)throw new Error(`Invalid audit entry type ${a}`);let p=1;if(n&&(n>1?Sa.setFloat64(0,n):Rs.set(wA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}y(s),y(t),g(r),Sa.setFloat64(p,e),p+=8,l&$c&&y(u),l&Vc&&y(d),l&mm&&(Sa.setFloat64(p,f),p+=8),l&fm&&y(Zv[m]),i?g(i):Rs[p++]=0,l?Sa.setUint32(n?8:0,h|l|3221225472):Rs[n?8:0]=h;let _=Rs.subarray(0,p);if(c)return Buffer.concat([_,c]);return _;function g(T){let R=p;p+=1,p=(0,Gc.writeKey)(T,Rs,p);let I=p-R-1;I>127?I>16383?(gu.error("Key or username was too large for audit entry",T),p=R+1,Rs[R]=0):(Rs.copyWithin(R+2,R+1,p),Sa.setUint16(R,I|32768),p++):Rs[R]=I}function y(T){T<128?Rs[p++]=T:T<16384?(Sa.setUint16(p,T|32768),p+=2):T<1056964608?(Sa.setUint32(p,T|3221225472),p+=4):(Rs[p]=255,Sa.setUint32(p+1,T),p+=5)}}function h6(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 qc(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ut(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new qc(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,h,p,_;if(i&$c&&(m=n.readInt()),i&Vc&&(h=n.readInt()),i&mm&&(p=n.readFloat64()),i&fm){let R=n.readInt();_=Zv[R]}l=n.readInt();let g=n.position,y=n.position+=l,T;return{type:Xv[i&7],tableId:c,nodeId:a,get recordId(){return(0,Gc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return y>g?(0,Gc.readKey)(e,g,y):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(R,I,P){if(i&a_||i&cm&&!I)return T||(T=kc(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),T;if(i&cm&&P)return eA(R.getEntry(this.recordId),P,R)},getBinaryValue(){return i&(a_|cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:h,expiresAt:p,originatingOperation:_}}catch(n){return gu.error("Reading audit entry error",n,e),{}}}var Gc,c_,RA,lm,jv,gu,Rs,Sa,Qv,um,yA,d6,IA,Jv,AA,qv,a_,cm,Vv,bA,Kv,Yv,Wv,zv,d_,m6,f_,$c,Vc,fm,mm,Nn,Xv,Zv,qc,uo=fe(()=>{Gc=require("ordered-binary"),c_=w(ce()),RA=w(kt());k();lm=w(st()),jv=w(ie());Kc();gu=w(z());qE();Ts();o_();(0,c_.initSync)();Rs=Buffer.alloc(2816),Sa=new DataView(Rs.buffer,Rs.byteOffset,2816),Qv={writeKey(e,t,r){return e===dm?(t.set(dm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Gc.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,Gc.readKey)(e,t,r)}},um={encoding:"binary",keyEncoder:Qv},yA=(0,jv.convertToMS)((0,c_.get)(U.LOGGING_AUDITRETENTION))||86400*3,d6=1e3,IA=new Float64Array(1),Jv=new Uint8Array(IA.buffer),AA=1e4,qv=!1;o(l_,"openAuditStore");o(u_,"removeAuditEntry");o($v,"updateLastRemoved");o(NA,"getLastRemoved");o(f6,"setAuditRetention");a_=16,cm=32,Vv=1,bA=2,Kv=3,Yv=4,Wv=5,zv=6,d_=14,m6=15,f_=11,$c=512,Vc=1024,fm=2048,mm=4096,Nn=8192,Xv={put:Vv|a_,[Vv]:"put",delete:bA,[bA]:"delete",message:Kv|a_,[Kv]:"message",invalidate:Yv|cm,[Yv]:"invalidate",patch:Wv|cm,[Wv]:"patch",relocate:zv,[zv]:"relocate"},Zv={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Su,"createAuditEntry");o(h6,"readAction");o(Ut,"readAuditEntry");qc=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var iU={};Ce(iU,{ENTRY:()=>E6,HAS_EXPIRATION:()=>p_,HAS_RESIDENCY_ID:()=>MA,HAS_STRUCTURE_UPDATE:()=>E_,LAST_TIMESTAMP_PLACEHOLDER:()=>dm,LOCAL_TIMESTAMP:()=>p6,METADATA:()=>Ru,NEW_TIMESTAMP_PLACEHOLDER:()=>rU,NO_TIMESTAMP:()=>OA,PENDING_LOCAL_TIME:()=>vA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>wA,RecordEncoder:()=>DA,TIMESTAMP_ASSIGN_LAST:()=>g6,TIMESTAMP_ASSIGN_NEW:()=>nU,TIMESTAMP_ASSIGN_PREVIOUS:()=>sU,TIMESTAMP_PLACEHOLDER:()=>m_,TIMESTAMP_RECORD_PREVIOUS:()=>CA,entryMap:()=>Ta,handleLocalTimeForGets:()=>__,lastMetadata:()=>ct,recordUpdater:()=>UA,removeEntry:()=>Wc});function T6(){return Em[0]=Em[0]^64,_6.getFloat64(0)}function __(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[Ru],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&Ta.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(Ta.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[Ru],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Yc.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Yc.length;u++){let d=Yc[u].deref();(!d||d.isDone||d.isCommitted)&&Yc.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function UA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Tu=i?.localTime?CA|sU:OA:Tu=l?i?.localTime?CA|16384:nU|16384:OA;let h=u?.expiresAt;if(h>=0&&(c|=p_),pm=c,PA=h,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:a,instructedWrite:Tu>0},_,g=0;try{let y=i?.residencyId,T=u?.residencyId;T&&(LA=T,pm|=MA,g|=$c),y!==T&&(g|=Vc,y||(y=0)),c&p_&&(g|=mm),u?.originatingOperation&&(g|=fm),f&&(p.ifVersion=_=i?.version??null),i&&i.value&&i.metadataFlags&Nn&&(r.getBinaryFast(i.localTime)||ga(i.value));let R;if(s!==void 0&&(R=e_(()=>e.put(n,s,p),n,e.rootStore),Hc&&(g|=Nn)),l){let I=u?.user?.username;if(m&&(e_(()=>e.encoder.encode(m),n,e.rootStore),Hc&&(g|=Nn)),e.encoder.hasStructureUpdate&&(g|=E_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let P=i?.localTime,Y=r.get(P);if(Y){let te=Ut(Y).previousLocalTime;return R=r.put(P,Su(a,t,n,te,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,hm,g,T,y,h),{ifVersion:_}),R}}R=r.put(s===void 0?rU:dm,Su(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,hm,g,T,y,h,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:_})}return R}catch(y){throw y.message+=" id: "+n+" options: "+p,y}}}function Wc(e,t,r){if(t)return t.value&&t.metadataFlags&Nn&&!e.auditStore.getBinaryFast(t.localTime)&&ga(t.value),e.remove(t.key,r)}var tU,h_,m_,dm,wA,rU,p6,Ru,E6,Em,_6,OA,nU,g6,sU,CA,p_,MA,vA,E_,Ta,S6,hm,Tu,pm,PA,LA,ct,DA,Yc,Kc=fe(()=>{tU=require("msgpackr");uo();h_=w(z());Ts();Ts();m_=new Uint8Array([1,1,1,1,4,64,0,0]),dm=new Uint8Array([1,1,1,1,1,0,0,0]),wA=new Uint8Array([1,1,1,1,3,64,0,0]),rU=new Uint8Array([1,1,1,1,0,64,0,0]),p6=Symbol("local-timestamp"),Ru=Symbol("metadata"),E6=Symbol("entry"),Em=new Uint8Array(8),_6=new DataView(Em.buffer,0,8),OA=0,nU=0,g6=1,sU=3,CA=4,p_=16,MA=32,vA=1,E_=256,Ta=new WeakMap,Tu=0,pm=-1,PA=-1,LA=0,ct=null,DA=class extends tU.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Ta.get(this)?.version}getExpiresAt(){return Ta.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Tu||pm>=0){let c=0,l=Tu;l&&(c+=8,Tu=0);let u=pm,d=PA,f=LA;u>=0&&(c+=4,pm=-1,d>=0&&(c+=8,PA=-1),f&&(c+=4,LA=0));let m=S6=n.call(this,i,a|2048|c);hm=m.subarray((m.start||0)+c,m.end);let h=m.start||0;return l&&(m_[4]=l,m_[5]=l>>8,m.set(m_,h),h+=8),Hc&&(u|=Nn),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,u|d_<<24),h+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(h,d),h+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,f)),m}else return hm=n.call(this,i,a),hm};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Em,0,c),c+=8;else for(let m=0;m<8;m++)Em[m]=t[c++];l=T6(),i=t[c]}let u,d;i<32&&(i===d_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&p_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&MA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=kc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[Ru]:a,expiresAt:u,residencyId:d},f}return r?.valueAsBuffer?t:kc(()=>super.decode(t,r),this.rootStore)}catch(c){return h_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(T6,"getTimestamp");o(__,"handleLocalTimeForGets");Yc=[];setInterval(()=>{for(let e=0;e<Yc.length;e++){let t=Yc[e].deref();!t||t.isDone||t.isCommitted?Yc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(h_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):h_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(UA,"recordUpdater");o(Wc,"removeEntry")});function FA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let h=1;h<e.length;h++){let p=e[h],_=u(p);f=f.concat(_)}let m=new Set;return f.filter(h=>{let p=h.key??h;return m.has(p)?!1:(m.add(p),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?FA(f.conditions,f.operator,r,n,s,i,a,c):Iu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,h){return f.map((p,_)=>{if(p.conditions){let T=p.operator==="or",R=d(p.conditions,!T,h);return T?(I,P)=>R.some(Y=>Y(I,P)):(I,P)=>R.every(Y=>Y(I,P))}let g=(p.attribute||p[0])===r.primaryKey,y=gm(p,r,i,c,g,h);return m&&_<f.length-1&&h&&(h=C6(r.primaryStore,p.estimated_count,h)),y}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Iu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new qr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],I=Ci(n.attributes,R);if(I.relationship){if(c.length<2)throw new qr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let P=I.definition?.tableClass||I.elements?.definition?.tableClass,Y=new Map,te=Iu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,P,s,Y);if(I.relationship.to){i[c[0]]=Y;let x=!!Ci(P.attributes,I.relationship.to)?.elements;te=I6(te,I,P.primaryStore,x,Y)}if(I.relationship.from){let x=o($=>($?.key!==void 0&&($=$.key),Iu({attribute:I.relationship.from,value:$},t,r,n,s,Y)),"searchEntry");I.elements?(i[c[0]]=Y,te=N6(te,I,P.primaryStore,Y,x)):te=te.flatMap(x)}return te}else if(c.length===1)c=c[0];else throw new qr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,h,p,_;l instanceof Date&&(l=l.getTime());let g;switch(HA[u]||u){case"lt":m=!0,h=l;break;case"le":m=!0,h=l,p=!0;break;case"gt":m=l,_=!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,h=l.slice(0),h[h.length-1]=Oi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),h=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),h=l[1],h instanceof Date&&(h=h.getTime()),p=u==="gele"||u==="gtle"||u==="between",_=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,h=l,p=!0;break;case"ne":if(l===null){m=l,_=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new qr.ClientError(`Unknown query comparator "${u}"`)}let y;if(typeof m=="string"&&m.length>ys.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,ys.MAX_SEARCH_KEY_LENGTH)+ys.OVERFLOW_MARKER,_=!1,y=gm(e,n,null,i,d)),typeof h=="string"&&h.length>ys.MAX_SEARCH_KEY_LENGTH&&(h=h.slice(0,ys.MAX_SEARCH_KEY_LENGTH)+ys.OVERFLOW_MARKER,p=!0,y=y??gm(e,n,null,i,d)),r){let R=m;m=h,h=R,R=!_,_=!p,p=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new qr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new qr.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 qr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new qr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(y=y??gm(e,n,null,i,d),!y)throw new qr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:m,end:h,inclusiveEnd:p,exclusiveStart:_,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(T).map(y?function({key:I,value:P}){return this?.isSync?P&&y(P)?I:Ra.SKIP:new Promise((Y,te)=>setImmediate(()=>{try{Y(P&&y(P)?I:Ra.SKIP)}catch(x){te(x)}}))}:I=>I.value==null&&!(I.metadataFlags&(wn|ya))?Ra.SKIP:I);return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:I,...P}=R,Y=n.primaryStore.getEntry(I);return{...P,...Y}}return R}):f.getRange(T).map(y?function({key:R,value:I}){let P;return typeof R=="string"&&R.length>ys.MAX_SEARCH_KEY_LENGTH?P=n.primaryStore.get(I):P={[c]:R},this.isSync?y(P)?I:Ra.SKIP:new Promise((Y,te)=>setImmediate(()=>{try{Y(y(P)?I:Ra.SKIP)}catch(x){te(x)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:I}){return this.isSync?I&&y(I)?R:Ra.SKIP:new Promise((P,Y)=>setImmediate(()=>{try{P(I&&y(I)?R:Ra.SKIP)}catch(te){Y(te)}}))})}function Ci(e,t){if(Array.isArray(t))if(t.length>1){let r=Ci(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Ci(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 I6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function N6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function gm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Ci(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,h=n?.[d],p=gm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,h?.[d]?.joined,c[1]===m.primaryKey,i);if(!p)return;if(h){h.filters||(h.filters=[]),h.filters.push(p);return}let _=t.propertyResolvers?.[d];_.to&&(p.to=_.to);let g,y=o((R,I)=>{let P,Y;return _?_.returnDirect?(P=_(R,r,I),Y=ct):(Y=_(R,r,I,!0),Array.isArray(Y)?(P=Y.map(te=>te.value),Y=null):P=Y?.value):P=R[d],{subObject:P,subEntry:Y}},"getSubObject"),T=o((R,I)=>{if(_&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let $ of p.idFilter.idSet)e={attribute:_.from??t.primaryKey,value:$};g=u(_.from??t.primaryKey,p.idFilter,!0,!0)}else g=u(_.from??t.primaryKey,p.idFilter,!1,!0);let x=g(R);return g.idFilter&&(T.idFilter=g.idFilter),x}let{subObject:P,subEntry:Y}=y(R,I);return P?Array.isArray(P)?(!n?.[d]&&n&&(n[d]={fromRecord(x){let $=y(x).subObject;return Array.isArray($)?$.filter(p).map(j=>j[m.primaryKey]):$}}),P.some(p)):p(P,Y):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),HA[a]||a){case ys.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,Oi.compareKeys)(d,l[0])>=0&&(0,Oi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Oi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Oi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Oi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Oi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Oi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new qr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,h){let p;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&S_(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(m=!1));let _=0,g=3;function y(T){let R=T[d],I;if(typeof R!="object"||!R||h?I=f(R):Array.isArray(R)?I=R.some(f):R instanceof Date&&(I=f(R.getTime())),m&&(g++,!I&&!y.idFilter&&++_/g*i>p)){let P=Iu(e,r.transaction.getReadTxn(),!1,t),Y;y.to?Y=P.flatMap(x=>t.primaryStore.get(x)[y.to]):Y=P.map(Nu);let te=new Set(Y);y.idFilter=x=>te.has(Nu(x)),y.idFilter.idSet=te}return I}return o(y,"recordFilter"),s&&(y.idFilter=f),y}o(u,"attributeComparator")}function S_(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/So(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=HA[n]||n,n===ys.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=Ci(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=S_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*So(e.indices[i.relationship.from])/(So(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=So(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=A6*So(e.primaryStore)+1;else if(n==="between")r.estimated_count=y6*So(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=So(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=R6*So(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function T_(e,t){if(e)if(To=e,yu.lastIndex=0,w6.test(e))try{if(t&&(t.conditions=[]),Qs=t??new bu,_m(Qs,""),Lr!==To.length&&Gt("Unable to parse query, unexpected end of query"),Qs.parseErrorMessage&&(Qs.parseError=new xA(t.parseErrorMessage),!t))throw Qs.parseError;return Qs}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Lr} in '${To}'`,Qs.parseErrorMessage&&(r.message+=", "+Qs.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Gt(e){let t=`${e} at position ${Lr}`;Qs.parseErrorMessage=Qs.parseErrorMessage?Qs.parseErrorMessage+", "+t:t}function _m(e,t){let r=yu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(To);){Lr=r.lastIndex;let[,d,f]=n;a?(d&&Gt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Gt(`invalid FIQL operator ${d}`),l=oU):(l=decodeURIComponent,i="equals",d||Gt("attribute must be specified before equality comparator"),s=Au(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=b6[f],l=BA[i]?oU:decodeURIComponent,d||Gt(`attribute must be specified before comparator ${f}`),s=Au(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Gt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Gt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Gt("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&aU(p,d),s===""){let _=e.conditions[e.conditions.length-1];_.chainedConditions=_.chainedConditions||[],_.chainedConditions.push(p),_.operator=u}else g_(e,u),e.conditions.push(p)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Gt("conditions/comparisons are not allowed in a property list"):e.push(Au(d)),s=void 0;break;case"(":yu.lastIndex=Lr;let h=_m(d?[]:new bu,")");switch(d){case"":g_(e,u),e.conditions.push(h);break;case"limit":switch(h.length){case 1:e.limit=+h[0];break;case 2:e.offset=+h[0],e.limit=h[1]-e.offset;break;default:Gt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(h[0])&&h.length===1&&!h[0].name?(e.select=h[0],e.select.asArray=!0):h.length===1?e.select=h[0]:h.length===2&&h[1]===""?e.select=h.slice(0,1):e.select=h;break;case"group-by":Gt("group by is not implemented yet");case"sort":e.sort=cU(h);break;default:Gt(`unknown query function call ${d}`)}To[Lr]===","?r.lastIndex=++Lr:a=!0,s=null;break;case"{":e.conditions&&Gt("property sets are not allowed in a queries"),d||Gt("property sets must have a defined parent property name"),yu.lastIndex=Lr,m=_m([],"}"),m.name=d,e.push(m),To[Lr]===","?r.lastIndex=++Lr:a=!0;break;case"[":if(yu.lastIndex=Lr,d?(m=_m(new bu,"]"),m.name=d):m=_m(e.conditions?new bu:[],"]"),e.conditions)if(g_(e,u),To[Lr]==="="){l=decodeURIComponent,i="equals",s=Au(d),r.lastIndex=++Lr;break}else e.conditions.push(m),s=null;else e.push(m);To[Lr]===","?r.lastIndex=++Lr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let p={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&aU(p,d),g_(e,u),e.conditions.push(p)}else d&&Gt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Au(d));return e}else Gt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Gt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?O6:yu,r.lastIndex=Lr),Lr===To.length)return e}t&&Gt(`expected '${t}', but encountered end of string`)}function g_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Gt("Can not mix operators within a condition grouping"):e.operator=t)}function Au(e){return e.indexOf(".")>-1?e.split(".").map(Au):decodeURIComponent(e)}function oU(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 qr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function aU(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new qr.ClientError("wildcard can only be used at the end of a string")}function cU(e){let t=lU(e[0]);return e.length>1&&(t.next=cU(e.slice(1))),t}function lU(e){if(Array.isArray(e)){let t=lU(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}}Gt(`Unknown sort type ${e}`)}function Nu(e){return Array.isArray(e)?e.join("\0"):e}function So(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function C6(e,t,r){return t*r/So(e)}var qr,ys,Oi,Ra,R6,y6,A6,b6,BA,HA,xA,w6,yu,O6,Lr,Qs,To,bu,R_=fe(()=>{qr=w(Ee()),ys=w(kt()),Oi=require("ordered-binary"),Ra=require("lmdb");Sm();Kc();R6=.3,y6=.1,A6=.05,b6={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},BA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(FA,"executeConditions");o(Iu,"searchByIndex");o(Ci,"findAttribute");o(I6,"joinTo");o(N6,"joinFrom");HA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(gm,"filterByType");o(S_,"estimateCondition");xA=class extends qr.Violation{static{o(this,"SyntaxViolation")}},w6=/[()[\]|!<>.]|(=\w*=)/,yu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,O6=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(T_,"parseQuery");o(Gt,"recordError");o(_m,"parseBlock");o(g_,"assignOperator");o(Au,"decodeProperty");o(oU,"typedDecoding");o(aU,"wildcardDecoding");o(cU,"toSortObject");o(lU,"toSortEntry");bu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Nu,"flattenKey");o(So,"estimatedEntryCount");o(C6,"intersectionEstimate")});var uU,Js,y_=fe(()=>{uU=w(Ws());Aa();Js=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,uU._assignPackageExport)("Resource",Dr)});var pU={};Ce(pU,{MultiPartId:()=>A_,Resource:()=>Dr,contextStorage:()=>Ou,snakeCase:()=>L6,transformForSelect:()=>b_});function L6(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function dU(e,t){if(zc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(zc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new A_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){zc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return zc=!0,null;e[e.length-1]==="/"&&(zc=!0)}return t.coerceId(decodeURIComponent(e))}function On(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof lo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new wu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let _=c.indexOf("?");_>-1&&(l=this.parseQuery(c.slice(_+1),s),c=c.slice(0,_),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}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 Js,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new Js,l.id=c,c==null&&(u=!0);l||(l=new Js,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Ou.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,h=p;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(h=o(_=>Ou.run(a,()=>p(_)),"runAction")),a?.transaction){let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)}else return vt(a,()=>{let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)},f);function p(_){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?_.allowRead(a.user,l,a):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(a.user,d,a):_.allowUpdate(a.user,d,a):t.type==="create"?_.allowCreate(a.user,d,a):_.allowDelete(a.user,l,a);if(g?.then)return g.then(y=>{if(!y)throw new wu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(T=>e(_,l,a,T)):e(_,l,a,d)});if(!g)throw new wu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(_,l,a,g)):e(_,l,a,d)}o(p,"authorizeActionOnResource")}}function Vn(e,t){let r=new wu.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 kA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function b_(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):kA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(kA(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(kA(l,r,n)),f;for(let m of e){let h=d(m);h===void 0&&a&&(h=null),h?.then?(f||(f=[]),f.push(h.then(p=>u[m.name||m]=p))):u[m.name||m]=h}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=b_(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var fU,mU,wu,hU,Ou,P6,Dr,zc,A_,Aa=fe(()=>{fU=require("crypto");Qf();pu();mU=w(Ws()),wu=w(Ee());vc();R_();hU=require("async_hooks");y_();Ou=new hU.AsyncLocalStorage,P6={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Dr=class{static{o(this,"Resource")}#e;#r;#t;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#r=n!==void 0?n:r||null}static get=On(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=b_(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=On(function(t,r,n,s){if(Array.isArray(s)&&t.#t&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Vn(t,"put")},{hasContent:!0,type:"update"});static patch=On(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Vn(t,"patch")},{hasContent:!0,type:"update"});static delete=On(function(t,r,n,s){return t.delete?t.delete(r):Vn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,fU.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Ou.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),vt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Vn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=On(function(t,r,n,s){return t.invalidate?t.invalidate(r):Vn(t,"delete")},{hasContent:!1,type:"update"});static post=On(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=On(function(t,r,n,s){return t.update(r,s)},{hasContent:!0,type:"create"});static connect=On(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Vn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=On(function(t,r,n,s){return t.subscribe?t.subscribe(r):Vn(t,"subscribe")},{type:"read"});static publish=On(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):Vn(t,"publish")},{hasContent:!0,type:"create"});static search=On(function(t,r,n){let s=t.search?t.search(r):Vn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=b_(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=On(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Vn(t,"search")},{hasContent:!0,type:"read"});static copy=On(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Vn(t,"copy")},{hasContent:!0,type:"create"});static move=On(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Vn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#t)return(await this.constructor.create(this.#e,t,this.#r)).#e;Vn(this,"post")}static isCollection(t){return t&&t.#t}get isCollection(){return this.#t}static coerceId(t){return t}static parseQuery(t,r){return T_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&P6[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:dU(t,this),isCollection:zc}}let i=dU(t,this);return zc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#t=!0),s}subscribe(t){return new $n}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new $n}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.#r}};(0,mU._assignPackageExport)("Resource",Dr);o(L6,"snakeCase");o(dU,"pathToId");A_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(On,"transactional");o(Vn,"missingMethod");o(kA,"selectFromObject");o(b_,"transformForSelect")});var jc,GA=fe(()=>{jc=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var gU={};Ce(gU,{Resources:()=>I_,keyArrayToString:()=>Cu,resetResources:()=>D6,resources:()=>As});function D6(){return As=new I_,ve.resources=As,As}function Cu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var EU,_U,I_,As,Pu=fe(()=>{vc();GA();EU=w(z()),_U=w(Ee());Pr();I_=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new _U.ServerError(`Conflicting paths for ${t}`);EU.default.error(c),i.Resource=new jc(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return vt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(D6,"resetResources");o(Cu,"keyArrayToString")});function VA(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=TU,M6(e.primaryStore,e.auditStore)):(c=SU,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{RU(SU[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Cu(t);let d=new $A(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 RU(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),yU(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ut(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Cu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,qA.info)("omitting",c,m.startTime,n);continue}try{let h;m.supportsTransactions&&m.txnInProgress!==i.version&&(h=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,h)}catch(h){console.error(h),(0,qA.info)(h)}}}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 M6(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=TU[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{RU(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function yU(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function AU(e){return e.nextTransaction||(VA({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),yU(e)),e.nextTransaction}var qA,SU,TU,$A,KA=fe(()=>{qA=w(z());pu();Pu();uo();SU=Object.create(null),TU=Object.create(null);o(VA,"addSubscription");$A=class extends $n{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(RU,"notifyFromTransactionData");o(M6,"listenToCommits");o(yU,"nextTransaction");o(AU,"whenNextTransaction")});var IU=M((INe,bU)=>{"use strict";var YA=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};bU.exports=YA});var wU=M((wNe,NU)=>{"use strict";var WA=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};NU.exports=WA});var Tm=M((CNe,CU)=>{"use strict";var OU=ce(),v6=(k(),v(K)),{RecordEncoder:U6}=(Kc(),v(iU));OU.initSync();var x6=OU.get(v6.CONFIG_PARAMS.STORAGE_CACHING)!==!1,zA=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=x6&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:U6})}};CU.exports=zA});var Rm=M((LNe,PU)=>{"use strict";var Kn=ce(),bs=(k(),v(K));Kn.initSync();var N_=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Kn.get(bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Kn.get(bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Kn.get(bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Kn.get(bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Kn.get(bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Kn.get(bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Kn.get(bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Kn.get(bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Kn.get(bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Kn.get(bs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Kn.get(bs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Kn.get(bs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};PU.exports=N_;N_.MAX_DBS=1e4});var _t=M((MNe,kU)=>{"use strict";var QA=require("lmdb"),Xs=require("fs-extra"),Yn=require("path"),w_=An(),MU=z(),Cn=tn().LMDB_ERRORS_ENUM,O_=wU(),JA=Tm(),vU=Rm(),ba=kt(),LU=(k(),v(K)),{table:B6,resetDatabases:F6}=(Le(),v(ft)),DU=ce(),Zs=ba.INTERNAL_DBIS_NAME,UU=ba.DBI_DEFINITION_NAME,H6="data.mdb",k6="lock.mdb",ym=".mdb",G6="-lock",jA=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Is(t,r),this.key_type=this.dbi[ba.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ba.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new QA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function C_(e,t){if(e===void 0)throw new Error(Cn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Cn.ENV_NAME_REQUIRED)}o(C_,"pathEnvNameValidation");async function XA(e,t,r=!0){try{await Xs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Cn.INVALID_BASE_PATH):n}try{let n=Yn.join(e,t+ym);return await Xs.access(n,Xs.constants.R_OK|Xs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Xs.access(Yn.join(e,t,H6),Xs.constants.R_OK|Xs.constants.F_OK),Yn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Cn.INVALID_ENVIRONMENT)}else throw new Error(Cn.INVALID_ENVIRONMENT);throw n}}o(XA,"validateEnvironmentPath");function P_(e,t){if(w_.validateEnv(e),t===void 0)throw new Error(Cn.DBI_NAME_REQUIRED)}o(P_,"validateEnvDBIName");async function q6(e,t,r=!1,n=!1){C_(e,t);let s=Yn.basename(e);t=t.toString();let i=DU.get(LU.CONFIG_PARAMS.DATABASES);i||DU.setProperty(LU.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await XA(e,t,n),xU(e,t,r)}catch(a){if(a.message===Cn.INVALID_ENVIRONMENT){let c=Yn.join(e,t);await Xs.mkdirp(n?c:e);let l=new vU(n?c:c+ym,!1),u=QA.open(l);u.dbis=Object.create(null);let d=new JA(!1);u.openDB(Zs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=ZA(e,t,r);return u[ba.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(q6,"createEnvironment");async function $6(e,t,r,n=!0){C_(e,t),t=t.toString();let s=Yn.join(e,t);return B6({table:t,database:Yn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o($6,"copyEnvironment");async function xU(e,t,r=!1){C_(e,t),t=t.toString();let n=ZA(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 XA(e,t),i=Yn.join(e,t+ym),a=s!=i,c=new vU(s,a),l=QA.open(c);l.dbis=Object.create(null);let u=FU(l);for(let d=0;d<u.length;d++)Is(l,u[d]);return l[ba.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(xU,"openEnvironment");async function V6(e,t,r=!1){C_(e,t),t=t.toString();let n=Yn.join(e,t+ym),s=await XA(e,t);if(global.lmdb_map!==void 0){let i=ZA(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await BU(a),delete global.lmdb_map[i]}}await Xs.remove(s),await Xs.remove(s===n?s+G6:Yn.join(Yn.dirname(s),k6))}o(V6,"deleteEnvironment");async function BU(e){w_.validateEnv(e);let t=e[ba.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(BU,"closeEnvironment");function ZA(e,t,r=!1){let s=`${Yn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(ZA,"getCachedEnvironmentName");function K6(e){w_.validateEnv(e);let t=Object.create(null),r=Is(e,Zs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Zs)try{t[n]=Object.assign(new O_,s)}catch{MU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(K6,"listDBIDefinitions");function FU(e){w_.validateEnv(e);let t=[],r=Is(e,Zs);for(let{key:n}of r.getRange({start:!1}))n!==Zs&&t.push(n);return t}o(FU,"listDBIs");function Y6(e,t){let n=Is(e,Zs).getEntry(t),s=new O_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{MU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(Y6,"getDBIDefinition");function HU(e,t,r,n=!r){if(P_(e,t),t=t.toString(),t===Zs)throw new Error(Cn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Is(e,t)}catch(s){if(s.message===Cn.DBI_DOES_NOT_EXIST){let i=new JA(r,n===!0),a=e.openDB(t,i),c=new O_(r===!0,n);return a[UU]=c,Is(e,Zs).putSync(t,c),e.dbis[t]=a,a}throw s}}o(HU,"createDBI");function Is(e,t){if(P_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Zs?r=Y6(e,t):r=new O_,r===void 0)throw new Error(Cn.DBI_DOES_NOT_EXIST);let n;try{let s=new JA(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(Cn.DBI_DOES_NOT_EXIST):s}return n[UU]=r,e.dbis[t]=n,n}o(Is,"openDBI");function W6(e,t){P_(e,t),t=t.toString();let r=Is(e,t),n=r.getStats();return r[ba.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(W6,"statDBI");async function z6(e,t){try{let r=Yn.join(e,t+ym);return(await Xs.stat(r)).size}catch{throw new Error(Cn.INVALID_ENVIRONMENT)}}o(z6,"environmentDataSize");function j6(e,t){if(P_(e,t),t=t.toString(),t===Zs)throw new Error(Cn.CANNOT_DROP_INTERNAL_DBIS_NAME);Is(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Is(e,Zs).removeSync(t)}o(j6,"dropDBI");function Q6(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Is(e,i)}catch(a){if(a.message===Cn.DBI_DOES_NOT_EXIST)HU(e,i,i!==t,i===t),n=!0;else throw a}}n&&F6()}o(Q6,"initializeDBIs");kU.exports={openDBI:Is,openEnvironment:xU,createEnvironment:q6,listDBIs:FU,listDBIDefinitions:K6,createDBI:HU,dropDBI:j6,statDBI:W6,deleteEnvironment:V6,initializeDBIs:Q6,TransactionCursor:jA,environmentDataSize:z6,copyEnvironment:$6,closeEnvironment:BU}});var $U=M((UNe,qU)=>{"use strict";var eb=_t(),J6=z(),GU=tn().LMDB_ERRORS_ENUM;qU.exports=X6;async function X6(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await eb.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==GU.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await eb.closeEnvironment(global.lmdb_map[n]),await eb.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==GU.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){J6.error(t)}}o(X6,"cleanLMDBMap")});var Ro=M((BNe,Z6)=>{Z6.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:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var ei=M((FNe,YU)=>{var e8=Ro(),{promisify:t8}=require("util"),{getDatabases:KU}=(Le(),v(ft));YU.exports={setSchemaDataToGlobal:VU,getTableSchema:r8,getSystemSchema:n8,setSchemaDataToGlobalAsync:t8(VU)};function VU(e){global.hdb_schema=KU(),e&&e()}o(VU,"setSchemaDataToGlobal");function r8(e,t,r){let n=KU()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(r8,"getTableSchema");function n8(){return e8}o(n8,"getSystemSchema")});var ix=M((GNe,sx)=>{"use strict";var tb=require("recursive-iterator"),s8=require("alasql"),rb=require("clone"),WU=ie(),{handleHDBError:zU,hdbErrors:i8}=Ee(),{HDB_ERROR_MSGS:jU,HTTP_STATUS_CODES:QU}=i8,{getDatabases:o8}=(Le(),v(ft)),a8=["DISTINCT_ARRAY"],JU=Symbol("validateTables"),nb=Symbol("validateTable"),kNe=Symbol("getAllColumns"),XU=Symbol("validateAllColumns"),L_=Symbol("findColumn"),ZU=Symbol("validateOrderBy"),Am=Symbol("validateSegment"),sb=Symbol("validateColumn"),ex=Symbol("setColumnsForTable"),tx=Symbol("checkColumnsForAsterisk"),rx=Symbol("validateGroupBy"),nx=Symbol("hasColumns"),ib=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[JU](),this[tx](),this[XU]()}[JU](){if(this[nx]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[nb](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[nb](t.table)})}}[nx](){let t=!1,r=new tb(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[nb](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=o8();if(!r[t.databaseid])throw zU(new Error,jU.SCHEMA_NOT_FOUND(t.databaseid),QU.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zU(new Error,jU.TABLE_NOT_FOUND(t.databaseid,t.tableid),QU.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=rb(s);i.table=rb(t),this.attributes.push(i)})}[L_](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)}[tx](){let t=new tb(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[ex](r.tableid)}[ex](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new s8.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[XU](){this[Am](this.statement.columns,!1),this[Am](this.statement.joins,!1),this[Am](this.statement.where,!1),this[rx](this.statement.group,!1),this[Am](this.statement.order,!0)}[Am](t,r){if(!t)return;let n=new tb(t),s=[];for(let{node:i,path:a}of n)!WU.isEmpty(i)&&!WU.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ZU](i):s.push(this[sb](i)));return s}[rx](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&a8.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=rb(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[L_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[L_](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[ZU](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[sb](t)}[sb](t){let r=this[L_](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]}};sx.exports=ib});var ax=M(($Ne,ox)=>{"use strict";var ob=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};ox.exports=ob});var lx=M((KNe,cx)=>{"use strict";var ab=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};cx.exports=ab});var dx=M((WNe,ux)=>{"use strict";var cb=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};ux.exports=cb});var mx=M((jNe,fx)=>{"use strict";var lb=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};fx.exports=lb});var Jc=M((ewe,Ex)=>{"use strict";var c8=_t(),l8=lx(),u8=dx(),d8=mx(),Pi=An(),bm=tn().LMDB_ERRORS_ENUM,f8=kt(),yo=(k(),v(K)),m8=ie(),h8=require("uuid"),JNe=require("lmdb"),{handleHDBError:p8,hdbErrors:E8}=Ee(),{OVERFLOW_MARKER:XNe,MAX_SEARCH_KEY_LENGTH:ZNe}=f8,hx=ce();hx.initSync();var D_=hx.get(yo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),ub=yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Qc=yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function _8(e,t,r,n,s=Pi.getNextMonotonicTime()){hb(e,t,r,n),db(e,t,r);let i=new l8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];px(u,!0,s);let d=g8(e,t,r,u),f=u[t];a.push(d),c.push(f)}return fb(a,c,n,i,s)}o(_8,"insertRecords");function g8(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][yo.FUNC_VAL],n[a]=c)}let l=Pi.getIndexedValues(c),u=e.dbis[a];if(l){D_&&u.prefetch(l.map(d=>({key:d,value:s})),M_);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}D_&&e.dbis[t].prefetch([s],M_),e.dbis[t].put(s,n,n[Qc])})}o(g8,"insertRecord");function S8(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(S8,"removeSkippedRecords");function px(e,t,r){let n=r>0;(n||!Number.isInteger(e[Qc]))&&(e[Qc]=r||(r=Pi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[ub]))&&(e[ub]=r||Pi.getNextMonotonicTime()):delete e[ub]}o(px,"setTimestamps");function db(e,t,r){r.indexOf(yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),c8.initializeDBIs(e,t,r)}o(db,"initializeTransaction");async function T8(e,t,r,n,s=Pi.getNextMonotonicTime()){hb(e,t,r,n),db(e,t,r);let i=new u8,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=mb(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return fb(c,l,n,i,s,a)}o(T8,"updateRecords");async function R8(e,t,r,n,s=Pi.getNextMonotonicTime()){try{hb(e,t,r,n)}catch(l){throw p8(l,l.message,E8.HTTP_STATUS_CODES.BAD_REQUEST)}db(e,t,r);let i=new d8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;m8.isEmpty(u[t])?(d=h8.v4(),u[t]=d):d=u[t];let f=mb(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return fb(a,c,n,i,s)}o(R8,"upsertRecords");async function fb(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Pi.getNextMonotonicTime(),S8(r,i),n}o(fb,"finalizeWrite");function mb(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(px(r,!d,a),Number.isInteger(r[Qc])&&u[Qc]>r[Qc])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let _=r[p],g=e.dbis[p];if(g===void 0)continue;let y=u[p];if(typeof _=="function"){let R=_([[u]]);Array.isArray(R)&&(_=R[0][yo.FUNC_VAL],r[p]=_)}if(_===y)continue;let T=Pi.getIndexedValues(y);if(T){D_&&g.prefetch(T.map(R=>({key:R,value:n})),M_);for(let R=0,I=T.length;R<I;R++)g.remove(T[R],n)}if(T=Pi.getIndexedValues(_),T){D_&&g.prefetch(T.map(R=>({key:R,value:n})),M_);for(let R=0,I=T.length;R<I;R++)g.put(T[R],n)}}let h={...u,...r};c.put(n,h,h[Qc])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(h=>h?!0:mb(e,t,r,n,s,i,a))}o(mb,"updateUpsertRecord");function y8(e,t,r){if(Pi.validateEnv(e),t===void 0)throw new Error(bm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bm.WRITE_ATTRIBUTES_REQUIRED):new Error(bm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(y8,"validateBasic");function hb(e,t,r,n){if(y8(e,t,r),!Array.isArray(n))throw n===void 0?new Error(bm.RECORDS_REQUIRED):new Error(bm.RECORDS_MUST_BE_ARRAY)}o(hb,"validateWrite");function M_(){}o(M_,"noop");Ex.exports={insertRecords:_8,updateRecords:T8,upsertRecords:R8}});var gx=M((rwe,_x)=>{"use strict";var A8=require("uuid"),pb=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||A8.v4(),this.schema_table=`${this.schema}.${this.table}`}};_x.exports=pb});var v_=M((swe,Sx)=>{"use strict";var b8=gx(),Eb=class extends b8{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};Sx.exports=Eb});var Rx=M((owe,Tx)=>{"use strict";Tx.exports=N8;var I8="inserted";function N8(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===I8?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(N8,"returnObject")});var U_=M((lwe,Ax)=>{"use strict";var w8=(k(),v(K)),_b=_t(),O8=Jc(),{getSystemSchemaPath:C8,getSchemaPath:P8}=At(),cwe=Ro(),{validateBySchema:L8}=at(),Im=require("joi"),D8=v_(),M8=Rx(),{handleHDBError:v8,hdbErrors:U8,ClientError:x8}=Ee(),yx=ie(),{HTTP_STATUS_CODES:B8}=U8,F8="inserted";Ax.exports=H8;async function H8(e){let t=L8(e,Im.object({database:Im.string(),schema:Im.string(),table:Im.string().required(),attribute:Im.string().required()}));if(t)throw new x8(t.message);let r=!e.skip_table_check&&yx.checkGlobalSchemaTable(e.schema,e.table);if(r)throw v8(new Error,r,B8.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=yx.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 D8(e.schema,e.table,e.attribute,e.id);try{let i=await _b.openEnvironment(P8(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}`);_b.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await _b.openEnvironment(C8(),w8.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await O8.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return M8(F8,c,{records:[s]},l)}catch(i){throw i}}o(H8,"lmdbCreateAttribute")});var Di=M((dwe,Ix)=>{"use strict";var bx=ie(),k8=(k(),v(K)),Lu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Li=require("joi"),Ia={schema_format:{pattern:Lu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},G8=Li.alternatives(Li.string().min(1).max(Ia.schema_length.maximum).pattern(Lu).messages({"string.pattern.base":"{:#label} "+Ia.schema_format.message}),Li.number(),Li.array()).required(),q8=Li.alternatives(Li.string().min(1).max(Ia.schema_length.maximum).pattern(Lu).messages({"string.pattern.base":"{:#label} "+Ia.schema_format.message}),Li.number()),$8=Li.alternatives(Li.string().min(1).max(Ia.schema_length.maximum).pattern(Lu).messages({"string.pattern.base":"{:#label} "+Ia.schema_format.message}),Li.number()).required();function V8(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Ia.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Lu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(V8,"checkValidTable");function K8(e,t){return bx.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(K8,"validateSchemaExists");function Y8(e,t){let r=t.state.ancestors[0].schema;return bx.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(Y8,"validateTableExists");function W8(e,t){return e.toLowerCase()===k8.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(W8,"validateSchemaName");Ix.exports={commonValidators:Ia,schemaRegex:Lu,hdbSchemaTable:G8,validateSchemaExists:K8,validateTableExists:Y8,validateSchemaName:W8,checkValidTable:V8,hdbDatabase:q8,hdbTable:$8}});var Sb=M((mwe,wx)=>{var{hdbTable:z8,hdbDatabase:Nx}=Di(),j8=at(),gb=require("joi"),Q8={undefined:"undefined",null:"null"},J8=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||Q8[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),X8=gb.object({database:Nx,schema:Nx,table:z8,records:gb.array().items(gb.object().custom(J8)).required()});wx.exports=function(e){return j8.validateBySchema(e,X8)}});var Nm=M((Ewe,Cx)=>{"use strict";var Ao=ie(),Ox=z(),pwe=Sb(),{getDatabases:Z8}=(Le(),v(ft)),{ClientError:Xc}=Ee();Cx.exports=e5;function e5(e){if(Ao.isEmpty(e))throw new Xc("invalid update parameters defined.");if(Ao.isEmptyOrZeroLength(e.schema))throw new Xc("invalid schema specified.");if(Ao.isEmptyOrZeroLength(e.table))throw new Xc("invalid table specified.");if(!Array.isArray(e.records))throw new Xc("records must be an array");let t=Z8()[e.schema]?.[e.table];if(Ao.isEmpty(t))throw new Xc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Ao.isEmptyOrZeroLength(a[r]))throw Ox.error("a valid hash attribute must be provided with update record:",a),new Xc("a valid hash attribute must be provided with update record, check log for more info");if(!Ao.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw Ox.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Xc(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Ao.isEmpty(a[r])&&a[r]!==""&&n.has(Ao.autoCast(a[r]))&&(a.skip=!0),n.add(Ao.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(e5,"insertUpdateValidate")});var x_=M((gwe,Lx)=>{"use strict";var Px=ie(),t5=(k(),v(K)),r5=z(),n5=U_(),s5=v_(),i5=bo(),{SchemaEventMsg:o5}=ti(),a5="already exists in";Lx.exports=c5;async function c5(e,t,r){if(Px.isEmptyOrZeroLength(r))return r;let n=[];Px.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 l5(e,t.schema,t.name,i)})),s}o(c5,"lmdbCheckForNewAttributes");async function l5(e,t,r,n){let s=new s5(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await u5(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(a5))r5.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(l5,"createNewAttribute");async function u5(e){let t;return t=await n5(e),i5.signalSchemaChange(new o5(process.pid,t5.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(u5,"createAttribute")});var Du=M((Twe,Dx)=>{"use strict";var Tb=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};Dx.exports=Tb});var vx=M((ywe,Mx)=>{"use strict";var d5=Du(),f5=(k(),v(K)).OPERATIONS_ENUM,Rb=class extends d5{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(f5.INSERT,r,n,s,i),this.records=t}};Mx.exports=Rb});var xx=M((bwe,Ux)=>{"use strict";var m5=Du(),h5=(k(),v(K)).OPERATIONS_ENUM,yb=class extends m5{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(h5.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};Ux.exports=yb});var Fx=M((Nwe,Bx)=>{"use strict";var p5=Du(),E5=(k(),v(K)).OPERATIONS_ENUM,Ab=class extends p5{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(E5.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};Bx.exports=Ab});var kx=M((Owe,Hx)=>{"use strict";var _5=Du(),g5=(k(),v(K)).OPERATIONS_ENUM,bb=class extends _5{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(g5.DELETE,n,s,t,i),this.original_records=r}};Hx.exports=bb});var wm=M((Lwe,Vx)=>{"use strict";var Pwe=require("path"),Gx=_t(),S5=vx(),T5=xx(),R5=Fx(),y5=kx(),Mu=kt(),qx=ie(),{CONFIG_PARAMS:A5}=(k(),v(K)),$x=ce();$x.initSync();var B_=(k(),v(K)).OPERATIONS_ENUM,{getTransactionAuditStorePath:b5}=At();Vx.exports=I5;async function I5(e,t){if($x.get(A5.LOGGING_AUDITLOG)===!1)return;let r=b5(e.schema,e.table),n=await Gx.openEnvironment(r,e.table,!0),s=N5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){Gx.initializeDBIs(n,Mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Mu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),qx.isEmpty(s.user_name)||n.dbis[Mu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Mu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(I5,"writeTransaction");function N5(e,t){let r=qx.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===B_.INSERT)return new S5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===B_.UPDATE)return new T5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===B_.UPSERT)return new R5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===B_.DELETE)return new y5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(N5,"createTransactionObject")});var Ib=M((vwe,Kx)=>{"use strict";var w5=Nm(),Mwe=Wf(),Om=(k(),v(K)),O5=zf(),C5=Jc().insertRecords,P5=_t(),L5=z(),D5=x_(),{getSchemaPath:M5}=At(),v5=wm();Kx.exports=U5;async function U5(e){try{let{schemaTable:t,attributes:r}=w5(e);O5(e,r,t.hash_attribute),e.schema!==Om.SYSTEM_SCHEMA_NAME&&(r.includes(Om.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Om.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Om.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Om.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await D5(e.hdb_auth_header,t,r),s=M5(e.schema,e.table),i=await P5.openEnvironment(s,e.table),a=await C5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await v5(e,a)}catch(c){L5.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(U5,"lmdbCreateRecords")});var zx=M((xwe,Wx)=>{"use strict";var Yx=(k(),v(K)),x5=Ib(),B5=Wf(),F5=require("fs-extra"),{getSchemaPath:H5}=At();Wx.exports=k5;async function k5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new B5(Yx.SYSTEM_SCHEMA_NAME,Yx.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await x5(r),await F5.mkdirp(H5(e.schema))}o(k5,"lmdbCreateSchema")});var Qx=M((Fwe,jx)=>{"use strict";var Nb=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};jx.exports=Nb});var e0=M(($we,Zx)=>{"use strict";var Jx=_t(),wb=An(),Ob=tn().LMDB_ERRORS_ENUM,G5=kt(),Xx=z(),kwe=ie(),q5=require("lmdb"),$5=Qx(),V5=(k(),v(K)),{OVERFLOW_MARKER:Gwe,MAX_SEARCH_KEY_LENGTH:qwe}=G5,K5=V5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Y5(e,t,r,n){if(wb.validateEnv(e),t===void 0)throw new Error(Ob.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ob.IDS_REQUIRED):new Error(Ob.IDS_MUST_BE_ITERABLE);try{let s=Jx.listDBIs(e);Jx.initializeDBIs(e,t,s);let i=new $5,a,c=[],l=[];for(let m=0,h=r.length;m<h;m++)try{a=r[m];let p=e.dbis[t].get(a);if(!p||n&&p[K5]>n){i.skipped.push(a);continue}let _=e.dbis[t].ifVersion(a,q5.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let y=s[g];if(!p.hasOwnProperty(y)||y===t)continue;let T=e.dbis[y],R=p[y];if(R!=null)try{let I=wb.getIndexedValues(R);if(I)for(let P=0,Y=I.length;P<Y;P++)T.remove(I[P],a)}catch{Xx.warn(`cannot delete from attribute: ${y}, ${R}:${a}`)}}});c.push(_),l.push(a),i.original_records.push(p)}catch(p){Xx.warn(p),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,h=d.length;m<h;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 h=u[m];i.original_records.splice(h-f,1),f++}return i.txn_time=wb.getNextMonotonicTime(),i}catch(s){throw s}}o(Y5,"deleteRecords");Zx.exports={deleteRecords:Y5}});var Cm=M((Kwe,r0)=>{"use strict";var vu=ie(),W5=e0(),z5=_t(),{getSchemaPath:j5}=At(),Q5=wm(),J5=z();r0.exports=X5;async function X5(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(vu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(vu.isEmptyOrZeroLength(e.hash_values)&&!vu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];vu.isEmpty(l)||e.hash_values.push(l)}}if(vu.isEmptyOrZeroLength(e.hash_values))return t0([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(vu.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=j5(e.schema,e.table),i=await z5.openEnvironment(s,e.table),a=await W5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Q5(e,a)}catch(c){J5.error(`unable to write transaction due to ${c.message}`)}return t0(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(X5,"lmdbDeleteRecords");function t0(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(t0,"createDeleteResponse")});var Pb=M((zwe,n0)=>{"use strict";var Z5=(k(),v(K)),Wwe=An();function Cb(e,t){let r=Object.create(null);if(t.length===1&&Z5.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(Cb,"parseRow");function e9(e,t,r,n){let s=Cb(r,e);n.push(s)}o(e9,"searchAll");function t9(e,t,r,n){let s=Cb(r,e);n[t]=s}o(t9,"searchAllToMap");function r9(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(r9,"iterateDBI");function Zc(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(Zc,"pushResults");function n9(e,t,r,n,s,i){t.toString().endsWith(e)&&Zc(t,r,n,s,i)}o(n9,"endsWith");function s9(e,t,r,n,s,i){t.toString().includes(e)&&Zc(t,r,n,s,i)}o(s9,"contains");function i9(e,t,r,n,s,i){t>e&&Zc(t,r,n,s,i)}o(i9,"greaterThanCompare");function o9(e,t,r,n,s,i){t>=e&&Zc(t,r,n,s,i)}o(o9,"greaterThanEqualCompare");function a9(e,t,r,n,s,i){t<e&&Zc(t,r,n,s,i)}o(a9,"lessThanCompare");function c9(e,t,r,n,s,i){t<=e&&Zc(t,r,n,s,i)}o(c9,"lessThanEqualCompare");n0.exports={parseRow:Cb,searchAll:e9,searchAllToMap:t9,iterateDBI:r9,endsWith:n9,contains:s9,greaterThanCompare:i9,greaterThanEqualCompare:o9,lessThanCompare:a9,lessThanEqualCompare:c9,pushResults:Zc}});var Uu=M((Zwe,u0)=>{"use strict";var Na=_t(),Qwe=z(),Wn=An(),F_=kt(),Jt=tn().LMDB_ERRORS_ENUM,Jwe=ie(),l9=(k(),v(K)),H_=Pb(),{parseRow:u9}=H_,Xwe=require("lmdb"),{OVERFLOW_MARKER:s0,MAX_SEARCH_KEY_LENGTH:d9}=F_;function i0(e,t,r,n=!1,s=void 0,i=void 0){return el(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(i0,"iterateFullIndex");function Pm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return el(e,t,r,(d,f,m,h)=>{let T={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return h===r?(T.values=!1,f.getRange(T).map(R=>({value:R}))):f.getRange(T)})}o(Pm,"iterateRangeBetween");function el(e,t,r,n){let s=e.database||e,i=Na.openDBI(s,r);i[F_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Na.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(el,"setupTransaction");function o0(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(s0)){if(!s)if(r)s=Na.openDBI(e,r);else{let l=Na.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=Na.openDBI(e,l[u]),!s[F_.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(o0,"getOverflowCheck");function f9(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);return el(e,t,t,(a,c,l)=>(k_(r),r=Lm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>u9(u.value,r))))}o(f9,"searchAll");function m9(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);k_(r),r=Lm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of i0(e,t,t,n,s,i))a.set(c,H_.parseRow(l,r));return a}o(m9,"searchAllToMap");function h9(e,t,r=!1,n=void 0,s=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=i0(e,void 0,t,r,n,s),c=a.transaction,l=o0(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(h9,"iterateDBI");function p9(e,t){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);return Na.statDBI(e,t).entryCount}o(p9,"countAll");function E9(e,t,r,n,s=!1,i=void 0,a=void 0){return wa(e,r,n),el(e,t,r,(c,l,u,d)=>(n=Wn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(E9,"equals");function _9(e,t,r){return wa(e,t,r),Na.openDBI(e,t).getValuesCount(r)}o(_9,"count");function g9(e,t,r,n,s=!1,i=void 0,a=void 0){return wa(e,r,n),el(e,null,r,(c,l)=>{n=Wn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:h}=m;if(h!==f){if(h.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(g9,"startsWith");function S9(e,t,r,n,s=!1,i=void 0,a=void 0){return a0(e,t,r,n,s,i,a,!0)}o(S9,"endsWith");function a0(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return wa(e,r,n),el(e,null,r,(l,u,d,f)=>{let m=o0(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(h=>{let p=h.toString();return p.endsWith(s0)?u.getValues(h,{transaction:l}).map(_=>{let g=m(h,_);if(c?g.endsWith(n):g.includes(n))return{key:g,value:_}}).filter(_=>_):(c?p.endsWith(n):p.includes(n))?u[F_.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:l}).map(_=>({key:h,value:_})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(a0,"contains");function T9(e,t,r,n,s=!1,i=void 0,a=void 0){wa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Pm(e,t,r,n,l,s,i,a,!0,!1)}o(T9,"greaterThan");function R9(e,t,r,n,s=!1,i=void 0,a=void 0){wa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Pm(e,t,r,n,l,s,i,a,!1,!1)}o(R9,"greaterThanEqual");function y9(e,t,r,n,s=!1,i=void 0,a=void 0){wa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Pm(e,t,r,l,n,s,i,a,!1,!0)}o(y9,"lessThan");function A9(e,t,r,n,s=!1,i=void 0,a=void 0){wa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Pm(e,t,r,l,n,s,i,a,!1,!1)}o(A9,"lessThanEqual");function b9(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(Wn.validateEnv(e),r===void 0)throw new Error(Jt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Jt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Jt.END_VALUE_REQUIRED);if(n=Wn.convertKeyValueToWrite(n),s=Wn.convertKeyValueToWrite(s),n>s)throw new Error(Jt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Pm(e,t,r,n,s,i,a,c)}o(b9,"between");function I9(e,t,r,n){Wn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);if(k_(r),r=Lm(s,r),n===void 0)throw new Error(Jt.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=H_.parseRow(c,r)),a}o(I9,"searchByHash");function N9(e,t,r){Wn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Jt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(N9,"checkHashExists");function w9(e,t,r,n,s=[]){return l0(e,t,r,n,s),c0(e,t,r,n,s).map(i=>i[1])}o(w9,"batchSearchByHash");function O9(e,t,r,n,s=[]){l0(e,t,r,n,s);let i=new Map;for(let[a,c]of c0(e,t,r,n,s))i.set(a,c);return i}o(O9,"batchSearchByHashToMap");function c0(e,t,r,n,s=[]){return el(e,t,t,(i,a,c)=>{r=Lm(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,H_.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(c0,"batchHashSearch");function l0(e,t,r,n,s){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);if(k_(r),n==null)throw new Error(Jt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Jt.IDS_MUST_BE_ITERABLE)}o(l0,"initializeBatchSearchByHash");function k_(e){if(!Array.isArray(e))throw e===void 0?new Error(Jt.FETCH_ATTRIBUTES_REQUIRED):new Error(Jt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(k_,"validateFetchAttributes");function wa(e,t,r){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Jt.SEARCH_VALUE_REQUIRED);if(r?.length>d9)throw new Error(Jt.SEARCH_VALUE_TOO_LARGE)}o(wa,"validateComparisonFunctions");function Lm(e,t){return t.length===1&&l9.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Na.listDBIs(e)),t}o(Lm,"setGetWholeRowAttributes");u0.exports={searchAll:f9,searchAllToMap:m9,count:_9,countAll:p9,equals:E9,startsWith:g9,endsWith:S9,contains:a0,searchByHash:I9,setGetWholeRowAttributes:Lm,batchSearchByHash:w9,batchSearchByHashToMap:O9,checkHashExists:N9,iterateDBI:h9,greaterThan:T9,greaterThanEqual:R9,lessThan:y9,lessThanEqual:A9,between:b9}});var xu=M((tOe,p0)=>{var d0=require("lodash"),f0=at(),$e=require("joi"),C9=ie(),{hdbSchemaTable:Dm,checkValidTable:m0,hdbTable:h0,hdbDatabase:G_}=Di(),{handleHDBError:P9,hdbErrors:L9}=Ee(),{getDatabases:D9}=(Le(),v(ft)),{HTTP_STATUS_CODES:M9}=L9,v9=$e.object({database:G_,schema:G_,table:h0,search_attribute:Dm,search_value:$e.any().required(),get_attributes:$e.array().min(1).items($e.alternatives(Dm,$e.object())).optional(),desc:$e.bool(),limit:$e.number().integer().min(1),offset:$e.number().integer().min(0)}),U9=$e.object({database:G_,schema:G_,table:h0,operator:$e.string().valid("and","or").default("and").lowercase(),offset:$e.number().integer().min(0),limit:$e.number().integer().min(1),get_attributes:$e.array().min(1).items($e.alternatives(Dm,$e.object())).optional(),sort:$e.object({attribute:$e.alternatives(Dm,$e.array().min(1)),descending:$e.bool().optional()}).optional(),conditions:$e.array().min(1).items($e.alternatives($e.object({operator:$e.string().valid("and","or").default("and").lowercase(),conditions:$e.array()}),$e.object({search_attribute:$e.alternatives(Dm,$e.array().min(1)),search_type:$e.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:$e.when("search_type",{switch:[{is:"equals",then:$e.any()},{is:"between",then:$e.array().items($e.alternatives([$e.string(),$e.number()])).length(2)}],otherwise:$e.alternatives($e.string(),$e.number())}).required()}))).required()});p0.exports=function(e,t){let r=null;switch(t){case"value":r=f0.validateBySchema(e,v9);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(m0("database",e.schema)),i(m0("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=f0.validateBySchema(e,U9);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=C9.checkGlobalSchemaTable(e.schema,e.table);if(s)return P9(new Error,s,M9.NOT_FOUND);let a=D9()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=o(d=>{for(let f=0,m=d.conditions.length;f<m;f++){let h=d.conditions[f];h.conditions?l(h):c.push(h.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=d0.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!d0.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var Lb=M((nOe,E0)=>{"use strict";var x9=_t(),B9=xu(),{getSchemaPath:F9}=At();E0.exports=H9;function H9(e){let t=B9(e,"hashes");if(t)throw t;let r=F9(e.schema,e.table);return x9.openEnvironment(r,e.table)}o(H9,"initialize")});var Db=M((iOe,_0)=>{"use strict";var k9=Uu(),G9=Lb();_0.exports=q9;async function q9(e){let t=await G9(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return k9.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(q9,"lmdbGetDataByHash")});var Bu=M((aOe,g0)=>{"use strict";var Mb=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};g0.exports=Mb});var T0=M((uOe,S0)=>{"use strict";var lOe=Bu(),$9=Uu(),V9=Lb();S0.exports=K9;async function K9(e){let t=await V9(e),r=global.hdb_schema[e.schema][e.table];return $9.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(K9,"lmdbSearchByHash")});var ri=M((fOe,R0)=>{"use strict";var vb=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};R0.exports=vb});var q_=M((hOe,w0)=>{"use strict";var sn=Uu(),Y9=_t(),W9=ie(),Ve=kt(),tl=(k(),v(K)),z9=Ro(),y0=tn().LMDB_ERRORS_ENUM,{getSchemaPath:j9}=At(),Io=tl.SEARCH_WILDCARDS;async function Q9(e,t,r){let n;e.schema===tl.SYSTEM_SCHEMA_NAME?n=z9[e.table]:n=global.hdb_schema[e.schema][e.table];let s=N0(e,n.hash_attribute,r,t);return b0(e,s,n.hash_attribute,r)}o(Q9,"prepSearch");async function b0(e,t,r,n){let s=j9(e.schema,e.table),i=await Y9.openEnvironment(s,e.table),a=I0(i,e,t,r),c=a.transaction||i;if([Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ve.SEARCH_TYPES.SEARCH_ALL,Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(J9(e,r)===!1){let d=e.search_attribute;if(d===r)return n?A0(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?A0(a,f):a.map(f)}let u=e.search_attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?sn.batchSearchByHashToMap(c,r,e.get_attributes,u):sn.batchSearchByHash(c,r,e.get_attributes,u)}o(b0,"executeSearch");function I0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Ve.SEARCH_TYPES.EQUALS:s=sn.equals(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.CONTAINS:s=sn.contains(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.ENDS_WITH:case Ve.SEARCH_TYPES._ENDS_WITH:s=sn.endsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.STARTS_WITH:case Ve.SEARCH_TYPES._STARTS_WITH:s=sn.startsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return sn.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return sn.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ve.SEARCH_TYPES.SEARCH_ALL:return sn.searchAll(e,n,t.get_attributes,a,c,l);case Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return sn.searchAllToMap(e,n,t.get_attributes,a,c,l);case Ve.SEARCH_TYPES.BETWEEN:s=sn.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,l);break;case Ve.SEARCH_TYPES.GREATER_THAN:case Ve.SEARCH_TYPES._GREATER_THAN:s=sn.greaterThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ve.SEARCH_TYPES._GREATER_THAN_EQUAL:s=sn.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.LESS_THAN:case Ve.SEARCH_TYPES._LESS_THAN:s=sn.lessThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.LESS_THAN_EQUAL:case Ve.SEARCH_TYPES._LESS_THAN_EQUAL:s=sn.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;default:return Object.create(null)}return s}o(I0,"searchByType");function A0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(A0,"createMapFromIterable");function J9(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(J9,"checkToFetchMore");function N0(e,t,r,n){if(W9.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Io.indexOf(s)>-1)return r===!0?Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ve.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Io[0])<0&&s.indexOf(Io[1])<0)return c===!0?r===!0?Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ve.SEARCH_TYPES.EQUALS;if(Io.indexOf(i)>=0&&Io.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),Ve.SEARCH_TYPES.CONTAINS;if(Io.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ve.SEARCH_TYPES.ENDS_WITH;if(Io.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),Ve.SEARCH_TYPES.STARTS_WITH;if(s.includes(Io[0])||s.includes(Io[1]))return Ve.SEARCH_TYPES.EQUALS;throw new Error(y0.UNKNOWN_SEARCH_TYPE)}else switch(n){case tl.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ve.SEARCH_TYPES.BETWEEN;case tl.VALUE_SEARCH_COMPARATORS.GREATER:return Ve.SEARCH_TYPES.GREATER_THAN;case tl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ve.SEARCH_TYPES.GREATER_THAN_EQUAL;case tl.VALUE_SEARCH_COMPARATORS.LESS:return Ve.SEARCH_TYPES.LESS_THAN;case tl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ve.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(y0.UNKNOWN_SEARCH_TYPE)}}o(N0,"createSearchTypeFromSearchObject");w0.exports={executeSearch:b0,createSearchTypeFromSearchObject:N0,prepSearch:Q9,searchByType:I0}});var C0=M((_Oe,O0)=>{"use strict";var EOe=ri(),X9=xu(),Z9=ie(),e7=(k(),v(K)),t7=q_();O0.exports=r7;function r7(e,t){if(!Z9.isEmpty(t)&&e7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=X9(e,"value");if(n)throw n;return t7.prepSearch(e,t,!0)}o(r7,"lmdbGetDataByValue")});var Mm=M((TOe,P0)=>{"use strict";var SOe=ri(),n7=xu(),s7=ie(),i7=(k(),v(K)),o7=q_();P0.exports=a7;async function a7(e,t){if(!s7.isEmpty(t)&&i7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=n7(e,"value");if(n)throw n;return o7.prepSearch(e,t,!1)}o(a7,"lmdbSearchByValue")});var D0=M((AOe,L0)=>{"use strict";var yOe=kt(),Ub=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},xb=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Bb=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};L0.exports={SearchByConditionsObject:Ub,SearchCondition:xb,SortAttribute:Bb}});var B0=M((wOe,x0)=>{"use strict";var IOe=D0().SearchByConditionsObject,c7=ri(),l7=xu(),Fb=Uu(),$_=kt(),{Resource:NOe}=(Aa(),v(pU)),U0=q_(),u7=Pb(),d7=require("lodash"),{getSchemaPath:f7}=At(),M0=_t(),{handleHDBError:m7,hdbErrors:h7}=Ee(),{HTTP_STATUS_CODES:p7}=h7,E7=1e8;x0.exports=_7;async function _7(e){let t=l7(e,"conditions");if(t)throw m7(t,t.message,p7.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=f7(e.schema,e.table),n=await M0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)M0.openDBI(n,u.search_attribute);let i=d7.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===$_.SEARCH_TYPES.EQUALS?u.estimated_count=Fb.count(n,u.search_attribute,u.search_value):d===$_.SEARCH_TYPES.CONTAINS||d===$_.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=E7}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await v0(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(U0.filterByType),f=d.length,m=Fb.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(h=>u.get(h,{transaction:a,lazy:!0})),f>0&&(l=l.filter(h=>{for(let p=0;p<f;p++)if(!d[p](h))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(h=>u7.parseRow(h,m))}else{for(let f=1;f<i.length;f++){let m=i[f],h=await v0(a,e,m,s.hash_attribute);c=c.concat(h)}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=Fb.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(_7,"lmdbSearchByConditions");async function v0(e,t,r,n){let s=new c7(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===$_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,U0.searchByType(e,s,i,n).map(a=>a.value)}o(v0,"executeConditionSearch")});var vm=M((COe,F0)=>{"use strict";var g7=(k(),v(K)).OPERATIONS_ENUM,Hb=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=g7.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};F0.exports=Hb});var kb=M((LOe,Y0)=>{"use strict";var q0=ri(),$0=vm(),V0=Mm(),K0=Cm(),Pn=(k(),v(K)),H0=ie(),k0=_t(),{getTransactionAuditStorePath:S7,getSchemaPath:T7}=At(),G0=z();Y0.exports=R7;async function R7(e){try{if(H0.isEmpty(global.hdb_schema[e.schema])||H0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await y7(e),await A7(e);let t=T7(e.schema,e.table);try{await k0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")G0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=S7(e.schema,e.table);await k0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")G0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(R7,"lmdbDropTable");async function y7(e){let t=new q0(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await V0(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new $0(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await K0(s)}o(y7,"deleteAttributesFromSystem");async function A7(e){let t=new q0(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await V0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new $0(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await K0(s)}catch(i){throw i}}o(A7,"dropTableFromSystem")});var z0=M((MOe,W0)=>{"use strict";var b7=require("fs-extra"),I7=ri(),N7=Bu(),w7=vm(),O7=kb(),C7=Cm(),P7=Db(),L7=Mm(),No=(k(),v(K)),{getSchemaPath:D7}=At(),{handleHDBError:M7,hdbErrors:v7}=Ee(),{HDB_ERROR_MSGS:U7,HTTP_STATUS_CODES:x7}=v7;W0.exports=B7;async function B7(e){let t;try{t=await F7(e.schema);let r=new I7(No.SYSTEM_SCHEMA_NAME,No.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,No.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[No.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await L7(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await O7(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new w7(No.SYSTEM_SCHEMA_NAME,No.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await C7(s);let i=D7(t);await b7.remove(i)}catch(r){throw r}}o(B7,"lmdbDropSchema");async function F7(e){let t=new N7(No.SYSTEM_SCHEMA_NAME,No.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[No.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await P7(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw M7(new Error,U7.SCHEMA_NOT_FOUND(e),x7.NOT_FOUND,void 0,void 0,!0);return n}o(F7,"validateDropSchema")});var Um=M((UOe,j0)=>{"use strict";var Gb=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};j0.exports=Gb});var $b=M((FOe,Q0)=>{"use strict";var H7=require("fs-extra"),V_=_t(),{getTransactionAuditStorePath:k7}=At(),qb=kt(),BOe=Um();Q0.exports=G7;async function G7(e){let t;try{let r=k7(e.schema,e.table);await H7.mkdirp(r),t=await V_.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{V_.createDBI(t,qb.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),V_.createDBI(t,qb.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),V_.createDBI(t,qb.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(G7,"createTransactionsAuditEnvironment")});var Z0=M((GOe,X0)=>{"use strict";var Vb=(k(),v(K)),J0=_t(),q7=Jc(),{getSystemSchemaPath:$7,getSchemaPath:V7}=At(),kOe=Ro(),K7=U_(),Kb=v_(),Y7=z(),W7=$b();X0.exports=z7;async function z7(e,t){let r=V7(t.schema,t.table),n=new Kb(t.schema,t.table,Vb.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Kb(t.schema,t.table,Vb.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Kb(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await J0.createEnvironment(r,t.table),e!==void 0){let a=await J0.openEnvironment($7(),Vb.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await q7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await Yb(n),await Yb(s),await Yb(i)}await W7(t)}catch(a){throw a}}o(z7,"lmdbCreateTable");async function Yb(e){try{await K7(e)}catch(t){Y7.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(Yb,"createAttribute")});var tB=M(($Oe,eB)=>{"use strict";var j7=Nm(),Q7=zf(),J7=x_(),xm=(k(),v(K)),X7=Jc().updateRecords,Z7=_t(),{getSchemaPath:eee}=At(),tee=wm(),ree=z();eB.exports=nee;async function nee(e){try{let{schemaTable:t,attributes:r}=j7(e);Q7(e,r,t.hash_attribute),e.schema!==xm.SYSTEM_SCHEMA_NAME&&(r.includes(xm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(xm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(xm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(xm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await J7(e.hdb_auth_header,t,r),s=eee(e.schema,e.table),i=await Z7.openEnvironment(s,e.table),a=await X7(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await tee(e,a)}catch(c){ree.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(nee,"lmdbUpdateRecords")});var nB=M((KOe,rB)=>{"use strict";var see=(k(),v(K)).OPERATIONS_ENUM,Wb=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=see.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};rB.exports=Wb});var iB=M((zOe,sB)=>{"use strict";var WOe=nB(),iee=Nm(),oee=zf(),aee=x_(),Bm=(k(),v(K)),cee=Jc().upsertRecords,lee=_t(),{getSchemaPath:uee}=At(),dee=wm(),fee=z(),{handleHDBError:mee,hdbErrors:hee}=Ee();sB.exports=pee;async function pee(e){let t;try{t=iee(e)}catch(l){throw mee(l,l.message,hee.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;oee(e,n,r.hash_attribute),e.schema!==Bm.SYSTEM_SCHEMA_NAME&&(n.includes(Bm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Bm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Bm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Bm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await aee(e.hdb_auth_header,r,n),i=uee(e.schema,e.table),a=await lee.openEnvironment(i,e.table),c=await cee(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await dee(e,c)}catch(l){fee.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(pee,"lmdbUpsertRecords")});var aB=M((QOe,oB)=>{"use strict";var zb=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};oB.exports=zb});var lB=M((XOe,cB)=>{"use strict";var jb=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};cB.exports=jb});var fB=M((tCe,dB)=>{"use strict";var Qb=_t(),{getTransactionAuditStorePath:Eee}=At(),eCe=aB(),Fm=kt(),_ee=ie(),uB=lB(),gee=require("util").promisify,See=gee(setTimeout),Tee=1e4,Ree=100;dB.exports=yee;async function yee(e){let t=Eee(e.schema,e.table),r=await Qb.openEnvironment(t,e.table,!0),n=Qb.listDBIs(r);Qb.initializeDBIs(r,Fm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new uB;do s=await Aee(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 See(Ree);while(s.transactions_deleted>0);return i}o(yee,"deleteAuditLogsBefore");async function Aee(e,t){let r=new uB;try{let n=e.dbis[Fm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[Fm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];_ee.isEmpty(c)||(s=e.dbis[Fm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[Fm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Tee)break}return await s,r}catch(n){throw n}}o(Aee,"deleteTransactions")});var hB=M((nCe,mB)=>{"use strict";var Jb=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};mB.exports=Jb});var EB=M((oCe,pB)=>{"use strict";var bee=ri(),Iee=vm(),iCe=hB(),Mi=(k(),v(K)),Nee=ie(),Xb=_t(),wee=Ro(),Oee=Mm(),Cee=Cm(),{getSchemaPath:Pee}=At();pB.exports=Lee;async function Lee(e,t=!0){let r;e.schema===Mi.SYSTEM_SCHEMA_NAME?r=wee[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Mee(e),s=Pee(e.schema,e.table),i=await Xb.openEnvironment(s,e.table);return t===!0&&await Dee(e,i,r.hash_attribute),Xb.dropDBI(i,e.attribute),n}o(Lee,"lmdbDropAttribute");async function Dee(e,t,r){let n=Xb.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(Dee,"removeAttributeFromAllObjects");async function Mee(e){let t=new bee(Mi.SYSTEM_SCHEMA_NAME,Mi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Oee(t)).filter(a=>a[Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Nee.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Iee(Mi.SYSTEM_SCHEMA_NAME,Mi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Cee(i)}o(Mee,"dropAttributeFromSystem")});var yB=M((lCe,RB)=>{"use strict";var Zb=_t(),Fu=kt(),cCe=An(),eI=(k(),v(K)),_B=ie(),{getTransactionAuditStorePath:vee}=At(),Uee=Uu(),K_=Du(),xee=z();RB.exports=Bee;async function Bee(e){let t=vee(e.schema,e.table),r=await Zb.openEnvironment(t,e.table,!0),n=Zb.listDBIs(r);Zb.initializeDBIs(r,Fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case eI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return gB(r,e.search_values);case eI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,Hee(r,e.search_values,s);case eI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Fee(r,e.search_values);default:return gB(r)}}o(Bee,"readAuditLog");function gB(e,t=[0,Date.now()]){_B.isEmpty(t[0])&&(t[0]=0),_B.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Fu.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 K_,s))}o(gB,"searchTransactionsByTimestamp");function Fee(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Fu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,TB(e,i))}return Object.fromEntries(r)}o(Fee,"searchTransactionsByUsername");function Hee(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Uee.equals(e,Fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Fu.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=TB(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);SB(l,"records",r,d,a),SB(l,"original_records",r,d,a)}return Object.fromEntries(a)}o(Hee,"searchTransactionsByHashValues");function SB(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new K_(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new K_(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(SB,"loopRecords");function TB(e,t){let r=[];try{let n=e.dbis[Fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new K_,i);r.push(a)}}catch(i){xee.warn(i)}return r}catch(n){throw n}}o(TB,"batchSearchTransactions")});var bB=M((mCe,AB)=>{"use strict";var{getSchemaPath:dCe}=At(),fCe=_t(),{database:kee}=(Le(),v(ft));AB.exports={writeTransaction:Gee};async function Gee(e,t,r){return kee({database:e,table:t}).transaction(r)}o(Gee,"writeTransaction")});var OB=M((pCe,wB)=>{"use strict";var{getSchemaPath:IB}=At(),NB=_t();wB.exports={flush:qee,resetReadTxn:$ee};async function qee(e,t){return(await NB.openEnvironment(IB(e,t),t.toString())).flushed}o(qee,"flush");async function $ee(e,t){try{(await NB.openEnvironment(IB(e,t),t.toString())).resetReadTxn()}catch{}}o($ee,"resetReadTxn")});var DB=M((_Ce,LB)=>{"use strict";var{Readable:Vee}=require("stream"),{getDatabases:Kee}=(Le(),v(ft)),{readSync:Yee,openSync:Wee,createReadStream:CB}=require("fs"),{open:zee}=require("lmdb"),PB=Tm(),jee=Rm(),{AUDIT_STORE_OPTIONS:Qee}=(uo(),v(eU)),{INTERNAL_DBIS_NAME:Jee,AUDIT_STORE_NAME:Xee}=kt();LB.exports=ete;var tI=32768,Zee=100;async function ete(e){let t=e.database||e.schema||"data",r=Kee()[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=zee({noSync:!0,maxDbs:jee.MAX_DBS}),m,h=f.openDB(Jee,new PB(!1)),p=d.useReadTransaction(),_=0,g=o(async function(T,R){R.encoding="binary",R.encoder=void 0;let I=f.openDB(T,R),P=d.openDB(T,R);for(let{key:Y,version:te,value:x}of P.getRange({start:null,transaction:p,versions:P.useVersions}))m=I.put(Y,x,te),_++%Zee===0&&(await new Promise($=>setTimeout($,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:T,value:R}of d.getRange({transaction:p,start:!1}))if(s.some(I=>T.startsWith?.(I+"/"))){h.put(T,R);let[,I]=T.split("/"),P=!I,Y=new PB(!P,P);await g(T,Y)}e.include_audit&&await g(Xee,{...Qee}),await m;let y=CB(f.path);return y.headers=l(),y.on("close",()=>{p.done(),f.close()}),y}let a=r[Object.keys(r)[0]].primaryStore,c=Wee(a.path);return a.transaction(()=>{let u=Buffer.alloc(tI);Yee(c,u,0,tI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=CB(null,{fd:c,start:tI}),m=new Vee.from(async function*(){yield u;for await(let h of f)d.openTimer&&(d.openTimer=0),yield h;d.done()}());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(ete,"getBackup")});var UB=M((SCe,vB)=>{"use strict";var tte=z(),{handleHDBError:rte}=Ee(),nte=ax(),ste=U_(),ite=Ib(),ote=zx(),ate=Cm(),cte=Db(),lte=T0(),ute=C0(),dte=Mm(),fte=B0(),mte=z0(),hte=Z0(),pte=tB(),Ete=iB(),_te=fB(),gte=kb(),Ste=EB(),Tte=yB(),Rte=bB(),MB=OB(),yte=DB(),rI=class extends nte{static{o(this,"LMDBBridge")}async searchByConditions(t){return fte(t)}async getDataByHash(t){return await cte(t)}async searchByHash(t){return await lte(t)}async getDataByValue(t,r){return await ute(t,r)}async searchByValue(t){return await dte(t)}async createSchema(t){return await ote(t)}async dropSchema(t){return await mte(t)}async createTable(t,r){return await hte(t,r)}async dropTable(t){return await gte(t)}async createAttribute(t){return await ste(t)}async createRecords(t){return await ite(t)}async updateRecords(t){return await pte(t)}async upsertRecords(t){try{return await Ete(t)}catch(r){throw rte(r,null,null,tte.ERR,r)}}async deleteRecords(t){return await ate(t)}async dropAttribute(t){return await Ste(t)}async deleteAuditLogsBefore(t){return await _te(t)}async readAuditLog(t){return await Tte(t)}writeTransaction(t,r,n){return Rte.writeTransaction(t,r,n)}flush(t,r){return MB.flush(t,r)}resetReadTxn(t,r){return MB.resetReadTxn(t,r)}getBackup(t){return yte(t)}};vB.exports=rI});function Ln(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function km(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a string, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(h=>typeof h=="string")||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a string, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="number"||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a number, attempt to assign ${h}`);Ln(this)[u]=m},"set");break;case"Int":d=o(function(m){let h=m?.__op__?m.value:m;if(!(h>>0===h||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new zn.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Long":d=o(function(m){let h=m?.__op__?m.value:m;if(!(Math.round(h)===m&&Math.abs(h)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new zn.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="bigint"||m==null&&l.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),m?.__op__?m.value=h:m=h;else throw new zn.ClientError(`${u} must be a number, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new zn.ClientError(`${u} must be a Date, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Ss||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Ln(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be an object, attempt to assign ${m}`);Ln(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let p=m[u];if(p?.__op__){let _=this.getRecord()?.[u];return p.update(_)}return p}let h=this.getRecord()?.[u];if(h&&typeof h=="object"){let p=nI(h,l);if(p)return m||this._setChanges(m=Object.create(null)),m[u]=p}return h},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new zn.ClientError("Can not add a property to a sealed table schema");Ln(this)[l]=u}),a("deleteProperty",function(l){Ln(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let h=u[f];m=m.update(h)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?FB:BB);break}c=l}while(c&&c!==BB&&c!==FB)}function HB(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(xB[t])return xB[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=nI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function Ate(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 nI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends nl{static{o(this,"TrackedObject")}},km(r,t)),new r(e)):new nl(e);case Array:let n=new W_(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=nI(a,t?.elements)),n[s]=a}return n;default:return e}}function z_(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=z_(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 Oa(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=Oa(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=tA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Oa(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)bte.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Y_(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[rl]||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(Y_(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(Y_(s))return!0}else return!0}else return!0}}return!1}var zn,xB,BB,FB,nl,bte,rl,W_,Hm,sI=fe(()=>{zn=w(Ee());qE();Ts();o(Ln,"getChanges");o(km,"assignTrackedAccessors");xB=Object.prototype,BB=new Proxy({},{get:HB}),FB=new Proxy({},{get:HB,set:Ate});o(HB,"getProxiedProperty");o(Ate,"setProxiedProperty");o(nI,"trackObject");nl=class{static{o(this,"GenericTrackedObject")}#e;#r;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.#r}_setChanges(t){this.#r=t}};km(nl,{},!0);o(z_,"collapseData");bte=Object.prototype.hasOwnProperty;o(Oa,"updateAndFreeze");o(Y_,"hasChanges");rl=Symbol.for("has-array-changes"),W_=class extends Array{static{o(this,"TrackedArray")}#e;[rl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[rl]=!0,super.splice(...t)}push(...t){return this[rl]=!0,super.push(...t)}pop(){return this[rl]=!0,super.pop()}unshift(...t){return this[rl]=!0,super.unshift(...t)}shift(){return this[rl]=!0,super.shift()}};W_.prototype.constructor=Array;Hm=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var WB={};Ce(WB,{ResourceBridge:()=>aI});function cI({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 kB(e,t){let r=vi(e),n=cI(e,r);if(!r)throw new ni.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;vt(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&z_(d)}catch(f){d={message:(0,YB.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function vi(e){let t=e.database||e.schema||Nte,r=it()[t];if(!r)throw(0,ni.handleHDBError)(new Error,Ite.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function GB(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*qB(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var $B,j_,ni,VB,iI,oI,KB,YB,Ite,Nte,wte,Ote,aI,zB=fe(()=>{$B=w(UB()),j_=w(xu()),ni=w(Ee());Le();VB=w(Nm());k();iI=w(bo()),oI=w(ti()),KB=w(ie());vc();sI();YB=w(z()),{HDB_ERROR_MSGS:Ite}=ni.hdbErrors,Nte="data",wte=1e4,Ote=10,aI=class extends $B.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let a of t.conditions||[])a?.attribute!==void 0&&(a.search_attribute=a.attribute),a?.comparator!==void 0&&(a.search_type=a.comparator),a?.value!==void 0&&(a.search_value=a.value);let r=(0,j_.default)(t,"conditions");if(r)throw(0,ni.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=vi(t);if(!n)throw new ni.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(a){if("conditions"in a&&a.conditions)return a.conditions=a.conditions.map(i),a;{let c=a;return{attribute:c.search_attribute??c.attribute,comparator:c.search_type??c.comparator,value:c.search_value!==void 0?c.search_value:c.value}}}return o(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:cI(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new ni.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await vi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=vi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return vi(t).dropTable()}createSchema(t){return Hu({database:t.schema,table:null}),iI.signalSchemaChange(new oI.SchemaEventMsg(process.pid,G.CREATE_SCHEMA,t.schema))}async dropSchema(t){await lI(t.schema),iI.signalSchemaChange(new oI.SchemaEventMsg(process.pid,G.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,VB.default)(t),s,i=it()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),vt(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=z_(m));for(let h in d)if(Object.prototype.hasOwnProperty.call(d,h)){let p=d[h];if(typeof p=="function")try{let _=p([[m]]);Array.isArray(_)&&(p=_[0].func_val,d[h]=p)}catch(_){throw _.message+="Trying to set key "+h+" on object"+JSON.stringify(d),_}}if(m)for(let h in m)Object.prototype.hasOwnProperty.call(d,h)||(d[h]=m[h]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=it()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),vt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return GB(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=it()[t.schema][t.table];if(!r.createdTimeProperty)throw new ni.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:AE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,KB.asyncSetTimeout)(Ote),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%wte===0&&await u();return l.length>0&&await u(),s?GB(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,j_.default)(t,"hashes");if(r)throw r;return kB(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of kB(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&My[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=t.attribute),t.value!==void 0&&(t.search_value=t.value);let n=(0,j_.default)(t,"value");if(n)throw n;let s=vi(t);if(!s)throw new ni.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===AE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:cI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=vi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){vi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return vi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=vi(t),n={};switch(t.search_type){case bE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case bE.USERNAME:{let s=t.search_values;for await(let i of qB(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return qB(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(cI,"getSelect");o(kB,"getRecords");o(vi,"getTable");o(GB,"createDeleteResponse");o(qB,"groupRecordsInHistory")});var jn=M((PCe,jB)=>{"use strict";var{ResourceBridge:Cte}=(zB(),v(WB)),Pte=ce();Pte.initSync();var Q_;function Lte(){return Q_||(Q_=new Cte,Q_)}o(Lte,"getBridge");jB.exports=Lte()});var ZB=M((DCe,XB)=>{"use strict";var QB=require("lodash"),Gm=require("mathjs"),Dte=require("jsonata"),JB=ie();XB.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?QB.uniqWith(e,QB.isEqual):e,"distinct_array"),searchJSON:Mte,mad:qm.bind(null,Gm.mad),mean:qm.bind(null,Gm.mean),mode:qm.bind(null,Gm.mode),prod:qm.bind(null,Gm.prod),median:qm.bind(null,Gm.median)};function qm(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(qm,"aggregateFunction");function Mte(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(JB.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),JB.isEmpty(this.__ala__.res[r])){let n=Dte(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(Mte,"searchJSON")});var tF=M((vCe,eF)=>{"use strict";var ar=require("moment"),uI="YYYY-MM-DDTHH:mm:ss.SSSZZ";ar.suppressDeprecationWarnings=!0;eF.exports={current_date:o(()=>ar().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>ar().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return ar(e).utc().format("YYYY");case"month":return ar(e).utc().format("MM");case"day":return ar(e).utc().format("DD");case"hour":return ar(e).utc().format("HH");case"minute":return ar(e).utc().format("mm");case"second":return ar(e).utc().format("ss");case"millisecond":return ar(e).utc().format("SSS");default:break}},"extract"),date:o(e=>ar(e).utc().format(uI),"date"),date_format:o((e,t)=>ar(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>ar(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>ar(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=ar(e).utc(),s=ar(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>ar().utc().valueOf(),"now"),get_server_time:o(()=>ar().format(uI),"get_server_time"),offset_utc:o((e,t)=>ar(e).utc().utcOffset(t).format(uI),"offset_utc")}});var iF=M((xCe,sF)=>{"use strict";var vte=require("@turf/area"),Ute=require("@turf/length"),xte=require("@turf/circle"),Bte=require("@turf/difference"),Fte=require("@turf/distance"),Hte=require("@turf/boolean-contains"),kte=require("@turf/boolean-equal"),Gte=require("@turf/boolean-disjoint"),qte=require("@turf/helpers"),rF=(k(),v(K)),Ye=ie(),wo=z();sF.exports={geoArea:$te,geoLength:Vte,geoCircle:Kte,geoDifference:Yte,geoDistance:nF,geoNear:Wte,geoContains:zte,geoEqual:jte,geoCrosses:Qte,geoConvert:Jte};function $te(e){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return vte.default(e)}catch(t){return wo.trace(t,e),NaN}}o($te,"geoArea");function Vte(e,t){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return Ute.default(e,{units:t||"kilometers"})}catch(r){return wo.trace(r,e),NaN}}o(Vte,"geoLength");function Kte(e,t,r){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return xte.default(e,t,{units:r||"kilometers"})}catch(n){return wo.trace(n,e,t),NaN}}o(Kte,"geoCircle");function Yte(e,t){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return Bte(e,t)}catch(r){return wo.trace(r,e,t),NaN}}o(Yte,"geoDifference");function nF(e,t,r){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return Fte.default(e,t,{units:r||"kilometers"})}catch(n){return wo.trace(n,e,t),NaN}}o(nF,"geoDistance");function Wte(e,t,r,n){if(Ye.isEmpty(e)||Ye.isEmpty(t))return!1;if(Ye.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return nF(e,t,n)<=r}catch(s){return wo.trace(s,e,t),!1}}o(Wte,"geoNear");function zte(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return Hte.default(e,t)}catch(r){return wo.trace(r,e,t),!1}}o(zte,"geoContains");function jte(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return kte.default(e,t)}catch(r){return wo.trace(r,e,t),!1}}o(jte,"geoEqual");function Qte(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return!Gte.default(e,t)}catch(r){return wo.trace(r,e,t),!1}}o(Qte,"geoCrosses");function Jte(e,t,r){if(Ye.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ye.isEmpty(t))throw new Error("geo_type is required");if(Ye.isEmpty(rF.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(rF.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ye.autoCastJSON(e)),qte[t](e,r)}o(Jte,"geoConvert")});var J_=M((FCe,oF)=>{var sl=ZB(),Qn=tF(),Ui=iF();oF.exports=e=>{e.aggr.mad=e.aggr.MAD=sl.mad,e.aggr.mean=e.aggr.MEAN=sl.mean,e.aggr.mode=e.aggr.MODE=sl.mode,e.aggr.prod=e.aggr.PROD=sl.prod,e.aggr.median=e.aggr.MEDIAN=sl.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=sl.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=sl.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Qn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Qn.current_time,e.fn.extract=e.fn.EXTRACT=Qn.extract,e.fn.date=e.fn.DATE=Qn.date,e.fn.date_format=e.fn.DATE_FORMAT=Qn.date_format,e.fn.date_add=e.fn.DATE_ADD=Qn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Qn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Qn.date_diff,e.fn.now=e.fn.NOW=Qn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Qn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Qn.get_server_time,e.fn.getdate=e.fn.GETDATE=Qn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Qn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ui.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ui.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ui.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ui.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ui.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ui.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ui.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ui.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ui.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ui.geoNear}});var uF=M((HCe,lF)=>{"use strict";var $m=require("lodash"),Dn=require("alasql");Dn.options.cache=!1;var Xte=J_(),aF=require("clone"),X_=require("recursive-iterator"),ke=z(),tt=ie(),ku=jn(),Zte=(k(),v(K)),{hdbErrors:ere}=Ee(),{getDatabases:cF}=(Le(),v(ft)),tre="IS NULL",si="There was a problem performing this search. Please check the logs and try again.";Xte(Dn);var dI=class{static{o(this,"SQLSearch")}constructor(t,r){if(tt.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(),tt.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!tt.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(si)}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(si)}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(si)}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(si)}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(si)}}_getColumns(){let t=new X_(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(aF(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$m.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=cF()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(tt.isEmpty(this.statement.where)){ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new X_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!tt.isEmpty(r)&&r.right)if(tt.isNotEmptyAndHasValue(r.right.value)){let n=tt.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Dn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=tt.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Dn.yy.LogicValue({value:i}):n instanceof Dn.yy.StringValue&&tt.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Dn.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 X_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!tt.isEmpty(Zte.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(tt.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(tt.isEmptyOrZeroLength(r.left.columnid)||tt.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(tt.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!tt.isEmpty(r.right.value)||!tt.isEmpty(r.left.value)?n.add(tt.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(tt.isEmptyOrZeroLength(this.all_table_attributes)&&tt.isEmptyOrZeroLength(this.statement.from)&&tt.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&&$m.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(tt.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);tt.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(tt.isEmptyOrZeroLength(this.all_table_attributes)&&!tt.isEmptyOrZeroLength(this.columns.columns))return t;if(tt.isEmptyOrZeroLength(this.all_table_attributes)&&tt.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Dn.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(aF(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(tt.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(tre)>-1&&this.tables.forEach(s=>{let i={columnid:cF()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$m.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!tt.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!tt.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await ku.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(si)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.search_value=d;let m=await ku.getDataByValue(f);for(let[h,p]of m)this.data[i].__mergedData[h]?this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]):(this.data[i].__mergedData[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(d){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(d),new Error(si)}else if(!tt.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!tt.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 h=d[f];c.search_attribute=h.attribute,c.search_value=h.search_value;let p=await ku.getDataByValue(c,h.operation);if(l)for(let[_]of p)this.data[i].__mergedData[_]||(this.data[i].__mergedData[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,g]of p)this.data[i].__mergedData[_]?this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]):(this.data[i].__mergedData[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,_))}}catch(d){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ke.error(d),new Error(si)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await ku.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(si)}}}_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 Dn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Dn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Dn.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 Dn.yy.FuncValue:new Dn.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(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let p=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(p+=" ON "+h.on.toString()),i.push(p),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(h=>{let p=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hashName,_=h.as?h.as_orig:h.tableid_orig;a.push({key:`'${_}.${p}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${p}\` AS "${_}.${p}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.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(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.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 h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,p=this._convertColumnsToIndexes(h,s);m=await Dn.promise(p,t),t=null}catch(h){throw ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ke.error(h),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let h=0,p=m.length;h<p;h++){let _=m[h];a.forEach(g=>{_[g.key]!==null&&_[g.key]!==void 0&&g.keys.add(_[g.key])})}a.forEach(h=>{let p=Object.keys(this.data[`${h.schema}_${h.table}`].__mergedData),_=$m.difference(p,[...h.keys].map(g=>g.toString()));for(let g=0,y=_.length;g<y;g++){let T=_[g];delete this.data[`${h.schema}_${h.table}`].__mergedData[T]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new X_(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=$m.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(si)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await ku.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],h=l.get(m);for(let p=0;p<u;p++){let _=s.columns[p],g=h[_]===void 0?null:h[_];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(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();ke.trace(`Final SQL: ${s}`),n=await Dn.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(ere.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((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let a=await ku.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw ke.error("There was an error when processing this SQL operation. Check your logs"),ke.error(a),new Error(si)}}return Object.values(Object.values(this.data)[0].__mergedData)}};lF.exports=dI});var on=M((GCe,dF)=>{"use strict";var rre=ix();dF.exports={searchByConditions:sre,searchByHash:ire,searchByValue:ore,search:are};var fI=jn(),{transformReq:mI}=ie(),nre=uF();async function sre(e){return mI(e),fI.searchByConditions(e)}o(sre,"searchByConditions");async function ire(e){mI(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of fI.searchByHash(e))r&&t.push(r);return t}o(ire,"searchByHash");async function ore(e){mI(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of fI.searchByValue(e))t.push(r);return t}o(ore,"searchByValue");function are(e,t){try{let r=new rre(e);r.validate(),new nre(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(are,"search")});var xi=M(($Ce,pF)=>{"use strict";var Vm=require("crypto"),cre=ce(),{CONFIG_PARAMS:lre}=(k(),v(K)),mF="aes-256-cbc",ure=32,dre=16,hI=64,hF=32,fre=hI+hF,fF=new Map;pF.exports={encrypt:mre,decrypt:hre,createNatsTableStreamName:pre};function mre(e){let t=Vm.randomBytes(ure),r=Vm.randomBytes(dre),n=Vm.createCipheriv(mF,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(mre,"encrypt");function hre(e){let t=e.substr(0,hI),r=e.substr(hI,hF),n=e.substr(fre,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=Vm.createDecipheriv(mF,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(hre,"decrypt");function pre(e,t){let r=cre.get(lre.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=fF.get(r);return n||(n=Vm.createHash("md5").update(r).digest("hex"),fF.set(r,n)),n}o(pre,"createNatsTableStreamName")});var Ca=M((YCe,SF)=>{"use strict";var KCe=on(),Km=z(),{validateBySchema:EF}=at(),il=require("joi"),Ere=xi(),Z_=ie(),{handleHDBError:eg,hdbErrors:_re,ClientError:_F}=Ee(),{HDB_ERROR_MSGS:tg,HTTP_STATUS_CODES:pI}=_re,gF=ce();gF.initSync();var{getDatabases:EI}=(Le(),v(ft)),gre=require("fs-extra"),Sre=(k(),v(K));SF.exports={describeAll:Tre,describeTable:rg,describeSchema:Rre};async function Tre(e={}){try{let t=Z_.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=EI(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let h in m)try{let p;if(t||s||r)p=await rg({schema:f,table:h,exactCount:u});else if(n&&n[f].describe&&n[f].tables[h].describe){let _=n[f].tables[h].attribute_permissions;p=await rg({schema:f,table:h,exactCount:u},_)}p&&l.push(p)}catch(p){Km.error(p)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return Km.error("Got an error in describeAll"),Km.error(t),eg(new Error,tg.DESCRIBE_ALL_ERR)}}o(Tre,"describeAll");async function rg(e,t){Z_.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=EF(e,il.object({database:il.string(),table:il.string().required(),exact_count:il.boolean().strict()}));if(i)throw new _F(i.message);let c=EI()[r];if(!c)throw eg(new Error,tg.SCHEMA_NOT_FOUND(e.schema),pI.NOT_FOUND);let l=c[n];if(!l)throw eg(new Error,tg.TABLE_NOT_FOUND(e.schema,e.table),pI.NOT_FOUND);function u(h){d.push({attribute:h.attribute,type:h.type,elements:h.elements?.type,indexed:h.indexed,is_primary_key:h.isPrimaryKey,assigned_created_time:h.assignCreatedTime,assigned_updated_time:h.assignUpdatedTime,nullable:h.nullable,properties:h.properties?h.properties.map(p=>({type:p.type,name:p.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let h={};s.forEach(p=>{p.describe&&(h[p.attribute_name]=!0)}),l.attributes.forEach(p=>{h[p.name]&&u(p)})}else l.attributes?.forEach(h=>u(h));let f;try{f=(await gre.stat(l.primaryStore.env.path)).size}catch(h){Km.warn("unable to get database size",h)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(h=>h.isPrimaryKey||h.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(h=>h.name).filter(h=>h&&h!=="NATSReplicator"&&h!=="Replicator")),gF.get(Sre.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Ere.createNatsTableStreamName(m.schema,m.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=h.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=h.estimatedRange;let p=l.auditStore;if(p)for(let _ of p.getKeys({reverse:!0,limit:1}))m.last_updated_record=_[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let _ of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=_}catch(h){Km.warn(`unable to stat table dbi due to ${h}`)}return m}o(rg,"descTable");async function Rre(e){Z_.transformReq(e);let t=EF(e,il.object({database:il.string(),exact_count:il.boolean().strict()}));if(t)throw new _F(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=EI()[n];if(!i)throw eg(new Error,tg.SCHEMA_NOT_FOUND(e.schema),pI.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Z_.isEmpty(l)||l.describe){let u=await rg({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(Rre,"describeSchema")});var Mn=M((zCe,AF)=>{"use strict";var sg=Sb(),$r=ie(),yre=require("util"),ig=jn(),Are=ei(),TF=z(),{handleHDBError:ol,hdbErrors:bre}=Ee(),{HTTP_STATUS_CODES:al}=bre,Ire=yre.promisify(Are.getTableSchema),Nre="updated",RF="inserted",yF="upserted";AF.exports={insert:Ore,update:Cre,upsert:Pre,validation:wre,flush:Lre};async function wre(e){if($r.isEmpty(e))throw new Error("invalid update parameters defined.");if($r.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if($r.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Ire(e.schema,e.table),r=sg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&$r.isEmptyOrZeroLength(c[n]))throw TF.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(!$r.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw TF.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!$r.isEmpty(c[n])&&c[n]!==""&&s.has($r.autoCast(c[n]))&&(c.skip=!0),s.add($r.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(wre,"validation");async function Ore(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=sg(e);if(t)throw ol(new Error,t.message,al.BAD_REQUEST);$r.transformReq(e);let r=$r.checkSchemaTableExist(e.schema,e.table);if(r)throw ol(new Error,r,al.BAD_REQUEST);let n=await ig.createRecords(e);return ng(RF,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Ore,"insertData");async function Cre(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=sg(e);if(t)throw ol(new Error,t.message,al.BAD_REQUEST);$r.transformReq(e);let r=$r.checkSchemaTableExist(e.schema,e.table);if(r)throw ol(new Error,r,al.BAD_REQUEST);let n=await ig.updateRecords(e);return $r.isEmpty(n.existing_rows)?ng(Nre,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):ng(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Cre,"updateData");async function Pre(e){if(e.operation!=="upsert")throw ol(new Error,"invalid operation, must be upsert",al.INTERNAL_SERVER_ERROR);let t=sg(e);if(t)throw ol(new Error,t.message,al.BAD_REQUEST);$r.transformReq(e);let r=$r.checkSchemaTableExist(e.schema,e.table);if(r)throw ol(new Error,r,al.BAD_REQUEST);let n=await ig.upsertRecords(e);return ng(yF,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(Pre,"upsertData");function ng(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===RF?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===yF?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(ng,"returnObject");function Lre(e){return $r.transformReq(e),ig.flush(e.schema,e.table)}o(Lre,"flush")});var gI=M((QCe,NF)=>{var Dre=at(),_I=require("joi"),{hdbTable:Mre,hdbDatabase:bF}=Di(),IF={schema:bF,database:bF,table:Mre},vre={date:_I.date().iso().required()},Ure={timestamp:_I.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};NF.exports=function(e,t){let r=t==="timestamp"?{...IF,...Ure}:{...IF,...vre},n=_I.object(r);return Dre.validateBySchema(e,n)}});var CF=M((JCe,OF)=>{var xre=at(),SI=require("joi"),{hdbTable:Bre,hdbDatabase:wF}=Di(),Fre=SI.object({schema:wF,database:wF,table:Bre,hash_values:SI.array().required(),ids:SI.array()});OF.exports=function(e){return xre.validateBySchema(e,Fre)}});var AI=M((XCe,PF)=>{"use strict";var TI=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},RI=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=a}},yI=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};PF.exports={InsertObject:TI,NoSQLSeachObject:RI,DeleteResponseObject:yI}});var ul=M((ePe,UF)=>{"use strict";var DF=gI(),Hre=CF(),cl=ie(),LF=require("moment"),MF=z(),{promisify:kre,callbackify:Gre}=require("util"),ll=(k(),v(K)),qre=ei(),bI=kre(qre.getTableSchema),II=jn(),{DeleteResponseObject:$re}=AI(),{handleHDBError:Pa,hdbErrors:Vre}=Ee(),{HDB_ERROR_MSGS:og,HTTP_STATUS_CODES:La}=Vre,Kre="records successfully deleted",Yre=Gre(vF);UF.exports={delete:Yre,deleteRecord:vF,deleteFilesBefore:Wre,deleteAuditLogsBefore:zre};async function Wre(e){let t=DF(e,"date");if(t)throw Pa(t,t.message,La.BAD_REQUEST,void 0,void 0,!0);if(cl.transformReq(e),!LF(e.date,LF.ISO_8601).isValid())throw Pa(new Error,og.INVALID_DATE,La.BAD_REQUEST,ll.LOG_LEVELS.ERROR,og.INVALID_DATE,!0);let n=cl.checkSchemaTableExist(e.schema,e.table);if(n)throw Pa(new Error,n,La.NOT_FOUND,ll.LOG_LEVELS.ERROR,n,!0);let s=await II.deleteRecordsBefore(e);if(await bI(e.schema,e.table),MF.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Wre,"deleteFilesBefore");async function zre(e){let t=DF(e,"timestamp");if(t)throw Pa(t,t.message,La.BAD_REQUEST,void 0,void 0,!0);if(cl.transformReq(e),isNaN(e.timestamp))throw Pa(new Error,og.INVALID_VALUE("Timestamp"),La.BAD_REQUEST,ll.LOG_LEVELS.ERROR,og.INVALID_VALUE("Timestamp"),!0);let r=cl.checkSchemaTableExist(e.schema,e.table);if(r)throw Pa(new Error,r,La.NOT_FOUND,ll.LOG_LEVELS.ERROR,r,!0);let n=await II.deleteAuditLogsBefore(e);return await bI(e.schema,e.table),MF.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(zre,"deleteAuditLogsBefore");async function vF(e){e.ids&&(e.hash_values=e.ids);let t=Hre(e);if(t)throw Pa(t,t.message,La.BAD_REQUEST,void 0,void 0,!0);cl.transformReq(e);let r=cl.checkSchemaTableExist(e.schema,e.table);if(r)throw Pa(new Error,r,La.NOT_FOUND,ll.LOG_LEVELS.ERROR,r,!0);try{await bI(e.schema,e.table);let n=await II.deleteRecords(e);return cl.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${Kre}`),n}catch(n){if(n.message===ll.SEARCH_NOT_FOUND_MESSAGE){let s=new $re;return s.message=ll.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(vF,"deleteRecord")});var ag={};Ce(ag,{HASH_FUNCTION:()=>Mr,hash:()=>OI,validate:()=>CI});function NI(e=Wm){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Ym.randomBytes(e)).map(r=>t[r%t.length]).join("")}function OI(e,t=Mr[BF?.toUpperCase()]??Mr.SHA256){return wI[t](e)}function CI(e,t,r=Mr[BF?.toUpperCase()]??Mr.SHA256){return e?jre[r](e,t):!1}var Ym,Gu,xF,BF,Wm,FF,Mr,wI,jre,cg=fe(()=>{Ym=w(require("node:crypto")),Gu=w(require("argon2")),xF=w(ce());k();BF=(0,xF.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Wm=16,FF=9,Mr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(NI,"generateSalt");wI={[Mr.MD5]:(e,t=void 0)=>{t=t??NI(FF);let r=Ym.createHash(Mr.MD5).update(e+t).digest("hex");return t+r},[Mr.SHA256]:(e,t=void 0)=>{t=t??NI(Wm);let r=Ym.createHash(Mr.SHA256).update(e+t).digest("hex");return t+r},[Mr.ARGON2ID]:async e=>{let t=NI(Wm),r=await Gu.hash(e,{type:Gu.argon2id,salt:Buffer.from(t)});return t+r}},jre={[Mr.MD5]:(e,t)=>{let r=e.slice(0,FF);return e===wI[Mr.MD5](t,r)},[Mr.SHA256]:(e,t)=>{let r=e.slice(0,Wm);return e===wI[Mr.SHA256](t,r)},[Mr.ARGON2ID]:async(e,t)=>await Gu.verify(e.slice(Wm),t)};o(OI,"hash");o(CI,"validate")});var kF=M((sPe,HF)=>{var PI=at(),an={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 Qre(e){return an.password.presence=!0,an.username.presence=!0,an.role.presence=!0,an.active.presence=!0,PI.validateObject(e,an)}o(Qre,"addUserValidation");function Jre(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,PI.validateObject(e,an)}o(Jre,"alterUserValidation");function Xre(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,PI.validateObject(e,an)}o(Xre,"dropUserValidation");HF.exports={addUserValidation:Qre,alterUserValidation:Jre,dropUserValidation:Xre}});var It=M((aPe,qF)=>{"use strict";var{platform:oPe}=require("os"),Zre="nats-server.zip",LI="nats-server",ene=process.platform==="win32"?`${LI}.exe`:LI,tne=/^[^\s.,*>]+$/,GF="__request__",rne=o(e=>`${e}.${GF}`,"REQUEST_SUBJECT"),nne={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},sne={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},ine={HUB:"hub.pid",LEAF:"leaf.pid"},one={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},ane={SUCCESS:"success",ERROR:"error"},cne={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},lne={TXN:"txn",MSGID:"msgid"},qu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},une={[qu.ERR]:1,[qu.WRN]:2,[qu.INF]:3,[qu.DBG]:4,[qu.TRC]:5},dne={debug:"-D",trace:"-DVV"};qF.exports={NATS_SERVER_ZIP:Zre,NATS_SERVER_NAME:LI,NATS_BINARY_NAME:ene,PID_FILES:ine,NATS_CONFIG_FILES:sne,SERVER_SUFFIX:one,NATS_TERM_CONSTRAINTS_RX:tne,REQUEST_SUFFIX:GF,UPDATE_REMOTE_RESPONSE_STATUSES:ane,CLUSTER_STATUS_STATUSES:cne,REQUEST_SUBJECT:rne,SUBJECT_PREFIXES:lne,MSG_HEADERS:nne,LOG_LEVELS:qu,LOG_LEVEL_FLAGS:dne,LOG_LEVEL_HIERARCHY:une}});var Jn=M((lPe,vr)=>{"use strict";var KF="username is required",YF="nothing to update, must supply active, role or password to update",WF="password cannot be an empty string",zF="If role is specified, it cannot be empty.",jF="active must be true or false";vr.exports.addUser=Tne;vr.exports.alterUser=Rne;vr.exports.dropUser=Ane;vr.exports.getSuperUser=One;vr.exports.userInfo=bne;vr.exports.listUsers=ug;vr.exports.listUsersExternal=Ine;vr.exports.setUsersWithRolesCache=dl;vr.exports.findAndValidateUser=kI;vr.exports.getClusterUser=Cne;vr.exports.getUsersWithRolesCache=wne;vr.exports.USERNAME_REQUIRED=KF;vr.exports.ALTERUSER_NOTHING_TO_UPDATE=YF;vr.exports.EMPTY_PASSWORD=WF;vr.exports.EMPTY_ROLE=zF;vr.exports.ACTIVE_BOOLEAN=jF;var QF=Mn(),fne=ul(),zm=(cg(),v(ag)),JF=kF(),jm=on(),xI=bo(),Bi=ie(),XF=require("validate.js"),BI=z(),{promisify:mne}=require("util"),FI=xi(),MI=(k(),v(K)),$F=It(),hne=yt(),pne=ce(),Ene=Ro(),{hdbErrors:_ne,ClientError:ii}=Ee(),{HTTP_STATUS_CODES:Oo,AUTHENTICATION_ERROR_MSGS:DI,HDB_ERROR_MSGS:$u}=_ne,{UserEventMsg:HI}=ti(),vI=require("lodash"),{server:lg}=(Pr(),v(Bf)),gne=z();lg.getUser=(e,t)=>kI(e,t,t!=null);lg.authenticateUser=(e,t)=>kI(e,t);var ZF={username:!0,active:!0,role:!0,password:!0},VF=new Map,Sne=mne(fne.delete),UI=pne.get(MI.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??zm.HASH_FUNCTION.SHA256,Fi;async function Tne(e){let t=XF.cleanAttributes(e,ZF),r=JF.addUserValidation(t);if(r)throw new ii(r.message);let n=await jm.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new ii($u.ROLE_NAME_NOT_FOUND(t.role),Oo.NOT_FOUND);if(n.length>1)throw new ii($u.DUP_ROLES_FOUND(t.role),Oo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=FI.encrypt(t.password)),t.password=await zm.hash(t.password,UI),t.hash_function=UI,t.role=n[0].id;let s=await QF.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(BI.debug(s),await dl(),s.skipped_hashes.length===1)throw new ii($u.USER_ALREADY_EXISTS(t.username),Oo.CONFLICT);return xI.signalUserChange(new HI(process.pid)),`${t.username} successfully added`}o(Tne,"addUser");async function Rne(e){let t=XF.cleanAttributes(e,ZF);if(Bi.isEmptyOrZeroLength(t.username))throw new Error(KF);if(Bi.isEmptyOrZeroLength(t.password)&&Bi.isEmptyOrZeroLength(t.role)&&Bi.isEmptyOrZeroLength(t.active))throw new Error(YF);if(!Bi.isEmpty(t.password)&&Bi.isEmptyOrZeroLength(t.password.trim()))throw new Error(WF);if(!Bi.isEmpty(t.active)&&!Bi.isBoolean(t.active))throw new Error(jF);if(!Bi.isEmpty(t.password)&&!Bi.isEmptyOrZeroLength(t.password.trim())&&(yne(t.username)&&(t.hash=FI.encrypt(t.password)),t.password=await zm.hash(t.password,UI)),t.role==="")throw new Error(zF);if(t.role){let n=await jm.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new ii($u.ALTER_USER_ROLE_NOT_FOUND(t.role),Oo.NOT_FOUND);if(n.length>1)throw new ii($u.DUP_ROLES_FOUND(t.role),Oo.CONFLICT);t.role=n[0].id}let r=await QF.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await dl(),xI.signalUserChange(new HI(process.pid)),r}o(Rne,"alterUser");function yne(e){let t=!1,r=Fi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(yne,"isClusterUser");async function Ane(e){let t=JF.dropUserValidation(e);if(t)throw new ii(t.message);if(Fi.get(e.username)===void 0)throw new ii($u.USER_NOT_EXIST(e.username),Oo.NOT_FOUND);let r=await Sne({table:"hdb_user",schema:"system",hash_values:[e.username]});return BI.debug(r),await dl(),xI.signalUserChange(new HI(process.pid)),`${e.username} successfully deleted`}o(Ane,"dropUser");async function bne(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=vI.cloneDeep(e.hdb_user);let r=await jm.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(bne,"userInfo");async function Ine(){let e=await ug();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Ine,"listUsersExternal");async function ug(){let e=await jm.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=vI.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await jm.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=vI.cloneDeep(s),s.role=t[s.role],Nne(s.role),n.set(s.username,s);return n}o(ug,"listUsers");function Nne(e){if(!e){BI.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(Ene)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Nne,"appendSystemTablesToRole");async function dl(e=void 0){e?Fi=e:Fi=await ug()}o(dl,"setUsersWithRolesCache");async function wne(){return Fi||await dl(),Fi}o(wne,"getUsersWithRolesCache");async function kI(e,t,r=!0){Fi||await dl();let n=Fi.get(e);if(!n){if(!r)return{username:e};throw new ii(DI.GENERIC_AUTH_FAIL,Oo.UNAUTHORIZED)}if(n&&!n.active)throw new ii(DI.USER_INACTIVE,Oo.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(VF.get(t)===n.password)return s;{let i=zm.validate(n.password,t,n.hash_function||zm.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)VF.set(t,n.password);else throw new ii(DI.GENERIC_AUTH_FAIL,Oo.UNAUTHORIZED)}}return s}o(kI,"findAndValidateUser");async function One(){Fi||await dl();for(let[,e]of Fi)if(e.role.role==="super_user")return e}o(One,"getSuperUser");async function Cne(){let e=await ug(),t=hne.getConfigFromFile(MI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==MI.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=FI.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+$F.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+$F.SERVER_SUFFIX.ADMIN,r}o(Cne,"getClusterUser");var eH=[];lg.invalidateUser=function(e){for(let t of eH)try{t(e)}catch(r){gne.error("Error invalidating user",r)}};lg.onInvalidatedUser=function(e){eH.push(e)}});var Jm=M((mPe,sH)=>{"use strict";var fl=z(),Xn=(k(),v(K)),Pne=$U(),dPe=ei(),fPe=Ca(),Lne=Jn(),{validateEvent:tH}=ti(),Qm=jn(),Dne=require("process"),{resetDatabases:Mne}=(Le(),v(ft)),vne={[Xn.ITC_EVENT_TYPES.SCHEMA]:Une,[Xn.ITC_EVENT_TYPES.USER]:nH};async function Une(e){let t=tH(e);if(t){fl.error(t);return}fl.trace("ITC schemaHandler received schema event:",e),await Pne(e.message),await xne(e.message)}o(Une,"schemaHandler");async function xne(e){try{Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Mne();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){fl.error(t)}}o(xne,"syncSchemaMetadata");var rH=[];async function nH(e){try{try{Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){fl.warn(r)}let t=tH(e);if(t){fl.error(t);return}fl.trace(`ITC userHandler ${Xn.HDB_ITC_CLIENT_PREFIX}${Dne.pid} received user event:`,e),await Lne.setUsersWithRolesCache();for(let r of rH)r()}catch(t){fl.error(t)}}o(nH,"userHandler");nH.addListener=function(e){rH.push(e)};sH.exports=vne});var ti=M((SPe,oH)=>{"use strict";var pPe=z(),GI=ie(),Bne=(k(),v(K)),{ITC_ERRORS:Xm}=tn(),{parentPort:EPe,threadId:Fne,isMainThread:Hne,workerData:_Pe}=require("worker_threads"),{onMessageFromWorkers:kne,broadcast:gPe,broadcastWithAcknowledgement:Gne}=st();oH.exports={sendItcEvent:qne,validateEvent:iH,SchemaEventMsg:$ne,UserEventMsg:Vne};var dg;kne(async(e,t)=>{dg=dg||Jm(),iH(e),dg[e.type]&&await dg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function qne(e){return!Hne&&e.message&&(e.message.originator=Fne),Gne(e)}o(qne,"sendItcEvent");function iH(e){if(typeof e!="object")return Xm.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||GI.isEmpty(e.type))return Xm.MISSING_TYPE;if(!e.hasOwnProperty("message")||GI.isEmpty(e.message))return Xm.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||GI.isEmpty(e.message.originator))return Xm.MISSING_ORIGIN;if(Bne.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xm.INVALID_EVENT(e.type)}o(iH,"validateEvent");function $ne(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o($ne,"SchemaEventMsg");function Vne(e){this.originator=e}o(Vne,"UserEventMsg")});var bo=M((yPe,uH)=>{"use strict";var aH=(k(),v(K)),RPe=ie(),fg=z(),cH=IU(),Vu,{sendItcEvent:lH}=ti();function Kne(e){try{fg.info("signalSchemaChange called with message:",e),Vu=Vu||Jm();let t=new cH(aH.ITC_EVENT_TYPES.SCHEMA,e);return Vu.schema(t),lH(t)}catch(t){fg.error(t)}}o(Kne,"signalSchemaChange");function Yne(e){try{fg.trace("signalUserChange called with message:",e),Vu=Vu||Jm();let t=new cH(aH.ITC_EVENT_TYPES.USER,e);return Vu.user(t),lH(t)}catch(t){fg.error(t)}}o(Yne,"signalUserChange");uH.exports={signalSchemaChange:Kne,signalUserChange:Yne}});function mg(){return qI||(qI=et({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),qI}function zne(e){return e=e.replace(Wne,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function jne(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 VI(e){let t=dH.default.createHash("shake128",{outputLength:4}),r;return(0,fH.isIPv6)(e)?r=zne(e):r=e.toLowerCase(),jne(Uint8Array.from(t.update(r).digest()))}var dH,fH,$I,qI,Wne,KI=fe(()=>{Le();dH=w(require("crypto")),fH=require("node:net"),$I=new Map;o(mg,"getAnalyticsHostnameTable");Wne=/(\d{1,3}\.){3}\d{1,3}$/;o(zne,"normalizeIPv6");o(jne,"nodeHashToNumber");o(VI,"stableNodeId")});var Co,YI=fe(()=>{Co={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 gg={};Ce(gg,{addAnalyticsListener:()=>th,calculateCPUUtilization:()=>CH,diffResourceUsage:()=>PH,recordAction:()=>gt,recordActionBinary:()=>Kr,recordHostname:()=>jI,setAnalyticsEnabled:()=>Qne});function Qne(e){bH=e}function Jne(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 Xne(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},Eg.set(e,a)}function gt(e,t,r,n,s){if(!bH)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Eg.get(i);a?Jne(e,a):Xne(i,e,t,r,n,s),pg||Zne()}function Kr(e,t,r,n,s){gt(!!e,t,r,n,s)}function th(e){wH.push(e)}function Zne(){pg=performance.now(),setTimeout(async()=>{let e=performance.now()-pg;pg=0;let t=[],r={time:Date.now(),period:e,threadId:ml.threadId,metrics:t};for(let[s,i]of Eg){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of OH){let m=Math.floor(c*f),h=a[m-1];if(m>l){let p=m-l;if(h===d){let _=u[u.length-1];typeof _=="number"?u[u.length-1]={value:_,count:1+p}:_.count+=p}else u.push(p>1?{value:h,count:p}:h),d=h;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 LH()}let n=process.memoryUsage();t.push({metric:"memory",threadId:ml.threadId,byThread:!0,...n});for(let s of wH)s(t);Eg=new Map,ml.parentPort?ml.parentPort.postMessage({type:NH,report:r}):vH({report:r})},IH).unref()}async function jI(){let e=ve.hostname;Vr.trace?.("recordHostname server.hostname:",e);let t=VI(e);Vr.trace?.("recordHostname nodeId:",t);let r=mg();if(!await r.get(t)){let s={id:t,hostname:e};Vr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Ku(e,t){let r=ve.hostname,n=$I.get(r);n?Vr.trace?.("storeMetric cached nodeId:",n):(n=VI(r),Vr.trace?.("storeMetric new nodeId:",n),$I.set(r,n));let s={id:[(0,zI.getNextMonotonicTime)(),n],...t};Vr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function CH(e,t){let r=e.userCPUTime+e.systemCPUTime;return Vr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function PH(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 ese(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:Co.TABLE_SIZE,database:t,table:s,size:c};Vr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Ku(e,l),n+=c}return n}function mH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=AH.statSync(s.primaryStore.env.path).size,c=ese(e,r,n),l=a-c,u={metric:Co.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Ku(e,u),Vr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Vr.warn?.("Error getting DB size metrics",s)}}function hH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:Co.STORAGE_VOLUME,database:r,...i};Ku(e,a),Vr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Vr.warn?.("Error getting DB volume metrics",s)}}async function tse(e,t=6e4){let r=QI(),n=DH(),s=new Promise(R=>{let I=performance.now();setImmediate(()=>{let P=performance.now();P-I>5e3&&Vr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(P-I)+"ms"),I=performance.now()}),n.primaryStore.prefetch([1],()=>{let P=performance.now();P-I>5e3&&Vr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(P-I)+"ms"),R(P-I)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:I}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!I)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:P,threadId:Y}=I;for(let te of P||[]){let{path:x,method:$,type:j,metric:V,count:le,total:re,distribution:se,threads:_e,...Ne}=te;le||(le=1);let Fe=V+(x?"-"+x:"");$!==void 0&&(Fe+="-"+$),j!==void 0&&(Fe+="-"+j);let He=c.get(Fe);if(He){if(He.threads){let pt=He.threads[Y];if(pt)He=pt;else{He.threads[Y]={...Ne};continue}}He.count||(He.count=1);let _r=He.count;for(let pt in Ne){let gr=Ne[pt];typeof gr=="number"&&(He[pt]=(He[pt]*_r+gr*le)/(_r+le))}He.count+=le,re>=0&&(He.total+=re,He.ratio=He.total/He.count)}else He={period:t,...te},delete He.distribution,c.set(Fe,He),He.byThread&&(He.threads=[],He.threads[Y]={...Ne},u.push(He));if(se){se=se.map(pt=>typeof pt=="number"?{value:pt,count:1}:pt);let _r=l.get(Fe);_r?_r.push(...se):l.set(Fe,se)}}await LH()}for(let R of u){let{path:I,method:P,type:Y,metric:te,count:x,total:$,distribution:j,threads:V,...le}=R;V=V.filter(re=>re);for(let re in le){if(typeof R[re]!="number")continue;let se=0;for(let _e of V){let Ne=_e[re];typeof Ne=="number"&&(se+=Ne)}R[re]=se}R.count=V.length,delete R.threads,delete R.byThread}for(let[R,I]of l){let P=c.get(R);I.sort((pt,gr)=>pt.value>gr.value?1:-1);let Y=P.count-1,te=[],x=0,$=0,j;for(let pt of OH){let gr=Y*pt;for(;x<gr;)j=I[$++],x+=j.count,$===1&&x--;let wr=I[$>1?$-2:0];j||(j=I[0]),te.push(j.value-(j.value-wr.value)*(x-gr)/j.count)}let[V,le,re,se,_e,Ne,Fe,He,_r]=te;Object.assign(P,{p1:V,p10:le,p25:re,median:se,p75:_e,p90:Ne,p95:Fe,p99:He,p999:_r})}let f;for(let[,R]of c)R.time=d,Ku(n,R),f=!0;let m=Date.now(),{idle:h,active:p}=performance.eventLoopUtilization();if(f||p*10>h){let R={metric:Co.MAIN_THREAD_UTILIZATION,idle:h-pH,active:p-EH,taskQueueLatency:await s,time:m,...process.memoryUsage()};Ku(n,R)}pH=h,EH=p;let _=process.resourceUsage();_.time=m,_.userCPUTime=_.userCPUTime/1e3,_.systemCPUTime=_.systemCPUTime/1e3,Vr.trace?.(`process.resourceUsage: ${JSON.stringify(_)}`);let g=PH(hg,_);Vr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=hg.time?m-hg.time:t,g.cpuUtilization=CH(g,g.period);let y={metric:Co.RESOURCE_USAGE,...g};Ku(n,y),hg=_;let T=it();mH(n,T),mH(n,{system:T.system}),hH(n,T),hH(n,{system:T.system})}async function _H(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function QI(){return gH||(gH=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function DH(){return SH||(SH=et({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function sse(){MH=!0;let e=(0,eh.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await tse(IH,e),await _H(QI(),rse),await _H(DH(),nse)},Math.min(e/2,2147483647)).unref()}function vH(e,t){let r=e.report;r.threadId=t?.threadId||ml.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(TH+=n.mean*n.count);r.totalBytesProcessed=TH,t&&(r.metrics.push({metric:Co.UTILIZATION,...t.performance.eventLoopUtilization(RH.get(t))}),RH.set(t,t.performance.eventLoopUtilization())),r.id=(0,zI.getNextMonotonicTime)(),QI().primaryStore.put(r.id,r),MH||sse(),ise&&(UH=ase(r))}async function ase(e){if(await UH,!Da){let r=(0,Zm.dirname)((0,_g.getLogFilePath)());try{Da=await(0,WI.open)((0,Zm.join)(r,"analytics.log"),"r+")}catch{Da=await(0,WI.open)((0,Zm.join)(r,"analytics.log"),"w+")}}let t=(await Da.stat()).size;if(t>ose){let r=Buffer.alloc(t);await Da.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Da.write(r,{position:0}),await Da.truncate(r.length),t=r.length}await Da.write(JSON.stringify(e)+`
14
- `,t)}var ml,yH,_g,Zm,WI,zI,eh,AH,Vr,Eg,bH,pg,IH,NH,wH,OH,pH,EH,hg,LH,rse,nse,gH,SH,MH,TH,RH,ise,UH,Da,ose,Hi=fe(()=>{ml=require("worker_threads"),yH=w(st());Le();_g=w(z()),Zm=require("path"),WI=require("fs/promises"),zI=w(An()),eh=w(ce());k();Pr();AH=w(require("node:fs"));KI();YI();Vr=(0,_g.forComponent)("analytics").conditional;(0,eh.initSync)();Eg=new Map,bH=(0,eh.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(Qne,"setAnalyticsEnabled");o(Jne,"recordExistingAction");o(Xne,"recordNewAction");o(gt,"recordAction");ve.recordAnalytics=gt;o(Kr,"recordActionBinary");pg=0,IH=1e3,NH="analytics-report",wH=[];o(th,"addAnalyticsListener");OH=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(Zne,"sendAnalytics");o(jI,"recordHostname");o(Ku,"storeMetric");o(CH,"calculateCPUUtilization");o(PH,"diffResourceUsage");o(ese,"storeTableSizeMetrics");o(mH,"storeDBSizeMetrics");o(hH,"storeVolumeMetrics");o(tse,"aggregation");pH=0,EH=0,hg={userCPUTime:0,systemCPUTime:0},LH=o(()=>new Promise(setImmediate),"rest");o(_H,"cleanup");rse=36e5,nse=31536e6;o(QI,"getRawAnalyticsTable");o(DH,"getAnalyticsTable");(0,yH.setChildListenerByType)(NH,vH);o(sse,"startScheduledTasks");TH=0,RH=new Map,ise=!1;o(vH,"recordAnalytics");ose=1e6;o(ase,"logAnalytics")});function rh(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 xH(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Ns(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 Ns,nh=fe(()=>{Ns=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(rh,"appendHeader");o(xH,"mergeHeaders")});var WH={};Ce(WH,{EVICTED:()=>ya,INVALIDATED:()=>wn,coerceType:()=>Tg,makeTable:()=>yg,setServerUtilities:()=>ZI});function yg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:h}=e,{expirationMS:p,evictionMS:_,audit:g,trackDeletes:y}=e;_??=0;let{attributes:T}=e;T||(T=[]);let R=UA(i,n,l),I,P,Y={},te=Promise.resolve(),x,$,j;for(let q of T)(q.assignCreatedTime||q.name==="__createdtime__")&&(x=q),(q.assignUpdatedTime||q.name==="__updatedtime__")&&($=q),q.expiresAt&&(j=q),q.isPrimaryKey&&(Y=q);let V,le=[],re=[],se=1,_e=2,Ne={},Fe={},He=864e5,_r=0,pt,gr,wr,ou=!1,au,Ft,Nf,wf=pl.get(U.REPLICATION_DATABASES);if(Array.isArray(wf)){for(let q of wf)if(q.name===c&&q.replicateTo>=0){Nf=q.replicateTo;break}}let hE=i.getRange({start:!1,end:!1}).constructor,gy=10,pE=6;g&&Ic(),am(i.env.path,q=>{if(P)return ua(q)});class cu extends nl{static{o(this,"Updatable")}getUpdatedTime(){return Ta.get(this.getRecord())?.version}getExpiresAt(){return Ta.get(this.getRecord())?.expiresAt}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.set(E,new Hm(S));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(E,S){return this.addTo(E,-S)}}class Me extends Dr{#e;#r;#t;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=T;static replicate=h;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=x;static updatedTimeProperty=$;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=d;static schemaDefined=u;static sourcedFrom(E,S){if(S&&(this.sourceOptions=S,(S.expiration||S.eviction||S.scanInterval)&&this.setTTLExpiration(S)),S?.intermediateSource)E.intermediateSource=!0,this.sources.unshift(E);else{if(this.sources.some(O=>!O.intermediateSource)){if(this.sources.some(O=>O.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}P=P||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),I=I||E.load;let A=o(O=>{let D=this.sources;if(D=D.filter(F=>F.intermediateSource&&F[O]&&(!F[O].reliesOnPrototype||F.prototype[O])),D.length>0)if(D.length===1){let F=D[0];return(L,H,W)=>{if(L?.source!==F)return F[O](H,W,L)}}else return(F,L,H)=>{let W=[];for(let ee of D){if(F?.source===ee)break;W.push(ee[O](L,H,F))}return Promise.all(W)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1];N.intermediateSource&&(N={});let b=o(O=>{if(N[O]&&(!N[O].reliesOnPrototype||N.prototype[O]))return(D,F,L)=>{if(!D?.source)return N[O](F,L,D)}},"getApplyToCanonicalSource");Ne={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Fe={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish"),invalidate:A("invalidate")};let C=N.shouldRevalidateEvents;return(async()=>{let O=!1,D,F=o(async(L,H)=>{let W=L.value,ee=L.table?Ge[c][L.table]:Me;if(c===vf&&(L.table===uu.ROLE_TABLE_NAME||L.table===uu.USER_TABLE_NAME)&&(O=!0),L.id===void 0&&(L.id=W[ee.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=E;let oe={residencyId:da(L.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:L.nodeId},B=L.id,ue=await ee.getResource(B,H,oe);switch(L.finished&&await L.finished,L.type){case"put":return C?ue._writeInvalidate(B,W,oe):ue._writeUpdate(B,W,!0,oe);case"patch":return C?ue._writeInvalidate(B,W,oe):ue._writeUpdate(B,W,!1,oe);case"delete":return ue._writeDelete(B,oe);case"publish":case"message":return ue._writePublish(B,W,oe);case"invalidate":return ue._writeInvalidate(B,W,oe);case"relocate":return ue._writeRelocate(B,oe);default:xe.default.error?.("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=E.subscribe;L&&y==null&&(y=!0);let H={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},W=E.subscribeOnThisThread?E.subscribeOnThisThread((0,hl.getWorkerIndex)(),H):(0,hl.getWorkerIndex)()===0,ee=L&&W&&await E.subscribe?.(H);if(ee){let oe;for await(let B of ee)try{if(!(B.type==="transaction"?B.writes[0]:B)){xe.default.error?.("Bad subscription event",B);continue}if(B.source=E,B.type==="end_txn"){if(oe?.resolve(),B.localTime&&D!==B.localTime){if(B.remoteNodeIds?.length>0){let ge=[Symbol.for("seq"),B.remoteNodeIds[0]],X=d.get(ge),de=X?.nodes;de||(de=[]);for(let he of B.remoteNodeIds.slice(1)){let Ae=de.find(Oe=>Oe.id===he);de=de.filter(Oe=>Oe.id!==he||Oe===Ae),Ae||(Ae={id:he,seqId:0},de.push(Ae)),Ae.seqId=Math.max(X?.seqId??1,B.localTime),he===oe?.nodeId&&(Ae.lastTxnTime=B.timestamp)}let ne=Math.max(X?.seqId??1,B.localTime);xe.default.trace?.("Received txn",c,new Date(ne),new Date(B.localTime),B.remoteNodeIds),d.put(ge,{seqId:ne,nodes:de})}D=B.localTime}B.onCommit&&oe?.committed.then(B.onCommit);continue}if(oe)if(B.beginTxn)oe.resolve();else{oe.write_promises.push(F(B,oe));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let ae=vt(B,()=>{if(B.type==="transaction"){let ge=[];for(let X of B.writes)try{ge.push(F(X,B))}catch(de){throw de.message+=" writing "+JSON.stringify(X)+" of event "+JSON.stringify(B),de}return Promise.all(ge)}else if(B.type==="define_schema"){let ge=this.attributes.slice(0),X=!1;for(let de of B.attributes)ge.find(ne=>ne.name===de.name)||(ge.push(de),X=!0);X&&(et({table:s,database:c,attributes:ge,origin:"cluster"}),ih.signalSchemaChange(new oh.SchemaEventMsg(process.pid,G.CREATE_TABLE,c,s)))}else return B.beginTxn?(oe=B,oe.write_promises=[F(B,B)],new Promise(ge=>{oe.resolve=()=>ge(Promise.all(oe.write_promises))})):F(B,B)});oe&&(oe.committed=ae),O&&ae&&!ae?.waitingForUserChange&&(ae.then(()=>ih.signalUserChange(new oh.UserEventMsg(process.pid))),ae.waitingForUserChange=!0),B.onCommit&&(ae?ae.then(B.onCommit):B.onCommit())}catch(ue){xe.default.error?.("error in subscription handler",ue)}}}catch(L){xe.default.error?.(L)}})(),this}static get isCaching(){return P}static get shouldRevalidateEvents(){return this.prototype.get!==Me.prototype.get}static getResource(E,S,A){let N=super.getResource(E,S,A);if(E!=null&&this.loadAsInstance!==!1){Or(E);try{if(N.getRecord?.())return N;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let b=!A?.async||i.cache?.get?.(E),C=Cr(S),O=C.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Sc(E,S,{transaction:O,ensureLoaded:A?.ensureLoaded},b,D=>{if(D?Me._updateResource(N,D):N.#e=null,S.onlyIfCached){if(!N.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(A?.ensureLoaded){let F=Rc(E,D,S,N);if(F)return C?.disregardReadTxn(),N.#i=!0,S.loadedFromSource=!0,oi(F,L=>(Me._updateResource(N,L),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(E)),b}}return N}static _updateResource(E,S){E.#n=S,E.#e=S?.value??null,E.#t=S?.version}ensureLoaded(){let E=Rc(this.getId(),this.#n,this.getContext());if(E)return this.#i=!0,this.getContext().loadedFromSource=!0,oi(E,S=>{this.#n=S,this.#e=S.value,this.#t=S.version})}static getNewId(){let E=Y?.type;if(E==="String"||E==="ID")return super.getNewId();if(!Ft){let b=i.getEntry(Symbol.for("id_allocation")),C=b?.value,O;if(C&&C.nodeName===server.hostname&&(!gse(i)||C.pid===process.pid)){let D=C.start,F=C.end;O=D;for(let L of i.getKeys({start:F,end:D,limit:1,reverse:!0}))O=L}else C=N(b?.version??null),O=C.start;Ft=new BigInt64Array([BigInt(O)+1n]),Ft=new BigInt64Array(i.getUserSharedBuffer("id",Ft.buffer)),Ft.maxSafeId=C.end}let S=Number(Atomics.add(Ft,0,1n)),A=E==="Int"?512:1048576;if(S+A>=Ft.maxSafeId){let b=o(C=>{Ft.maxSafeId=S+(E==="Int"?1023:4194303);let O=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=C?void 0:i.useReadTransaction(),F=Number(Ft[0]);for(let W of i.getKeys({start:F+1,end:O,limit:1,transaction:D}))O=W;D?.done();let{value:L,version:H}=i.getEntry(Symbol.for("id_allocation"));if(Ft.maxSafeId<O){if(L.end>Ft.maxSafeId-100)return;xe.default.info?.("New id allocation",S,Ft.maxSafeId,H),i.put(Symbol.for("id_allocation"),{start:L.start,end:Ft.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),H)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ft.maxSafeId}, but id of ${O} detected`);let W=N(H);W.alreadyUpdated||Atomics.store(Ft,0,BigInt(W.start+1)),Ft.maxSafeId=W.end}},"updateEnd");S+A===Ft.maxSafeId?setImmediate(b):S+100>=Ft.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${E=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return S;function N(b){let C=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,O=C/4,D,F,L=!1,H,W;do{H=Math.floor(Math.random()*C),W={start:H,end:H+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let ee of i.getKeys({start:H,limit:1,reverse:!0}))D=ee;F=C;for(let ee of i.getKeys({start:H+1,end:C,limit:1}))F=ee;O*=.875,O<1e3&&!L&&(L=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${E==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,H,D,F,O))}while(!(O<F-H&&(O<H-D||D===0)));return i.transactionSync(()=>{let ee=i.getEntry(Symbol.for("id_allocation"));return(ee?.version??null)==b?(xe.default.info?.("Allocated new id range",W),i.put(Symbol.for("id_allocation"),W,Date.now()),W):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...ee.value})})}}static setTTLExpiration(E){if(typeof E=="number")p=E*1e3,_||(_=0);else if(E&&typeof E=="object")p=E.expiration*1e3,_=(E.eviction||0)*1e3,He=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");He=He||(p+_)/4,ua()}static getResidencyRecord(E){return d.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Me.getResidency=E&&((S,A)=>{try{return E(S,A)}catch(N){throw N.message+=` in residency function for table ${s}`,N}})}static setResidencyById(E){Me.getResidencyById=E&&(S=>{try{return E(S)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static getResidency(E,S){if(Me.getResidencyById)return Me.getResidencyById(E[t]);let A=Nf;if(S.replicateTo!=null){if(Array.isArray(S.replicateTo))return S.replicateTo.includes(server.hostname)?S.replicateTo:[server.hostname,...S.replicateTo];S.replicateTo>=0&&(A=S.replicateTo)}if(A>=0&&server.nodes){let N=[server.hostname];if(S.previousResidency)N.push(...S.previousResidency.slice(0,A));else{let b=server.nodes.map(D=>D.name),C=Math.floor(b.length*Math.random());N.push(...b.slice(C,C+A));let O=C+A-b.length;O>0&&N.push(...b.slice(0,O))}return N}}static enableAuditing(E=!0){g=E,E&&Ic(),Me.audit=E}static coerceId(E){return E===""?null:Tg(E,Y)}static async dropTable(){delete Ge[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&Nn&&E.value&&ga(E.value);if(c===a){for(let E of T)d.remove(Me.tableName+"/"+E.name),r[E.name]?.drop();d.remove(Me.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),XI.default.unlinkSync(i.env.path);ih.signalSchemaChange(new oh.SchemaEventMsg(process.pid,G.DROP_TABLE,c,s))}get(E){let S=this.constructor;if(typeof E=="string"&&S.loadAsInstance!==!1)return this.getProperty(E);if(Cf(E))return this.search(E);if(E&&E.id===void 0&&!E.toString()){let A={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:T,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Me.getRecordCount().then(N=>(A.recordCount=N.recordCount,A.estimatedRecordRange=N.estimatedRange,A)):A}if(E!==void 0&&S.loadAsInstance===!1){let A=this.getContext(),N=Cr(A),b=N.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let C=Sr(E);Or(C);let O=!0;return E.checkPermission&&(O=this.allowRead(A.user,E)),oi(O,D=>{if(!D)throw new lt.AccessViolation(A.user);let F=!0;return Sc(C,A,{transaction:b,ensureLoaded:F},!1,L=>{if(A.onlyIfCached){if(!L?.value)throw new lt.ServerError("Entry is not cached",504)}else if(F){let H=Rc(C,L,A);if(H)return N?.disregardReadTxn(),A.loadedFromSource=!0,H.then(W=>W?.value)}return L?.value})})}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,S){let A=Tc(E,S);if(A?.read){if(A.isSuperUser)return!0;let N=A.attribute_permissions,b=S?.select;if(N?.length>0||ou&&b){if(S||(S={}),b){let C=N?.length>0&&JI(N,"read");S.select=b.map(O=>{let D=O.name||O;if(!C||C[D]){let F=wr[D]?.definition?.tableClass;if(F){if(O.name||(O={name:O}),!O.checkPermission&&S.checkPermission&&(O.checkPermission=S.checkPermission),!F.prototype.allowRead.call(null,E,O))return!1;if(!O.select)return O.name}return O}}).filter(Boolean)}else S.select=N.filter(C=>C.read&&!wr[C.attribute_name]).map(C=>C.attribute_name);return S}else return!0}}allowUpdate(E,S,A){let N=Tc(E,A);if(N?.update){let b=N.attribute_permissions;if(b?.length>0){let C=JI(b,"update");for(let O in S)if(!C[O])return!1;for(let O of b){let D=O.attribute_name;!O.update&&!(D in S)&&(S[D]=this.getProperty(D))}}return bc(this.getContext())}}allowCreate(E,S,A){if(this.isCollection){let N=Tc(E,A);if(N?.insert){let b=N.attribute_permissions;if(b?.length>0){let C=JI(b,"insert");for(let O in S)if(!C[O])return!1;return bc(this.getContext())}else return bc(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E,S){return Tc(E,S)?.delete&&bc(this.getContext())}update(E,S){let A,N=typeof S=="boolean"||S===void 0&&(E==null||typeof E=="object"&&!(E instanceof URLSearchParams)),b=!1;N?(b=S,S=E,A=this.getId()):A=Sr(E);let C=this.getContext();if(!Cr(C))throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;if(typeof S=="object"&&S)if(b)Object.isFrozen(S)&&(S={...S}),this.#e={},this.#r=S;else if(N){let D=this.#r;D&&(S=Object.assign(D,S)),this.#r=S}else{let D=!0;if(E==null)throw new TypeError("Can not put a record without a target");return E.checkPermission&&(D=this.allowUpdate(C.user,S,E)),oi(D,F=>{if(!F)throw new lt.AccessViolation(C.user);return oi(i.get(Sr(E)),L=>{let H=new cu(L);return H._setChanges(S),this._writeUpdate(A,H.getChanges(),!1),H})})}return this._writeUpdate(A,this.#r,b),this}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.#s===FH?this.set(E,(+this.getProperty(E)||0)+S):(this.#s||this.update(),this.set(E,new Hm(S)));else throw new Error("Can not add a non-numeric value")}subtractFrom(E,S){if(typeof S=="number")return this.addTo(E,-S);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#r}_setChanges(E){this.#r=E}setRecord(E){this.#e=E}invalidate(E){let S=!0,A=this.getContext();return E?.checkPermission&&(S=this.allowDelete(A.user,E,A)),oi(S,N=>{if(!N)throw new lt.AccessViolation(A.user);this._writeInvalidate(E?Sr(E):this.getId())})}_writeInvalidate(E,S,A){let N=this.getContext();Or(E),Cr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Ne.invalidate?.bind(this,N,E),beforeIntermediate:Fe.invalidate?.bind(this,N,E),commit:o((C,O)=>{if(!(Ac(C,O,A?.nodeId)<=0)){S??=null;for(let D in r)S||(S={}),S[D]===void 0&&(S[D]=this.getProperty(D));xe.default.trace?.(`Invalidating entry in ${s} id: ${E}, timestamp: ${new Date(C).toISOString()}`),R(E,S,O,C,wn,g,{user:N?.user,residencyId:A?.residencyId,nodeId:A?.nodeId},"invalidate")}},"commit")})}_writeRelocate(E,S){let A=this.getContext();Or(E),Cr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Ne.relocate?.bind(this,A,E),beforeIntermediate:Fe.relocate?.bind(this,A,E),commit:o((b,C)=>{if(Ac(b,C,S?.nodeId)<=0)return;let O=Me.getResidencyRecord(S.residencyId),D=0,F=null,L=C?.value;if(O&&!O.includes(server.hostname)){for(let H in r)F||(F={}),F[H]=L(H);D=wn}else F=L;xe.default.trace?.(`Relocating entry id: ${E}, timestamp: ${new Date(b).toISOString()}`),R(E,F,C,b,D,g,{user:A.user,residencyId:S.residencyId,nodeId:S.nodeId,expiresAt:S.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,S){let A={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},N=Nc(this.getResidency(S.value,A)),b;if(N){if(!N.includes(server.hostname))return!1;b=da(N)}let O=R(E.key,S.value,E,E.version,0,!0,{residencyId:b,expiresAt:S.expiresAt},"relocate",!1,null);return!0}static evict(E,S,A){let N=this.Source,b;if(!((P||g)&&(!S||(b=i.getEntry(E),!b||!S)||b.version!==A))){if(P){if(i.hasLock(E,b.version))return;let C;for(let O in r)C||(C={}),C[O]=S[O];if(C)return R(E,C,b,A,ya,null,null,null,!0)}if(i.ifVersion(E,A,()=>{oo(E,S,null)}),g)return R(E,null,b,A,ya,null,null,null,!0);Wc(i,b??i.getEntry(E),A)}}lock(){throw new Error("Not yet implemented")}static operation(E,S){return E.table||=s,E.schema||=c,YH.operation(E,S)}put(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!0);else{let A=!0;if(E==null)throw new TypeError("Can not put a record without a target");let N=this.getContext();return E.checkPermission&&(A=this.allowUpdate(N.user,S,E)),oi(A,b=>{if(!b)throw new lt.AccessViolation(N.user);if(Array.isArray(S))for(let C of S){let O=C[t];this._writeUpdate(O,C,!0)}else{let C=Sr(E);this._writeUpdate(C,S,!0)}})}}create(E,S){let A=!0,N=this.getContext();if(!S&&!(E instanceof URLSearchParams)&&(S=E,E=void 0),!S||typeof S!="object"||Array.isArray(S))throw new TypeError("Can not create a record without an object");return E?.checkPermission&&(A=this.allowCreate(N.user,S,E)),oi(A,b=>{if(!b)throw new lt.AccessViolation(N.user);let C=Sr(E)??S[t];if(C===void 0)C=this.constructor.getNewId();else if(i.get(C))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(C,S,!0),S})}patch(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!1);else{let A=this.update(E,S);if(A?.then)return A.then(()=>{})}}_writeUpdate(E,S,A,N){let b=this.getContext(),C=Cr(b);Or(E);let O=this.#n??i.getEntry(E);this.#s=A?FH:hse;let D={key:E,store:i,entry:O,nodeName:b?.nodeName,validate:o(F=>{S||(S=this.#r),A||S&&Y_(this.#r===S?this:S)?b?.source||(C.checkOverloaded(),this.validate(S,!A),$&&(S[$.name]=$.type==="Date"?new Date(F):$.type==="String"?new Date(F).toISOString():F),A&&(t&&S[t]!==E&&(S[t]=E),x&&(O?.value?S[x.name]=O?.value[x.name]:S[x.name]=x.type==="Date"?new Date(F):x.type==="String"?new Date(F).toISOString():F),S=Oa(S))):C.removeWrite(D)},"validate"),before:A?Ne.put?()=>Ne.put(b,E,S):null:Ne.patch?()=>Ne.patch(b,E,S):Ne.put?()=>Ne.put(b,E,Oa(this)):null,beforeIntermediate:A?Fe.put?()=>Fe.put(b,E,S):null:Fe.patch?()=>Fe.patch(b,E,S):Fe.put?()=>Fe.put(b,E,Oa(this)):null,commit:o((F,L,H)=>{if(H){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");A||(this.#e=L?.value??null)}this.#r=void 0,this.#t=F;let W=L?.value,ee=S;this.#s=0;let oe=!1,B=Ac(F,L,N?.nodeId),ue;if(B<=0){if(g){let ne=L.localTime,he=L.version;xe.default.trace?.("Applying CRDT update to record with id: ",E,"txn time",new Date(F),"applying later update from:",new Date(he),"local recorded time",new Date(ne));let Ae=[];for(;ne>F||he>=F&&ne>0;){let Oe=l.get(ne);if(!Oe)break;let ze=Ut(Oe);if(he=ze.version,he>=F){if(he===F){if(B=Ac(F,{version:he,localTime:ne},N?.nodeId),B===0)return;if(B>0)continue}if(ze.type==="patch")Ae.push(ze),ue=S;else if(ze.type==="put"||ze.type==="delete")return}ne=ze.previousLocalTime}if(!ne){xe.default.debug?.("No further audit history, must drop update",E,"existing version preserved",L);return}Ae.sort((Oe,ze)=>Oe.version-ze.version);for(let Oe of Ae){let ze=Oe.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(Oe.version),ze,Oe),ee=GE(ee,ze,A),!ee)return}}else{if(A)return;ee=GE(ee,W,A),xe.default.debug?.("Rebuilding update without audit:",ee)}xe.default.trace?.("Rebuilt record to save:",ee," is full update:",A)}let ae;if(A?ae=ee:this.constructor.loadAsInstance===!1?ae=Oa(W,ee):(this.#e=W,ae=Oa(this,ee)),this.#e=ae,ae&&ae.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ge;if(N?.residencyId!=null)ge=N.residencyId;else{O?.residencyId&&(b.previousResidency=Me.getResidencyRecord(O.residencyId));let ne=Nc(Me.getResidency(ae,b));if(ne&&!ne.includes(server.hostname))if(ue??=ae,oe=!0,Me.getResidencyById)ae=void 0;else{ae=null;for(let he in r)ae||(ae={}),ae[he]=ue[he]}ge=da(ne)}A||(ue=S);let X=b?.expiresAt??(p?p+Date.now():-1);xe.default.trace?.(`Saving record with id: ${E}, timestamp: ${new Date(F).toISOString()}${X?", expires at: "+new Date(X).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ae).slice(0,100)}catch{return""}})()),oo(E,W,ae);let de=A?"put":"patch";R(E,ae,L,F,oe?wn:0,g,{omitLocalRecord:oe,user:b?.user,residencyId:ge,expiresAt:X,nodeId:N?.nodeId,originatingOperation:b?.originatingOperation},de,!1,ue),b.expiresAt&&ua()},"commit")};C.addWrite(D)}async delete(E){if(Cf(E)){E.select=["$id"];for await(let S of this.search(E))this._writeDelete(S.$id);return!0}if(E){let S=!0,A=this.getContext();return E.checkPermission&&(S=this.allowDelete(A.user,E,A)),oi(S,N=>{if(!N)throw new lt.AccessViolation(A.user);let b=Sr(E);return this._writeDelete(b),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(E,S){let A=Cr(this.getContext());Or(E);let N=this.getContext();return A.addWrite({key:E,store:i,entry:this.#n,nodeName:N?.nodeName,before:Ne.delete?.bind(this,N,E),beforeIntermediate:Fe.delete?.bind(this,N,E),commit:o((b,C,O)=>{let D=C?.value;O&&(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),Me._updateResource(this,C)),!(Ac(b,C,S?.nodeId)<=0)&&(oo(this.getId(),D),xe.default.trace?.(`Deleting record with id: ${E}, txn timestamp: ${new Date(b).toISOString()}`),g||y?(R(E,null,C,b,0,g,{user:N?.user,nodeId:S?.nodeId},"delete"),g||ua()):Wc(i,C))},"commit")}),!0}search(E){let S=this.getContext(),A=Cr(S);if(!E)throw new Error("No query provided");if(E.parseError)throw E.parseError;if(E.checkPermission&&!this.allowRead(S.user,E))throw new lt.AccessViolation(S.user);let N=E.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[];let b=E.id??this.getId();b&&(N=[{attribute:null,comparator:Array.isArray(b)?"prefix":"starts_with",value:b}].concat(N));let C,O={};function D(ne,he){let Ae;switch(he){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');Ae=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+he)}for(let Oe of ne){if(Oe.conditions){Oe.conditions=D(Oe.conditions,Oe.operator);continue}let ze=Oe[0]??Oe.attribute,kr=ze==null?Y:Ci(T,ze);if(kr)(kr.type||BA[Oe.comparator])&&(Oe[1]===void 0?Oe.value=L(Oe.value,kr):Oe[1]=L(Oe[1],kr));else if(ze!=null)throw(0,lt.handleHDBError)(new Error,`${ze} is not a defined attribute`,404);if(Oe.chainedConditions)if(Oe.chainedConditions.length===1&&(!Oe.operator||Oe.operator=="and")){let ye=Oe.chainedConditions[0],We,Xe;if(ye.comparator==="gt"||ye.comparator==="greater_than"||ye.comparator==="ge"||ye.comparator==="greater_than_equal"?(We=Oe,Xe=ye):(We=ye,Xe=Oe),We.comparator!=="lt"&&We.comparator!=="less_than"&&We.comparator!=="le"&&We.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let jt=Xe.comparator==="ge"||Xe.comparator==="greater_than_equal",Dt=We.comparator==="le"||We.comparator==="less_than_equal";Oe.comparator=(jt?"ge":"gt")+(Dt?"le":"lt"),Oe.value=[Xe.value,We.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(D,"prepareConditions");function F(ne,he){if(E.enforceExecutionOrder)return ne;for(let Ae of ne)Ae.conditions&&(Ae.conditions=F(Ae.conditions,Ae.operator));return ne.length>1&&he!=="or"?cse(ne,S_(Me)):ne}o(F,"orderConditions");function L(ne,he){return Array.isArray(ne)?ne.map(Ae=>Tg(Ae,he)):Tg(ne,he)}o(L,"coerceTypedValues");let H=E.operator;(N.length>0||H)&&(N=D(N,H));let W=typeof E.sort=="object"&&E.sort,ee;if(W&&H!=="or"){let ne=W.attribute;if(ne==null)throw new lt.ClientError("Sort requires an attribute");if(C=N.find(he=>Nu(he.attribute)===Nu(ne)),!C){let he=Ci(T,ne);if(!he)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(he.indexed)C={...W,comparator:"sort"},N.push(C);else if(N.length===0&&!E.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}C&&(C.descending=!!W.descending)}N=F(N,H),W&&(C&&N[0]===C?W.next&&(ee={dbOrderedAttribute:W.attribute,attribute:W.next.attribute,descending:W.next.descending,next:W.next.next}):(C&&N.splice(N.indexOf(C),1),ee=W));let oe=E.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:N,operator:H,postOrdering:ee,selectApplied:!!oe};let B=A.useReadTxn(),ue=FA(N,H,Me,B,E,S,(ne,he)=>Pf(ne,oe,S,B,he),O),ae=E.ensureLoaded!==!1;ee||(ue=de(ue));let ge=Me.transformEntryForSelect(oe,S,B,O,ae,!0),X=Me.transformToOrderedSelect(ue,oe,ee,S,B,ge);function de(ne){return E.offset||E.limit!==void 0?ne.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0):ne}return o(de,"applyOffset"),ee&&(X=de(X)),X.onDone=()=>{X.onDone=null,A.doneReadTxn()},X.selectApplied=!0,X.getColumns=()=>{if(oe){let ne=[];for(let he of oe)he==="*"?ne.push(...T.map(Ae=>Ae.name)):ne.push(he.name||he);return ne}return T.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},X}static transformToOrderedSelect(E,S,A,N,b,C){let O=new hE;if(A){E=Pf(E,S,N,b,null);let D;O.iterate=function(){let L,H=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),W,ee=A.dbOrderedAttribute,oe,B,ue=!0;function ae(X){let de=X.next&&ae(X.next),ne=X.descending;return N.sort=X,(he,Ae)=>{let Oe=yc(he,X.attribute,N),ze=yc(Ae,X.attribute,N),kr=ne?(0,El.compareKeys)(ze,Oe):(0,El.compareKeys)(Oe,ze);return kr===0?de?.(he,Ae)||0:kr}}o(ae,"createComparator");let ge=ae(A);return{async next(){let X;if(L)if(X=L.next(),X.done){if(W)return O.onDone&&O.onDone(),X}else return{value:await C.call(this,X.value)};D=[],oe&&D.push(oe);do if(X=await H.next(),X.done){if(W=!0,D.length)break;return O.onDone&&O.onDone(),X}else{let de=X.value;if(de?.then&&(de=await de),ee){let ne=yc(de,ee,N);if(ue)ue=!1,B=ne;else if(ne!==B){B=ne,oe=de;break}}D.push(de)}while(!0);return A.isGrouped,D.sort(ge),L=D[Symbol.iterator](),X=L.next(),X.done?(O.onDone&&O.onDone(),X):{value:await C.call(this,X.value)}},return(){O.onDone&&O.onDone(),H.return()},throw(){O.onDone&&O.onDone(),H.throw()}}};let F=o(L=>{if(typeof S=="object"&&Array.isArray(L.attribute))for(let H=0;H<S.length;H++){let W=S[H],ee;if(W.name===L.attribute[0]){for(ee=W.sort||(W.sort={});ee.next;)ee=ee.next;ee.attribute=L.attribute.slice(1),ee.descending=L.descending}else W===L.attribute[0]&&(S[H]=ee={name:W,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&F(L.next)},"applySortingOnSelect");F(A)}else O.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),O=O.map(function(D){try{let F=C.call(this,D);return typeof F?.catch=="function"?F.catch(L=>{throw L.partialObject={[t]:D.key},L}):F}catch(F){throw F.partialObject={[t]:D.key},F}});return O}static transformEntryForSelect(E,S,A,N,b,C){let O;b&&P&&!(typeof E=="string"?[E]:E)?.every(L=>{let H;return typeof L=="object"?H=L.name:H=L,r[H]||H===t})&&(O=!0);let D,F=o(function(L){let H;if(S?.transaction?.stale&&(S.transaction.stale=!1),L!=null){if(H=L.deref?L.deref():L.value,!H&&(L.key===void 0||L.deref)||L.metadataFlags&wn){if(L.metadataFlags&wn&&S.replicateFrom===!1&&C&&L.residencyId)return va.SKIP;if(L=Sc(L.key??L,S,{transaction:A,lazy:E?.length<4,ensureLoaded:b},this?.isSync,W=>W),L?.then)return L.then(F.bind(this));H=L?.value}if(O&&L?.metadataFlags&(wn|ya)||L?.expiresAt!=null&&L?.expiresAt<Date.now()){if(S.onlyIfCached)return{[t]:L.key,message:"This entry has expired"};let W=Rc(L.key??L,L,S);if(W?.then)return W.then(F)}}if(H==null)return C?va.SKIP:H;if(E&&!(E[0]==="*"&&E.length===1)){let W,ee=o((B,ue)=>{let ae;typeof B=="object"?ae=B.name:ae=B;let ge=wr?.[ae],X;if(ge){let de=N?.[ae];if(de)if(de.hasMappings){let he=ge.from?H[ge.from]:Nu(L.key);X=de.get(he),X||(X=[])}else X=de.fromRecord?.(H);else X=ge(H,S,L,!0);let ne=o(he=>{if(ge.directReturn)return ue(he,ae);if(he&&typeof he=="object"){let Ae=ge.definition?.tableClass||Me;D||(D={});let Oe=D[ae]||(D[ae]=Ae.transformEntryForSelect(ae===B?null:B.select||(Array.isArray(B)?B:null),S,A,de,b));if(Array.isArray(he)){let ze=[],kr=Ae.transformToOrderedSelect(he,B.select,typeof B.sort=="object"&&B.sort,S,A,Oe)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),ye=o(Xe=>{for(;!Xe.done;){if(Xe?.then)return Xe.then(ye);ze.push(Xe.value),Xe=kr.next()}ue(ze,ae)},"nextValue"),We=ye(kr.next());We&&(W||(W=[]),W.push(We));return}else if(he=Oe.call(this,he),he?.then){W||(W=[]),W.push(he.then(ze=>ue(ze,ae)));return}}ue(he,ae)},"handleResolvedValue");X?.then?(W||(W=[]),W.push(X.then(ne))):ne(X);return}else X=H[ae],X&&typeof X=="object"&&ae!==B&&(X=Me.transformEntryForSelect(B.select||B,S,A,null)({value:X}));ue(X,ae)},"selectAttribute"),oe;if(typeof E=="string")ee(E,B=>{oe=B});else if(Array.isArray(E))if(E.asArray)oe=[],E.forEach((B,ue)=>{B==="*"?E[ue]=H:ee(B,ae=>oe[ue]=ae)});else{oe={};let B=E.forceNulls;for(let ue of E)if(ue==="*")for(let ae in H)oe[ae]=H[ae];else ee(ue,(ae,ge)=>{ae===void 0&&B&&(ae=null),oe[ge]=ae})}else throw new lt.ClientError("Invalid select"+E);return W?Promise.all(W).then(()=>oe):oe}return H},"transform");return F}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||et({table:s,database:c,schemaDefined:u,attributes:T,audit:!0}),E||(E={});let S=!E.rawEvents,A=[],N=this,b=VA(Me,this.getId()??null,function(O,D,F,L){try{let H=D.getValue?.(i,S),W=D.type;if(!H&&W==="patch"&&S){let oe=i.getEntry(O);oe?.version===D.version?H=oe.value:H=D.getValue?.(i,!0,F),W="put"}let ee={id:O,localTime:F,value:H,version:D.version,type:W,beginTxn:L};A?A.push(ee):this.send(ee)}catch(H){xe.default.error?.(H)}},E.startTime||0,E),C=(async()=>{this.isCollection&&(b.includeDescendants=!0,E.onlyChildren&&(b.onlyChildren=!0)),E.supportsTransactions&&(b.supportsTransactions=!0);let O=this.getId(),D=E.previousCount;D>1e3&&(D=1e3);let F=E.startTime;if(this.isCollection){if(F){if(D)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:L,value:H}of l.getRange({start:F,exclusiveStart:!0,snapshot:!1})){let W=Ut(H);if(W.tableId!==n)continue;let ee=W.recordId;if(O==null||qH(O,ee)){let oe=W.getValue(i,S,L);if(b.send({id:ee,localTime:L,value:oe,version:W.version,type:W.type}),b.queue?.length>kH&&await b.waitForDrain()===!1)return}b.startTime=L}}else if(D){let L=[];for(let{key:H,value:W}of l.getRange({start:"z",end:!1,reverse:!0}))try{let ee=Ut(W);if(ee.tableId!==n)continue;let oe=ee.recordId;if(O==null||qH(O,oe)){let B=ee.getValue(i,S,H);if(L.push({id:oe,localTime:H,value:B,version:ee.version,type:ee.type}),--D<=0)break}}catch(ee){xe.default.error("Error getting history entry",H,ee)}for(let H=L.length;H>0;)b.send(L[--H]);L[0]&&(b.startTime=L[0].localTime)}else if(!E.omitCurrent){for(let{key:L,value:H,version:W,localTime:ee}of i.getRange({start:O??!1,end:O==null?void 0:[O,El.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(H&&(b.send({id:L,localTime:ee,value:H,version:W,type:"put"}),b.queue?.length>kH&&await b.waitForDrain()===!1))return}}else{D&&!F&&(F=0);let L=this.#n?.localTime;if(L===vA&&(i.cache?.delete(O),this.#n=i.getEntry(O),xe.default.trace?.("re-retrieved record",L,this.#n?.localTime),L=this.#n?.localTime),xe.default.trace?.("Subscription from",F,"from",O,L),F<L){let H=[],W=L;do{let ee=l.get(W);if(ee){E.omitCurrent=!0;let oe=Ut(ee),B=oe.getValue(i,S,W);S&&(oe.type="put"),H.push({id:O,value:B,localTime:W,...oe}),W=oe.previousLocalTime}else break;D&&D--}while(W>F&&D!==0);for(let ee=H.length;ee>0;)b.send(H[--ee]);b.startTime=L}!E.omitCurrent&&this.doesExist()&&b.send({id:O,localTime:L,value:this.#e,version:this.#t,type:"put"})}for(let L of A)b.send(L);A=null})();return E.listener&&b.on("data",E.listener),b}static subscribeOnThisThread(E,S){return E===0||S?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(E,S,A){if(S===void 0||S instanceof URLSearchParams)this._writePublish(this.getId(),E,S);else{let N=!0,b=this.getContext();return E.checkPermission&&(N=this.allowCreate(b.user,E,b)),oi(N,C=>{if(!C)throw new lt.AccessViolation(b.user);let O=Sr(E);this._writePublish(O,S,A)})}}_writePublish(E,S,A){let N=Cr(this.getContext());E??=null,E!==null&&Or(E);let b=this.getContext();N.addWrite({key:E,store:i,entry:this.#n,nodeName:b?.nodeName,validate:o(()=>{b?.source||(N.checkOverloaded(),this.validate(S))},"validate"),before:Ne.publish?.bind(this,b,E,S),beforeIntermediate:Fe.publish?.bind(this,b,E,S),commit:o((C,O,D)=>{O===void 0&&y&&!g&&ua(),xe.default.trace?.(`Publishing message to id: ${E}, timestamp: ${new Date(C).toISOString()}`),R(E,O?.value??null,O,O?.version||C,0,!0,{user:b?.user,residencyId:A?.residencyId,expiresAt:b?.expiresAt,nodeId:A?.nodeId},"message",!1,S)},"commit")})}validate(E,S){let A,N=o((b,C,O)=>{if(C.type&&b!=null)if(S&&b.__op__&&(b=b.value),C.properties){typeof b!="object"&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be an object${C.type?" ("+C.type+")":""}`);let D=C.properties;for(let F=0,L=D.length;F<L;F++){let H=D[F];if(H.relationship||H.computed){E.hasOwnProperty(H.name)&&(A||(A=[])).push(`Computed property ${O}.${H.name} may not be directly assigned a value`);continue}let W=N(b[H.name],H,O+"."+H.name);W&&(b[H.name]=W)}if(C.sealed&&b!=null&&typeof b=="object")for(let F in b)D.find(L=>L.name===F)||(A||(A=[])).push(`Property ${F} is not allowed within object in property ${O}`)}else switch(C.type){case"Int":(typeof b!="number"||b>>0!==b)&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(D=>typeof D=="string")||(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a string`);break;case"Boolean":typeof b!="boolean"&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof Ss)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(C.elements)for(let D=0,F=b.length;D<F;D++){let L=b[D],H=N(L,C.elements,O+"[*]");H&&(b[D]=H)}}else(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be an Array`);break}C.nullable===!1&&b==null&&(A||(A=[])).push(`Property ${O} is required (and not does not allow null values)`)},"validateValue");for(let b=0,C=T.length;b<C;b++){let O=T[b];if(O.relationship||O.computed){Object.hasOwn(E,O.name)&&(A||(A=[])).push(`Computed property ${O.name} may not be directly assigned a value`);continue}if(!S||O.name in E){let D=N(E[O.name],O,O.name);D!==void 0&&(E[O.name]=D)}}if(f)for(let b in E)T.find(C=>C.name===b)||(A||(A=[])).push(`Property ${b} is not allowed`);if(A)throw new lt.ClientError(A.join(". "))}getUpdatedTime(){return this.#t}wasLoadedFromSource(){return P?!!this.#i:void 0}static async addAttributes(E){let S=T.slice(0);for(let A of E){if(!A.name)throw new lt.ClientError("Attribute name is required");if(A.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");lse(A.name),S.push(A)}return et({table:s,database:c,schemaDefined:u,attributes:S}),Me.indexingOperation}static async removeAttributes(E){let S=T.filter(A=>!E.includes(A.name));return et({table:s,database:c,schemaDefined:u,attributes:S}),Me.indexingOperation}static getSize(){let E=i.getStats();return(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getAuditSize(){let E=l?.getStats();return E&&(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getStorageStats(){let E=i.env.path,S=XI.default.statfsSync?.(E)??{};return{available:S.bavail*S.bsize,free:S.bfree*S.bsize,size:S.blocks*S.bsize}}static async getRecordCount(E){let S=i.getStats().entryCount,A=1e3/2,N=performance.now(),b=Math.floor(S/2),C=E?.exactCount,O=0,D=0,F;for(let{value:L}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(L!=null&&O++,D++,await Ma(),!C&&D<b&&performance.now()-N>A){F=D;break}if(F){let L=O;O=0;for(let{value:X}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F,snapshot:!1}))X!=null&&O++,await Ma();let H=F*2,W=(O+L)/H,ee=Math.pow((O-L+1)/F/2,2)+W*(1-W)/H,oe=Math.max(Math.sqrt(ee)*S,1),B=Math.round(W*S),ue=Math.max(B-1.96*oe,O+L),ae=Math.min(B+1.96*oe,S),ge=Math.pow(10,Math.round(Math.log10(oe)));return ge>B&&(ge=ge/10),O=Math.round(B/ge)*ge,{recordCount:O,estimatedRange:[Math.round(ue),Math.round(ae)]}}return{recordCount:O}}static updatedAttributes(){wr=this.propertyResolvers={$id:o((E,S,A)=>({value:A.key}),"$id"),$updatedtime:o((E,S,A)=>A.version,"$updatedtime"),$updatedTime:o((E,S,A)=>A.version,"$updatedTime"),$expiresAt:o((E,S,A)=>A.expiresAt,"$expiresAt"),$record:o((E,S,A)=>A?{value:E}:E,"$record"),$distance:o((E,S,A)=>A&&(A.distance??S?.vectorDistances?.get(A)),"$distance")};for(let E of this.attributes){E.isPrimaryKey&&(Y=E),E.resolve=null;let S=E.relationship,A=E.computed;if(S)if(E.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),A&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),ou=!0,S.to)E.elements?.definition?(wr[E.name]=E.resolve=(N,b,C,O)=>{let D=N[S.from?S.from:t],F=E.elements.definition.tableClass;return O?Iu({attribute:S.to,value:D},Cr(b).getReadTxn(),!1,F,!1).map(L=>L&&L.key!==void 0?L:F.primaryStore.getEntry(L,{transaction:Cr(b).getReadTxn()})).asArray:F.search([{attribute:S.to,value:D}],b).asArray},E.set=()=>{},E.resolve.definition=E.elements.definition,E.resolve.to=S.to,S.from&&(E.resolve.from=S.from)):console.error(`The one-to-many/many-to-many relationship property "${E.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(S.from){let N=E.definition||E.elements?.definition;N?(wr[E.name]=E.resolve=(b,C,O,D)=>{let F=b[S.from];if(F!==void 0){if(E.elements){let L,H=F?.map(W=>{let ee=N.tableClass.primaryStore[D?"getEntry":"get"](W,{transaction:Cr(C).getReadTxn()});return ee?.then&&(L=!0),ee});return S.filterMissing?L?Promise.all(H).then(W=>W.filter($H)):H.filter($H):L?Promise.all(H):H}return N.tableClass.primaryStore[D?"getEntry":"get"](F,{transaction:Cr(C).getReadTxn()})}},E.set=(b,C)=>{if(Array.isArray(C)){let O=C.map(D=>D.getId?.()||D[N.tableClass.primaryKey]);b[S.from]=O}else{let O=C.getId?.()||C[N.tableClass.primaryKey];b[S.from]=O}},E.resolve.definition=E.definition||E.elements?.definition,E.resolve.from=S.from):console.error(`The relationship property "${E.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${E.name}" in table "${s}" must use either "from" or "to" arguments`);else if(A)typeof A.from=="function"&&this.setComputedAttribute(E.name,A.from),wr[E.name]=E.resolve=(N,b,C)=>{let O=typeof A.from=="string"?N[A.from]:N,D=this.userResolvers[E.name];if(D)return D(O,b,C);xe.default.warn(`Computed attribute "${E.name}" does not have a function assigned to it. Please use setComputedAttribute('${E.name}', resolver) to assign a resolver function.`),this.userResolvers[E.name]=()=>{}},E.resolve.directReturn=!0;else if(r[E.name]?.customIndex?.propertyResolver){let N=r[E.name].customIndex;wr[E.name]=(b,C,O)=>{let D=b[E.name];return N.propertyResolver(D,C,O)},wr[E.name].directReturn=!0}}km(this,this),km(cu,this,!0);for(let E of T){let S=E.name;E.resolve&&Object.defineProperty(i.encoder.structPrototype,S,{get(){return E.resolve(this,Ou.getStore())},set(A){return E.set(this,A)},configurable:!0})}}static setComputedAttribute(E,S){let A=Ci(T,E);if(!A){console.error(`The attribute "${E}" does not exist in the table "${s}"`);return}if(!A.computed){console.error(`The attribute "${E}" is not defined as computed in the table "${s}"`);return}this.userResolvers[E]=S}static async deleteHistory(E=0,S=!1){let A;for(let{key:N,value:b}of l.getRange({start:0,end:E}))await Ma(),Ut(b).tableId===n&&(A=u_(l,N,b));if(S)for(let N of i.getRange({start:0,versions:!0})){let{key:b,value:C,localTime:O}=N;await Ma(),C===null&&O<E&&(A=Wc(i,N))}await A}static async*getHistory(E=0,S=1/0){for(let{key:A,value:N}of l.getRange({start:E||1,end:S})){await Ma();let b=Ut(N);b.tableId===n&&(yield{id:b.recordId,localTime:A,version:b.version,type:b.type,value:b.getValue(i,!0,A),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(E){let S=[];if(E==null)throw new Error("An id is required");let A=i.getEntry(E);if(!A)return S;let N=A.localTime;if(!N)throw new Error("The entry does not have a local audit time");let b=0;do{await Ma();let C=l.get(N);if(C){let O=Ut(C);S.push({id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user}),N=O.previousLocalTime}else break}while(b<1e3&&N);return S.reverse()}static cleanup(){V?.remove()}}Me.updatedAttributes();let Of=Me.prototype;return p&&Me.setTTLExpiration(p/1e3),j&&EE(),Me;function oo(q,E,S){let A;for(let N in r){let b=r[N],C=b.isIndexing,O=wr[N],D=S&&(O?O(S):S[N]),F=E&&(O?O(E):E[N]);if(D===F&&!C)continue;if(b.customIndex){b.customIndex.index(q,D,F);continue}A=!0;let L=b.indexNulls,H=(0,sh.getIndexedValues)(D,L),W=(0,sh.getIndexedValues)(F,L);if(W?.length>0){let ee=new Set(W);if(H=H?H.filter(oe=>{if(ee.has(oe))ee.delete(oe);else return!0}):[],W=Array.from(ee),(W.length>0||H.length>0)&&BH){let oe=W.concat(H).map(B=>({key:B,value:q}));b.prefetch(oe,GH)}for(let oe=0,B=W.length;oe<B;oe++)b.remove(W[oe],q)}else H?.length>0&&BH&&b.prefetch(H.map(ee=>({key:ee,value:q})),GH);if(H)for(let ee=0,oe=H.length;ee<oe;ee++)b.put(H[ee],q)}return A}o(oo,"updateIndices");function Or(q){switch(typeof q){case"number":return!0;case"string":if(q.length<659)return!0;if(q.length>HH)throw new Error("Primary key size is too large: "+q.length);break;case"object":if(q===null)throw new Error("Invalid primary key of null");break;case"bigint":if(q<2n**64n&&q>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof q)}if((0,El.writeKey)(q,pse,0)>HH)throw new Error("Primary key size is too large: "+q.length);return!0}o(Or,"checkValidId");function Sr(q){return typeof q=="object"&&q?q.id:q}o(Sr,"requestTargetToId");function Cf(q){return typeof q=="object"&&q&&q.isCollection}o(Cf,"isSearchTarget");function Es(q){}o(Es,"isRequestTarget");function Sc(q,E,S,A,N){if(Me.getResidencyById&&S.ensureLoaded&&E?.replicateFrom!==!1){let C=Nc(Me.getResidencyById(q));if(C&&!C.includes(server.hostname)&&I)return I({key:q,residency:C}).then(N)}let b=o(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),S.transaction?.isDone)return N(null,q);let C=i.getEntry(q,S);return C?.residencyId&&C.metadataFlags&wn&&I&&S.ensureLoaded&&E?.replicateFrom!==!1?I(C).then(O=>N(O,q),O=>(xe.default.error?.("Error loading remote record",q,C,S,O),N(null,q))):(C&&E&&(C?.version>(E.lastModified||0)&&(E.lastModified=C.version),C?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=C.localTime)),N(C,q))},"whenPrefetched");return A?b():se>0?(se--,b()):new Promise((C,O)=>{se===0?(se--,i.prefetch([q],()=>{D(),F()})):(le.push(q),re.push(F),le.length>pE&&(se--,D()));function D(){if(le.length>0){let L=re;i.prefetch(le,()=>{se===-1?D():se++;for(let H of L)H()}),le=[],re=[],_e>2&&_e--}else se=_e,_e<gy&&_e++}o(D,"prefetch");function F(){try{C(b())}catch(L){O(L)}}o(F,"load")})}o(Sc,"loadLocalRecord");function Tc(q,E){let S=E?.checkPermission;if(typeof S!="object"){if(!q?.role)return;S=q.role.permission}if(S.super_user)return Ese;let A=S[c],N,b=A?.tables;if(b)return b[s];if(c==="data"&&(N=S[s])&&!N.tables)return N}o(Tc,"getTablePermissions");function Rc(q,E,S,A){if(P){let N=!1;if(S.noCache?N=!0:(E?(!E.value||E.metadataFlags&(wn|ya)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(N=!0):N=!0,Kr(!N,"cache-hit",s)),N){let b=lu(q,E,S).then(C=>(C?.value&&C?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),S&&(C?.version>(S.lastModified||0)&&(S.lastModified=C.version),S.lastRefreshed=Date.now()),C));if(S?.onlyIfCached||E?.value&&A?.allowStaleWhileRevalidate?.(E,q)){if(b.catch(C=>xe.default.warn?.(C)),S?.onlyIfCached&&!A.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return b}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Me.evict(E.key,E.value,E.version),E.value=null,{then(N){return N(E)}}}o(Rc,"ensureLoadedFromSource");function Cr(q){let E=q?.transaction;if(E){if(!E.lmdbDb)return E.lmdbDb=i,E;do{if(E.lmdbDb?.path===i.path)return E;let S=E.next;if(!S)return E=E.next=new lo,E.lmdbDb=i,E;E=S}while(!0)}else return new HE}o(Cr,"txnForContext");function yc(q,E,S){if(!q)return;let A=(q.deref?q.deref():q.value)??i.getEntry(q.key)?.value;if(typeof E=="object"){let b=wr,C=A;for(let O=0,D=E.length;O<D;O++){let F=E[O],L=b?.[F];C=L&&C?L(C,S,q):C?.[F],q=null,b=L?.definition?.tableClass?.propertyResolvers}return C}let N=wr[E];return N?N(A,S,q):A[E]}o(yc,"getAttributeValue");function Pf(q,E,S,A,N){let b=N?.length,C={transaction:A,lazy:b>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},O;function D(F,L){let H=F?.value;if(!H)return va.SKIP;for(let W=0;W<b;W++)if(!O?.includes(W)&&!N[W](H,F))return va.SKIP;return L!==void 0&&(F.key=L),F}if(o(D,"processEntry"),b>0||!q.hasEntries){let F=q.map(L=>{if(O=null,typeof L=="object"&&L?.key!==void 0)return b>0?D(L):L;if(L==null)return va.SKIP;for(let H=0;H<b;H++){let ee=N[H].idFilter;if(ee){if(!ee(L))return va.SKIP;O||(O=[]),O.push(H)}}return Sc(L,S,C,!1,D)});return Array.isArray(q)&&(F=F.filter(L=>L!==va.SKIP)),F.hasEntries=!0,F}return q}o(Pf,"transformToEntries");function Ac(q,E,S=server.replication?.getThisNodeId(l)){if(q<=E?.version){if(E?.version===q&&S!==void 0){let A=server.replication?.exportIdMapping(l),N=E.localTime,b=N&&l.get(N);if(b){let C,O,D=Ut(b);for(let F in A)A[F]===S&&(C=F),A[F]===D.nodeId&&(O=F);if(C>O)return 1;if(C===O)return 0}}return-1}return 1}o(Ac,"precedesExistingVersion");async function lu(q,E,S){let A=E?.metadataFlags,N=E?.version,b,C;if(!i.attemptLock(q,N,()=>{clearTimeout(C);let L=i.getEntry(q);!L||!L.value||L.metadataFlags&(wn|ya)?b(lu(q,i.getEntry(q),S)):b(L)}))return new Promise(L=>{b=L,C=setTimeout(()=>{i.unlock(q,N)},mse)});let O=E?.value,D={requestContext:S,replacingRecord:O,replacingEntry:E,replacingVersion:N,noCacheStore:!1,source:null,resourceCache:S?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},F=S?.responseHeaders;return new Promise((L,H)=>{let W;oi(vt(D,async ee=>{let oe=performance.now(),B,ue,ae;try{for(let ne of Me.sources)if(ne.get&&(!ne.get.reliesOnPrototype||ne.prototype.get)){if(ne.available?.(E)===!1)continue;if(D.source=ne,B=await ne.get(q,D),B)break}ae=A&wn;let X=D.lastModified||ae&&N;ue=ae||X>N||!O,X||(X=(0,sh.getNextMonotonicTime)());let de=performance.now()-oe;if(gt(de,"cache-resolution",s,null,"success"),F&&rh(F,"Server-Timing",`cache-resolve;dur=${de.toFixed(2)}`,!0),ee.timestamp=X,p&&D.expiresAt==null&&(D.expiresAt=Date.now()+p),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=O,X=N;else throw new lt.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==q&&(B[t]=q)}W=!0,L({key:q,version:X,value:B})}catch(X){X.message+=` while resolving record ${q} for ${s}`,O&&((X.code==="ECONNRESET"||X.code==="ECONNREFUSED"||X.code==="EAI_AGAIN")&&!S?.mustRevalidate||S?.staleIfError&&(X.statusCode===500||X.statusCode===502||X.statusCode===503||X.statusCode===504))?(L({key:q,version:N,value:O}),xe.default.trace?.(X.message,"(returned stale record)")):H(X);let de=performance.now()-oe;gt(de,"cache-resolution",s,null,"fail"),F&&rh(F,"Server-Timing",`cache-resolve;dur=${de.toFixed(2)}`,!0),D.transaction.abort();return}if(S?.noCacheStore||D.noCacheStore){D.transaction.abort();return}Cr(D).addWrite({key:q,store:i,entry:E,nodeName:"source",commit:o((X,de)=>{if(de?.version!==N)return;let ne=oo(q,O,B);if(B){Fe.put?.(D,q,B),de&&(S.previousResidency=Me.getResidencyRecord(de.residencyId));let he,Ae=!1,Oe,ze=Nc(Me.getResidency(B,S));if(ze){if(!ze.includes(server.hostname))if(he=B,Ae=!0,Me.getResidencyById)B=void 0;else{B=null;for(let kr in r)B||(B={}),B[kr]=he[kr]}Oe=da(ze)}xe.default.trace?.(`Writing resolved record from source with id: ${q}, timestamp: ${new Date(X).toISOString()}`),R(q,B,de,X,Ae?wn:0,g&&(ue||Ae)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:Oe},"put",!!ae,he)}else de&&(Fe.delete?.(D,q),xe.default.trace?.(`Deleting resolved record from source with id: ${q}, timestamp: ${new Date(X).toISOString()}`),g||y?R(q,null,de,X,0,g&&ue||null,{user:D?.user},"delete",!!ae):Wc(i,de,N))},"commit")})}),()=>{i.unlock(q,N)},ee=>{i.unlock(q,N),W&&xe.default.error?.("Error committing cache update",ee)})})}o(lu,"getFromSource");function bc(q){if(!q||q.user?.role?.permission?.super_user)return!0;if(q.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(q.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(bc,"checkContextPermissions");function ua(q){let E=!1;if(q&&(q-_r>1&&(E=!0),_r=q),!(He===pt&&!E)&&(pt=He,(0,hl.getWorkerIndex)()===(0,hl.getWorkerCount)()-1))return gr&&clearTimeout(gr),He?new Promise(S=>{let A=new Date;A.setMonth(0),A.setDate(1),A.setHours(0),A.setMinutes(0),A.setSeconds(0);let N=He/(1+_r),b=E?Date.now():Math.ceil((Date.now()-A.getTime())/N)*N+A.getTime(),C=o(O=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(O)}`),gr=setTimeout(()=>te=te.then(async()=>{if(C(Math.max(O+He,Date.now())),i.rootStore.status!=="open"){clearTimeout(gr);return}let D=50,F=new Array(D),L=0,H=Math.pow(_r,8)*(pl.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),W=_/Math.pow(Math.max(_r,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${H}, adjusted eviction ${W}ms`);function ee(oe,B,ue,ae){let ge=oe+W-Date.now();if(ge<0)return!0;if(_r){let X=i.lastSize;return ue&Nn&&_u(ae,de=>{de.size&&(X+=de.size)}),xe.default.trace?.(`shouldEvict adjusted ${ge} ${X}, ${ge*(oe-B)/X} < ${H}`),ge*(oe-B)/X<H}return!1}o(ee,"shouldEvict");try{let oe=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:ue,value:ae,version:ge,expiresAt:X,metadataFlags:de}=B,ne;ae===null&&!g&&ge+fse<Date.now()?ne=Wc(i,B,ge):X!=null&&ee(X,ge,de,ae)&&(ne=Me.evict(ue,ae,ge),oe++),ne&&(await F[L],F[L]=ne.catch(he=>{xe.default.error?.("Cleanup error",he)}),++L>=D&&(L=0)),await Ma()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${oe} entries`)}catch(oe){xe.default.warn?.(`Error in cleanup scan for ${s}:`,oe)}S(void 0),_r=0}),Math.min(O-Date.now(),2147483647)).unref()},"startNextTimer");C(b)}):void 0}o(ua,"scheduleCleanup");function Ic(){V=l?.addDeleteRemovalCallback(n,i,(q,E)=>{i.remove(q,E)})}o(Ic,"addDeleteRemoval");function EE(){(0,hl.getWorkerIndex)()===0&&setInterval(async()=>{if(!au){au=!0;try{let q=j.name,E=r[q];if(!E)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let S of E.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let A of E.getValues(S)){let N=i.getEntry(A);N?.value?N.value[q]<Date.now()&&Me.evict(A,N.value,N.version):i.ifVersion(A,N?.version,()=>E.remove(S,A))}await Ma()}}catch(q){xe.default.error?.("Error in evicting old records",q)}finally{au=!1}}},dse).unref()}o(EE,"runRecordExpirationEviction");function Nc(q){if(q!=null){if(Array.isArray(q))return q;if(typeof q=="number"){if(q>=65536)throw new Error(`Shard id ${q} must be below 65536`);let E=server.shards?.get?.(q);if(E)return xe.default.trace?.(`Shard ${q} mapped to ${E.map(S=>S.name).join(", ")}`),E.map(S=>S.name);throw new Error(`Shard ${q} is not defined`)}throw new Error(`Shard or residency list ${q} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(Nc,"residencyFromFunction");function da(q){if(q){let E=q.join(","),S=d.get([Symbol.for("residency_by_set"),E]);return S||(d.put([Symbol.for("residency_by_set"),E],S=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),S],q),S)}}o(da,"getResidencyId")}function JI(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 GH(){}function ZI(e){YH=e}function Tg(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 Sg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Sg(+e);case"Float":return e==="null"?null:Sg(+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;_se.test(e)||(e+="Z");let n=new Date(e);return Sg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Rg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Sg(e){if(isNaN(e))throw new SyntaxError;return e}function qH(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t||t.startsWith?.(e);if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}return!1}else if(t[0]===e)return!0}function oi(e,t,r){return e?.then?e.then(t,r):t(e)}function $H(e){return e!=null}function ws(e){try{return JSON.stringify(e)}catch{return e}}function gse(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var va,sh,VH,KH,pl,lt,ih,oh,xe,El,hl,Rg,XI,cse,lse,use,YH,dse,fse,BH,mse,FH,hse,wn,ya,pse,HH,kH,Ese,XPe,_se,Ma,Sm=fe(()=>{k();va=require("lmdb"),sh=w(An()),VH=w(require("lodash")),KH=w(zf());Aa();Qf();pl=w(ce());KA();lt=w(Ee()),ih=w(bo()),oh=w(ti());Le();R_();xe=w(Ni());sI();vc();El=require("ordered-binary"),hl=w(st());uo();Rg=w(ie());Kc();Hi();qE();nh();XI=w(require("node:fs"));Ts();o_();({sortBy:cse}=VH.default),{validateAttribute:lse}=KH.default,use=new Uint8Array(9);use[8]=192;dse=6e4,fse=864e5;pl.initSync();BH=pl.get(U.STORAGE_PREFETCHWRITES),mse=1e4,FH=1,hse=2,wn=1,ya=8,pse=Buffer.allocUnsafeSlow(8192),HH=1978,kH=100,Ese={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},XPe=(0,Rg.convertToMS)(pl.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(yg,"makeTable");o(JI,"attributesAsObject");o(GH,"noop");o(ZI,"setServerUtilities");_se=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Tg,"coerceType");o(Sg,"rejectNaN");o(qH,"isDescendantId");Ma=o(()=>new Promise(setImmediate),"rest");o(oi,"when");o($H,"exists");o(ws,"stringify");o(gse,"hasOtherProcesses")});function Ag(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function bg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var zH=fe(()=>{o(Ag,"euclideanDistance");o(bg,"cosineDistance")});var jH,QH,Wu,ki,Yu,Sse,Tse,Ig,JH=fe(()=>{zH();jH=require("msgpackr"),QH=w(Ni()),Wu=w(Ee()),ki=(0,QH.loggerWithTag)("HNSW"),Yu=Symbol.for("entryPoint"),Sse=Symbol.for("key"),Tse=10,Ig=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=jH.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Ag:bg,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"?[Sse,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(Yu);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let _=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:_,primaryKey:t};for(let y=0;y<=_;y++)g[y]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);ki.debug?.("setting entry point to",i),this.indexStore.put(Yu,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),Tse),h=f.level;if(m>=h){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);ki.debug?.("setting entry point to",i),this.indexStore.put(Yu,i)}for(;h>m;){let _=this.searchLayer(r,l,f,this.efConstruction,h);_.length>0&&(l=_[0].id,f=_[0].node),h--}let p=new Array(m+1);for(let _=0;_<=m;_++)p[_]=[];for(let _=Math.min(m,h);_>=0;_--){let g=this.searchLayer(r,l,f,this.efConstruction,_);g=g.slice(0,this.M<<1),g.length===0&&_===0&&ki.info?.("should not have zero connections for",l);let y=p[_];for(let T=0;T<g.length;T++){let{id:R,distance:I,node:P}=g[T];if(R===i)continue;let Y=[];if(this.optimizeRouting){let $=!1,j=P[_],V=1+this.optimizeRouting*(1+.5*T/this.M);for(let le=0;le<j.length;le++){let{id:re,distance:se}=j[le],_e=1+this.optimizeRouting*(1+.5*le/this.M);for(let Ne=0;Ne<y.length;Ne++){let{id:Fe,distance:He}=y[Ne];if(Fe===re){I*V>He+se?$=!0:se*_e>I+He&&(Y.push({fromId:Fe,toId:R}),Y.push({fromId:R,toId:Fe}));break}}if($)break}if($)continue}else if(T>=(_>0?this.M:this.M<<1))continue;y.push({id:R,distance:I});for(let{fromId:$,toId:j}of Y){let V=d($);V||(V=d($,this.indexStore.get($)));for(let le=0;le<V[_].length;le++)if(V[_][le].id===j){Object.isFrozen(V[_])&&(V[_]=V[_].slice()),V[_].splice(le,1);break}}let te=c[_],x=te?.find(({id:$})=>$===R);if(x){let $=te?.indexOf(x);te.copied||(te=[...te],te.copied=!0,c[_]=te),te.splice($,1)}else this.addConnection(R,d(R,P),i,_,I,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...p})}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:h,value:p}of this.indexStore.getRange({start:0,end:1/0}))if(p.level>m){if(l=h,p.level===f)break;m=p.level}}if(l===void 0)this.indexStore.remove(Yu);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);ki.debug?.("setting entry point to",l),this.indexStore.put(Yu,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:h}of m){let p=d(h,this.indexStore.get(h));for(let _=0;_<=f;_++)p[_]=p[_]?.filter(({id:g})=>g!==i),p[_].length===0&&(ki.info?.("node was left orphaned, will reindex",h),u.set(p.primaryKey,p.vector))}}function d(f,m){let h=a.get(f);return!h&&m&&(h={...m},a.set(f,h)),h}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Yu);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((h,p)=>h.distance-p.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:h}of m[i]||[]){if(c.has(h)||h===void 0)continue;c.add(h);let p=this.indexStore.get(h);if(!p)continue;this.nodesVisitedCount++;let _=a(t,p.vector);if(_<f||u.length<s){let g={id:h,distance:_,node:p};l.push(g),u.push(g)}}u.sort((h,p)=>h.distance-p.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new Wu.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Wu.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=bg;else if(s==="euclidean")c=Ag;else{if(s)throw new Wu.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Wu.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Wu.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){ki.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||ki.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){ki.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:h})=>h!==t),s===0&&m[s].length===0&&ki.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?ki.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Ag:bg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var eN,XH=fe(()=>{JH();eN={HNSW:Ig}});var ft={};Ce(ft,{database:()=>Hu,databaseEnvs:()=>Po,databases:()=>Ge,dropDatabase:()=>lI,dropTableMeta:()=>Ise,getDatabases:()=>it,getDefaultCompression:()=>Lg,getTables:()=>Rse,onRemovedDB:()=>fh,onUpdatedTable:()=>_l,readMetaDb:()=>ah,resetDatabases:()=>Zu,table:()=>et,tables:()=>cn});function Rse(){return Cg||it(),cn||{}}function it(){if(Cg)return Ge;Cg=!0,Qu=new Map;let e=(0,qt.getHdbBasePath)()&&(0,xt.join)((0,qt.getHdbBasePath)(),Cc),t=(0,qt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,qt.get)(U.STORAGE_PATH)||e&&((0,Zn.existsSync)(e)?e:(0,xt.join)((0,qt.getHdbBasePath)(),yE)),!e)return;if((0,Zn.existsSync)(e))for(let n of(0,Zn.readdirSync)(e,{withFileTypes:!0})){let s=(0,xt.basename)(n.name,".mdb");n.isFile()&&(0,xt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&ah((0,xt.join)(e,n.name),null,s)}if((0,Zn.existsSync)((0,ju.getBaseSchemaPath)())){for(let n of(0,Zn.readdirSync)((0,ju.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,xt.join)((0,ju.getBaseSchemaPath)(),n.name),i=(0,xt.join)((0,ju.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,Zn.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,xt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,xt.join)(i,a.name);ah((0,xt.join)(s,a.name),(0,xt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,Zn.existsSync)(i))for(let c of(0,Zn.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,xt.extname)(c.name).toLowerCase()===".mdb"&&ah((0,xt.join)(i,c.name),(0,xt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,xt.join)(l.path,(0,xt.basename)(c+".mdb"));(0,Zn.existsSync)(u)&&ah(u,c,n,null,!0)}}for(let n in Ge){let s=Qu.get(n);if(s){let i=Ge[n];n.includes("delete")&&yr.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(yr.trace(`delete table class ${a}`),delete i[a])}else if(delete Ge[n],n==="data"){for(let i in cn)delete cn[i];delete cn[Pg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if((0,qt.get)(U.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(Ge.system?.hdb_analytics?.enableAuditing(),Ge.system?.hdb_analytics_hostname?.enableAuditing()),Ge.system)for(let n of r)Ge.system[n]&&(Ge.system[n].replicate=!1);return Qu=null,Ge}function Zu(){Cg=!1;for(let[,e]of Po)e.needsDeletion=!0;it();for(let[e,t]of Po)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Po.delete(e);let r=Ge[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Ge[t.databaseName],lh.forEach(i=>i(t.databaseName));break}}return Ge}function ah(e,t,r=nN,n,s){let i=new tN.default(e,!1);try{let a=Po.get(e);a?a.needsDeletion=!1:(a=(0,Ju.open)(i),Po.set(e,a));let c=new Xu.default(!1),l=a.dbisDb||(a.dbisDb=a.openDB(Ng.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,Zn.existsSync)(n)&&(i.path=n,u=(0,Ju.open)(i),u.isLegacy=!0):u=l_(a));let d=nk(r),f=d[Pg],m=new Map;for(let{key:h,value:p}of l.getRange({start:!1})){let[_,g]=h.toString().split("/");g===""?g=p.name:g||(g=_,_=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),f?.add(_);let y=m.get(_);y||m.set(_,y={attributes:[]}),(g==null||p.is_hash_attribute)&&(y.primary=p),g!=null&&y.attributes.push(p),Object.defineProperty(p,"key",{value:h,configurable:!0})}for(let[h,p]of m){let{attributes:_,primary:g}=p;if(!g){for(let se of _)if(se.is_hash_attribute||se.isPrimaryKey){g=se;break}if(!g){yr.warn(`Unable to find a primary key attribute on table ${h}, with attributes: ${JSON.stringify(_)}`);continue}}let y=d[h],T={},R=[],I,P,Y=typeof g.audit=="boolean"?g.audit:(0,qt.get)(U.LOGGING_AUDITLOG),te=g.trackDeletes,x=g.expiration,$=g.eviction,j=g.sealed,V=g.splitSegments,le=g.replicate;if(y)T=y.indices,R=y.attributes,y.schemaVersion++;else{I=g.tableId,I?I>=(l.get(zu)||0)&&(l.putSync(zu,I+1),yr.info(`Updating next table id (it was out of sync) to ${I+1} for ${h}`)):(g.tableId=I=l.get(zu),I||(I=1),yr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(zu,I+1),l.putSync(g.key,g));let se=new Xu.default(!g.is_hash_attribute,g.is_hash_attribute);if(se.compression=g.compression,se.compression){let _e=(0,qt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||rk;se.compression.threshold=_e}P=__(a.openDB(g.key,se),a),a.databaseName=r,P.tableId=I}let re;for(let se of _){se.attribute=se.name;try{if(!se.is_hash_attribute&&(se.indexed||se.attribute&&!se.name)){if(!T[se.name]){let Ne=ik(se.key,a,se);T[se.name]=Ne,T[se.name].indexNulls=se.indexNulls}let _e=R.find(Ne=>Ne.name===se.name);_e?R.splice(R.indexOf(_e),1,se):R.push(se),re=!0}}catch(_e){yr.error("Error trying to update attribute",se,R,T,_e)}}for(let se of R)if(!_.find(Ne=>Ne.name===se.name)){if(se.is_hash_attribute){yr.error("Unable to remove existing primary key attribute",se);continue}se.indexed&&(R.splice(R.indexOf(se),1),re=!0)}if(y)re&&(y.schemaVersion++,y.updatedAttributes());else{y=sk(d,h,yg({primaryStore:P,auditStore:u,audit:Y,sealed:j,splitSegments:V,replicate:le,expirationMS:x&&x*1e3,evictionMS:$&&$*1e3,trackDeletes:te,tableName:h,tableId:I,primaryKey:g.name,databasePath:s?r+"/"+h:r,databaseName:r,indices:T,attributes:_,schemaDefined:g.schemaDefined,dbisDB:l})),y.schemaVersion=1;for(let se of ch)se(y)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function nk(e){let t=Ge[e];if(t||(e==="data"?t=Ge[e]=cn:e==="system"?Object.defineProperty(Ge,"system",{value:t=Object.create(null),configurable:!0}):t=Ge[e]=Object.create(null)),Qu&&!Qu.has(e)){let r=new Set;t[Pg]=r,Qu.set(e,r)}return t}function sk(e,t,r){return e[t]=r,r}function Hu({database:e,table:t}){e||(e=nN),it();let r=nk(e),n=(0,xt.join)((0,qt.getHdbBasePath)(),Cc),s=(0,qt.get)(U.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,qt.get)(U.STORAGE_PATH)||((0,Zn.existsSync)(n)?n:(0,xt.join)((0,qt.getHdbBasePath)(),yE));let a=(0,xt.join)(n,(i?t:e)+".mdb"),c=Po.get(a);if(!c||c.status==="closed"){let l=new tN.default(a,!1);c=(0,Ju.open)(l),Po.set(a,c)}return c.auditStore||(c.auditStore=l_(c)),c}async function lI(e){if(!Ge[e])throw new Error("Schema does not exist");let t=Ge[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Po.delete(r.path),r.status==="open"&&(await r.close(),await uh.remove(r.path));if(r||(r=Hu({database:e,table:null}),r.status==="open"&&(await r.close(),await uh.remove(r.path))),e==="data"){for(let n in cn)delete cn[n];delete cn[Pg]}delete Ge[e],lh.forEach(n=>n(e)),await pA(r)}function ik(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&eN[r.indexed.type]?.useObjectStore,s=new Xu.default(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=eN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):yr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function et(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:h}=e;r||(r=nN);let p=Hu({database:r,table:t}),_=Ge[r];yr.trace(`Defining ${t} in ${r}`);let g=_?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let y,T,R;m==null&&(m=!0);let I=new Xu.default(!1);for(let V of a)V.attribute&&!V.name?(V.name=V.attribute,V.indexed=!0):V.attribute=V.name,V.expiresAt&&(V.indexed=!0);let P,Y;if(g){if(y=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let V=p.auditStore;T=a.find(_e=>_e.isPrimaryKey)||{},y=T.name,T.is_hash_attribute=T.isPrimaryKey=!0,T.schemaDefined=m,T.compression=Lg(),f&&(T.trackDeletes=!0),c=T.audit=typeof c=="boolean"?c:(0,qt.get)(U.LOGGING_AUDITLOG),n&&(T.expiration=n),s&&(T.eviction=s),u??=!1,T.splitSegments=u,typeof l=="boolean"&&(T.sealed=l),typeof d=="boolean"&&(T.replicate=d),h&&(T.origins?T.origins.includes(h)||T.origins.push(h):T.origins=[h]),yr.trace(`${t} table loading, opening primary store`);let le=new Xu.default(!1,!0);le.compression=T.compression;let re=t+"/";if(R=p.dbisDb=p.openDB(Ng.INTERNAL_DBIS_NAME,I),j(),R.get(re))return Y&&Y(),Zu(),et(e);let se=__(p.openDB(re,le),p);p.databaseName=r,se.tableId=R.get(zu),yr.trace(`Assigning new table id ${se.tableId} for ${t}`),se.tableId||(se.tableId=1),R.put(zu,se.tableId+1),T.tableId=se.tableId,g=sk(_,t,yg({primaryStore:se,auditStore:V,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:y,tableName:t,tableId:se.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,P=!0,R.put(re,T)}let te=g.indices;R=R||(p.dbisDb=p.openDB(Ng.INTERNAL_DBIS_NAME,I)),g.dbisDB=R;let x=[];for(let{key:V,value:le}of R.getRange({start:!0})){let[re,se]=V.toString().split("/");if(se===""&&(se=le.name),se){if(re!==t)continue}else continue;let _e=a.find(Fe=>Fe.name===se),Ne=!_e?.indexed&&le.indexed&&!le.isPrimaryKey;if((!_e||Ne)&&(j(),P=!0,_e||R.remove(V),Ne)){let Fe=g.indices[re];Fe&&x.push(Fe)}}let $=[];try{for(let V of a||[]){if((V.relationship||V.computed)&&(P=!0,V.relationship))continue;let le=t+"/"+(V.name||"");Object.defineProperty(V,"key",{value:le,configurable:!0});let re=R.get(le);if(V.isPrimaryKey){if(re=re||R.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+re.expiration||void 0)||(+s||void 0)!==(+re.eviction||void 0)||V.type!==re.type){let _e={...re};typeof c=="boolean"&&(c&&g.enableAuditing(c),_e.audit=c),n&&(_e.expiration=+n),s&&(_e.eviction=+s),l!==void 0&&(_e.sealed=l),d!==void 0&&(_e.replicate=d),V.type&&(_e.type=V.type),P=!0,j(),R.put(le,_e)}continue}re?.attribute&&!re.name&&(re.indexed=!0);let se=!re||re.type!==V.type||JSON.stringify(re.indexed)!==JSON.stringify(V.indexed)||re.nullable!==V.nullable||re.version!==V.version||JSON.stringify(re.properties)!==JSON.stringify(V.properties)||JSON.stringify(re.elements)!==JSON.stringify(V.elements);if(V.indexed){let _e=ik(le,p,V);(se||re.indexingPID&&re.indexingPID!==process.pid||re.restartNumber<dh.workerData?.restartNumber)&&(P=!0,j(),re=R.get(le),(se||re.indexingPID&&re.indexingPID!==process.pid||re.restartNumber<dh.workerData?.restartNumber)&&(P=!0,V.indexNulls===void 0&&(V.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(V.lastIndexedKey=re?.lastIndexedKey??void 0,V.indexingPID=process.pid,_e.isIndexing=!0,Object.defineProperty(V,"dbi",{value:_e}),$.push(V))),R.put(le,V)),re?.indexNulls&&V.indexNulls===void 0&&(V.indexNulls=!0),_e.indexNulls=V.indexNulls,te[V.name]=_e}else se&&(P=!0,j(),R.put(le,V))}}finally{Y&&Y()}if(P&&(g.schemaVersion++,g.updatedAttributes()),yr.trace(`${t} table loading, running index`),$.length>0||x.length>0?g.indexingOperation=bse(g,$,x):P&&wg.signalSchemaChange(new Og.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=h,P)for(let V of ch)V(g,h!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),yr.trace(`${t} table loaded`),g;function j(){Y||p.transactionSync(()=>({then(V){Y=V}}))}o(j,"startTxn")}async function bse(e,t,r){try{yr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await wg.signalSchemaChange(new Og.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Ju.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:h}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,h,()=>{for(let p=0;p<l;p++){let _=t[p],g=_.name,y=_.dbi;try{let T=_.resolve,R=m&&(T?T(m):m[g]);if(y.customIndex){y.customIndex.index(f,R);continue}let I=(0,ZH.getIndexedValues)(R);if(I)for(let P=0,Y=I.length;P<Y;P++)y.put(I[P],f)}catch(T){a[g]||(a[g]=!0,yr.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>d--,p=>{d--,yr.error(p)}),dh.workerData&&dh.workerData.restartNumber!==tk.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=f,e.dbisDB.put(p.key,p);if(i)return}d>yse?await s:d>Ase&&await new Promise(p=>setImmediate(p))}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 wg.signalSchemaChange(new Og.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),yr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){yr.error("Error in indexing",n)}}function Ise({table:e,database:t}){let r=Hu({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 _l(e){return ch.push(e),{remove(){let t=ch.indexOf(e);t>-1&&ch.splice(t,1)}}}function fh(e){return lh.push(e),{remove(){let t=lh.indexOf(e);t>-1&&lh.splice(t,1)}}}function Lg(){let e=(0,qt.get)(U.STORAGE_COMPRESSION),t=(0,qt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,qt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||rk,n={startingOffset:32};return t&&(n.dictionary=uh.readFileSync(t)),r&&(n.threshold=r),e&&n}var qt,Ng,Ju,xt,Zn,ju,Xu,tN,uh,rN,ZH,wg,Og,dh,ek,tk,yr,nN,Pg,rk,cn,Ge,zu,ch,lh,Cg,Po,Qu,yse,Ase,Le=fe(()=>{qt=w(ce()),Ng=w(kt()),Ju=require("lmdb"),xt=require("path"),Zn=require("fs"),ju=w(At());Sm();Xu=w(Tm()),tN=w(Rm());k();uh=w(require("fs-extra")),rN=w(Ws()),ZH=w(An()),wg=w(bo()),Og=w(ti()),dh=require("worker_threads"),ek=w(z()),tk=w(st());uo();Kc();Ts();XH();yr=(0,ek.forComponent)("storage"),nN="data",Pg=Symbol("defined-tables"),rk=((0,qt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,qt.initSync)();cn=Object.create(null),Ge=Object.create(null);(0,rN._assignPackageExport)("databases",Ge);(0,rN._assignPackageExport)("tables",cn);zu=Symbol.for("next-table-id"),ch=[],lh=[],Po=new Map;o(Rse,"getTables");o(it,"getDatabases");o(Zu,"resetDatabases");o(ah,"readMetaDb");o(nk,"ensureDB");o(sk,"setTable");o(Hu,"database");o(lI,"dropDatabase");o(ik,"openIndex");o(et,"table");yse=1e3,Ase=10;o(bse,"runIndexing");o(Ise,"dropTableMeta");o(_l,"onUpdatedTable");o(fh,"onRemovedDB");o(Lg,"getDefaultCompression")});var oN={};Ce(oN,{loadGQLSchema:()=>Ose,start:()=>iN,startOnMainThread:()=>wse});function iN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,h=[],p;for(let y of f.definitions)switch(y.kind){case l.OBJECT_TYPE_DEFINITION:let Y=function(x){if(x.kind==="NonNullType"){let V=Y(x.type);return V.nullable=!1,V}if(x.kind==="ListType")return{type:"array",elements:Y(x.type)};let j={type:x.name?.value};return Object.defineProperty(j,"location",{value:x.loc.startToken}),j};o(Y,"getProperty");let T=y.name.value,R=[],I={table:null,database:null,properties:R};m.set(T,I);for(let x of y.directives){if(x.name.value==="table"){for(let j of x.arguments)I[j.name.value]=j.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=T),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,h.push(I)}if(x.name.value==="sealed"&&(I.sealed=!0),x.name.value==="splitSegments"&&(I.splitSegments=!0),x.name.value==="replicate"&&(I.replicate=!0),x.name.value==="export"){I.export=!0;for(let j of x.arguments)typeof I.export!="object"&&(I.export={}),I.export[j.name.value]=j.value.value}}let P=!1,te={};for(let x of y.fields){let $=Y(x.type);$.name=x.name.value,R.push($),te[$.name]=void 0;for(let j of x.directives){let V=j.name.value;if(V==="primaryKey")P?console.warn("Can not define two attributes as a primary key at",j.loc):($.isPrimaryKey=!0,P=!0);else if(V==="indexed"){let le={};for(let re of j.arguments||[])le[re.name.value]=re.value.value;$.indexed=le}else if(V==="computed"){for(let le of j.arguments||[])if(le.name.value==="from"){let re=le.value.value;$.computed={from:g(re,le,te)},$.version==null&&($.version=re)}else le.name.value==="version"&&($.version=le.value.value);$.computed=$.computed||!0}else if(V==="relationship"){let le={};for(let re of j.arguments)le[re.name.value]=re.value.value;$.relationship=le}else if(V==="createdTime")$.assignCreatedTime=!0;else if(V==="updatedTime")$.assignUpdatedTime=!0;else if(V==="expiresAt")$.expiresAt=!0;else if(V==="allow"){let le=$.authorizedRoles=[];for(let re of j.arguments)re.name.value==="role"&&le.push(re.value.value)}else server.knownGraphQLDirectives.includes(V)&&console.warn(`@${V} is an unknown directive, at`,j.loc)}}I.type=T,T==="Query"&&(p=I)}function _(y){let T=m.get(y.type);T?(Object.defineProperty(y,"properties",{value:T.properties}),Object.defineProperty(y,"definition",{value:T})):y.type==="array"?_(y.elements):Nse.includes(y.type)||(0,ak.getWorkerIndex)()===0&&console.error(`The type ${y.type} is unknown at line ${y.location.line}, column ${y.location.column}, in ${s}`)}o(_,"connectPropertyType");for(let y of m.values())for(let T of y.properties)_(T);for(let y of h)y.tableClass=e(y),y.export&&(y.export.name===""?i.set((0,sN.dirname)(n),y.tableClass):i.set((0,sN.dirname)(n)+"/"+(y.export.name||y.type),y.tableClass,y.export));function g(y,T,R){return new ok.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${y}; } } } } computed;`,{filename:s,lineOffset:T.loc.startToken.line-1,columnOffset:T.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var sN,ok,ak,Nse,wse,Ose,ck=fe(()=>{sN=require("path"),ok=require("node:vm");Le();ak=w(st()),Nse=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(iN,"start");wse=iN,Ose=iN({ensureTable:et}).handleFile});var cN={};Ce(cN,{start:()=>Bse});function Cse(e){if(e.kind!==Be.Kind.OPERATION_DEFINITION&&e.kind!==Be.Kind.FRAGMENT_DEFINITION)throw new Ur(`Unexpected non-executable definition type ${e.kind}.`)}function lk(e){if(typeof e!="object"||e===null)throw new Gi("Request body must be an object.");if(!("query"in e))throw new Gi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Gi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Gi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Gi("Request body `operationName` field must be a string.")}function aN(e){return parseInt(e.value,10)}function dk(e){return parseFloat(e.value)}function fk(e,t,r){let n=r.get(e.name.value);return mk(n)?hk(n,t):{attribute:t,value:n}}function mk(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function hk(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],mk(n)?hk(n,t):{attribute:t,value:n}))}function Pse(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Be.Kind.NULL:return{attribute:t,value:null};case Be.Kind.INT:return{attribute:t,value:aN(e.value)};case Be.Kind.FLOAT:return{attribute:t,value:dk(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:t,value:e.value.value};case Be.Kind.VARIABLE:return fk(e.value,t,r);case Be.Kind.OBJECT:return pk(e.value,t,r);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Ur(`Value type, ${e.value.kind}, is not supported.`)}}function pk(e,t,r){return e.fields.flatMap(n=>Pse(n,t,r))}function Lse(e,t){switch(e.value.kind){case Be.Kind.NULL:return{attribute:e.name.value,value:null};case Be.Kind.INT:return{attribute:e.name.value,value:aN(e.value)};case Be.Kind.FLOAT:return{attribute:e.name.value,value:dk(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Be.Kind.VARIABLE:return fk(e.value,e.name.value,t);case Be.Kind.OBJECT:return pk(e.value,[e.name.value],t);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Ur(`Argument type, ${e.value.kind}, is not supported.`)}}function Dse(e,t){return e.flatMap(r=>Lse(r,t))}function Dg(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Be.Kind.FIELD:return r;case Be.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Ur(`Fragment \`${n}\` not found.`);return Dg(s.selectionSet,t)}case Be.Kind.INLINE_FRAGMENT:return Dg(r.selectionSet,t)}})}function Ek(e,t){return Dg(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:Ek(r.selectionSet,t)}:r.name.value)}async function Mse(e,t,r,n){let s=As.getMatch(e.name.value,"graphql");if(s===void 0)throw new Ur(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:Ek(e.selectionSet,r),conditions:Dse(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function _k(e){switch(e.kind){case Be.Kind.NULL:return null;case Be.Kind.INT:return aN(e);case Be.Kind.FLOAT:return parseFloat(e.value);case Be.Kind.STRING:case Be.Kind.BOOLEAN:return e.value;case Be.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:_k(r.value),...t}),{});case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Ur(`Value type, ${e.kind}, is not supported.`)}}function vse(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=_k(n.defaultValue)),n.type.kind===Be.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Ur(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Use(e,t,r,n){if(e.operation===Be.OperationTypeNode.SUBSCRIPTION)throw new Ur("Subscriptions are not supported.");if(e.operation===Be.OperationTypeNode.MUTATION)throw new Ur("Mutations are not supported yet.");let s=vse(e.variableDefinitions,t),i=await Promise.all(Dg(e.selectionSet,r).map(c=>Mse(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function uk({query:e,variables:t={},operationName:r},n){let s=Be.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(Cse(u),u.kind===Be.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Ur("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Ur(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Ur("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Ur(`Operation \`${r}\` not found.`);let l=await Use(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function xse(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 lk(r),uk(r,e)}case"POST":{let r=await ho(e.headers.get("content-type"),!0)(e._nodeRequest);return lk(r),uk(r,e)}default:throw new Gi("Method Not Allowed",405,{Allow:"GET, POST"})}}function Bse(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await xse(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Ur)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Ur)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Be,Ur,Gi,gk=fe(()=>{Be=w(require("graphql"));po();Pu();o(Cse,"assertExecutableDefinitionNode");o(lk,"assertRequestParams");o(aN,"processIntValueNode");o(dk,"processFloatValueNode");o(fk,"processVariableNode");o(mk,"isObject");o(hk,"transformObjectIntoQueryCondition");o(Pse,"processObjectFieldNode");o(pk,"processObjectValueNode");o(Lse,"processArgumentNode");o(Dse,"buildConditionsQuery");o(Dg,"fillInFragments");o(Ek,"buildSelectQuery");o(Mse,"processFieldNode");o(_k,"processConstValueNode");o(vse,"resolveVariables");o(Use,"executeOperation");o(uk,"resolver");Ur=class extends Error{static{o(this,"GraphQLQueryingError")}},Gi=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(xse,"graphqlQueryingHandler");o(Bse,"start")});var bk=M((RLe,Ak)=>{var ed=require("validate.js"),Tk=at(),td=(k(),v(K)),{handleHDBError:Fse,hdbErrors:Hse}=Ee(),{HDB_ERROR_MSGS:Xt,HTTP_STATUS_CODES:kse}=Hse,lN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Gse={STRUCTURE_USER:"structure_user"},Sk=Object.values(td.ROLE_TYPES_ENUM),qse="attribute_permissions",$se="attribute_name",{PERMS_CRUD_ENUM:rd}=td,Vse=[qse,...Object.values(rd)],Rk=[rd.READ,rd.INSERT,rd.UPDATE],Kse=[$se,...Rk];function Yse(e){let t=lN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,yk(e,t)}o(Yse,"addRoleValidation");function Wse(e){let t=lN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,yk(e,t)}o(Wse,"alterRoleValidation");function zse(e){let t=lN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,Tk.validateObject(e,t)}o(zse,"dropRoleValidation");var jse=["operation","role","id","permission","hdb_user","access"];function yk(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)jse.includes(n[a])||s.push(n[a]);s.length>0&&cr(Xt.INVALID_ROLE_JSON_KEYS(s),r);let i=Tk.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{cr(a,r)}),e.permission){let a=Qse(e);a&&cr(a,r),Sk.forEach(c=>{e.permission[c]&&!ed.isBoolean(e.permission[c])&&cr(Xt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(Sk.indexOf(a)<0){if(a===Gse.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||cr(Xt.SCHEMA_NOT_FOUND(f),r)}continue}cr(Xt.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){cr(Xt.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){cr(Xt.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{Vse.includes(d)||cr(Xt.INVALID_PERM_KEY(d),r,a,l)}),Object.values(rd).forEach(d=>{ed.isDefined(u[d])?ed.isBoolean(u[d])||cr(Xt.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):cr(Xt.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){cr(Xt.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){cr(Xt.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let h=u.attribute_permissions[m];if(Object.keys(h).forEach(_=>{!Kse.includes(_)&&_!==rd.DELETE&&cr(Xt.INVALID_ATTR_PERM_KEY(_),r,a,l)}),!ed.isDefined(h.attribute_name)){cr(Xt.ATTR_PERM_MISSING_NAME,r,a,l);continue}let p=h.attribute_name;if(!d.includes(p)){cr(Xt.INVALID_ATTRIBUTE_IN_PERMS(p),r,a,l);continue}Rk.forEach(_=>{ed.isDefined(h[_])?ed.isBoolean(h[_])||cr(Xt.ATTR_PERM_NOT_BOOLEAN(_,p),r,a,l):cr(Xt.ATTR_PERM_MISSING(_,p),r,a,l)}),!f.read&&h.read===!0&&(f.read=!0),!f.insert&&h.insert===!0&&(f.insert=!0),!f.update&&h.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;cr(Xt.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return Jse(r)}o(yk,"customValidate");Ak.exports={addRoleValidation:Yse,alterRoleValidation:Wse,dropRoleValidation:zse};function Qse(e){let{operation:t,permission:r}=e;if(t===td.OPERATIONS_ENUM.ADD_ROLE||t===td.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 Xt.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?td.ROLE_TYPES_ENUM.SUPER_USER:td.ROLE_TYPES_ENUM.CLUSTER_USER;return Xt.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(Qse,"validateNoSUPerms");function Jse(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Xt.ROLE_PERMS_ERROR,...e};return Fse(new Error,n,kse.BAD_REQUEST)}else return null}o(Jse,"generateRolePermResponse");function cr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(cr,"addPermError")});var hh=M((bLe,Ok)=>{"use strict";var Ik=Mn(),Nk=on(),Xse=ul(),dN=bk(),fN=bo(),ALe=require("uuid").v4,Zse=require("util"),Mg=(k(),v(K)),eie=ie(),mN=Nk.searchByValue,tie=Nk.searchByHash,rie=Zse.promisify(Xse.delete),nie=ri(),sie=Bu(),{hdbErrors:iie,handleHDBError:gl}=Ee(),{HDB_ERROR_MSGS:wk,HTTP_STATUS_CODES:mh}=iie,{UserEventMsg:hN}=ti();Ok.exports={addRole:oie,alterRole:aie,dropRole:cie,listRoles:lie};function uN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(uN,"scrubRoleDetails");async function oie(e){let t=dN.addRoleValidation(e);if(t)throw t;e=uN(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await mN(r)||[])}catch(i){throw gl(i)}if(n&&n.length>0)throw gl(new Error,wk.ROLE_ALREADY_EXISTS(e.role),mh.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 Ik.insert(s),fN.signalUserChange(new hN(process.pid)),e=uN(e),e}o(oie,"addRole");async function aie(e){let t=dN.alterRoleValidation(e);if(t)throw t;e=uN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await Ik.update(r)}catch(s){throw gl(s)}if(n&&n?.message==="updated 0 of 1 records")throw gl(new Error,"Invalid role id",mh.BAD_REQUEST,void 0,void 0,!0);return await fN.signalUserChange(new hN(process.pid)),e}o(aie,"alterRole");async function cie(e){let t=dN.dropRoleValidation(e);if(t)throw gl(new Error,t,mh.BAD_REQUEST,void 0,void 0,!0);let r=new sie(Mg.SYSTEM_SCHEMA_NAME,Mg.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await tie(r));if(n.length===0)throw gl(new Error,wk.ROLE_NOT_FOUND,mh.NOT_FOUND,void 0,void 0,!0);let s=new nie(Mg.SYSTEM_SCHEMA_NAME,Mg.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await mN(s)),a=!1;if(eie.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw gl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,mh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await rie(c),fN.signalUserChange(new hN(process.pid)),`${n[0].role} successfully deleted`}o(cie,"dropRole");async function lie(){return mN({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(lie,"listRoles")});var pN={};Ce(pN,{start:()=>Lk,startOnMainThread:()=>fie});function Lk({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Ck.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(uie.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await die(i)}}}async function die(e){let t=it().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Pk.isEqual)(i,e)?void 0:(e.id=r.id,(0,vg.alterRole)(e))}return(0,vg.addRole)(e)}var vg,Ck,Pk,uie,fie,Dk=fe(()=>{Le();vg=w(hh()),Ck=require("yaml"),Pk=require("lodash"),uie=["super_user","cluster_user","structure_user"];o(Lk,"start");o(die,"ensureRole");fie=Lk});async function Ug(e){let t=(0,Uk.pathToFileURL)(e).toString();if(mie)return ph||(ph=hie(Eie)),(await(await ph).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function hie(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ph=new Compartment({console,Math,Date,fetch:pie,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,vk.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Dr,s.tables=cn,s.databases=Ge}};let n=await(0,Mk.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),ph}function pie(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 Eie(){return{Resource:Dr,tables:cn}}var Mk,vk,Uk,mie,ph,EN=fe(()=>{Aa();Le();Mk=require("fs/promises"),vk=require("path"),Uk=require("url"),mie=!1;o(Ug,"secureImport");o(hie,"getCompartment");o(pie,"secureOnlyFetch");o(Eie,"getGlobalVars")});var gN={};Ce(gN,{handleFile:()=>_ie});async function _ie(e,t,r,n){let s=new Map,i=await Ug(r);c(i.default)&&n.set((0,_N.dirname)(t),i.default),a(i,(0,_N.dirname)(t));function a(l,u){for(let d in l){let f=l[d];c(f)?n.set(u+"/"+d,f):typeof f=="object"&&a(f,u+"/"+d)}}o(a,"recurseForResources");function c(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return o(c,"isResource"),s}var _N,xk=fe(()=>{EN();_N=require("path");o(_ie,"handleFile")});var TN={};Ce(TN,{start:()=>gie});function gie({resources:e}){e.set("login",SN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var SN,Bk=fe(()=>{Aa();o(gie,"start");SN=class extends Dr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function qk(e){let t={openapi:Sie,info:{title:"HarperDB HTTP REST interface",version:Gk.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:a,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},d=[];if(a)for(let{type:R,name:I,elements:P,relationship:Y,definition:te}of a){if(Y)R==="array"?u[I]={type:"array",items:{$ref:Ua+P.type}}:u[I]={$ref:Ua+R};else{let x=te??P?.definition;if(x){if(!t.components.schemas[x.type]){let $={};x.properties.forEach(j=>{$[j.name]=new bN(RN[j.type],j.type)}),t.components.schemas[x.type]=new kk($)}R==="array"?u[I]={type:"array",items:{$ref:Ua+x.type}}:u[I]={$ref:Ua+x.type}}else R==="array"?P.type==="Any"||P.type=="ID"?u[I]={type:"array",items:{format:P.type}}:u[I]={type:"array",items:new bN(RN[P.type],P.type)}:R==="Any"||R=="ID"?u[I]={format:R}:u[I]=new bN(RN[R],R)}d.push(new IN(I,"query",u[I]))}let f=Object.keys(u),m=new IN(c,"path",{format:"ID"});m.required=!0,m.description="primary key of record";let h=new IN("property","path",{enum:f});h.required=!0,t.components.schemas[i]=new kk(u);let p=l.post!==Resource.prototype.post||l.update,_=typeof l.put=="function",g=typeof l.get=="function",y=typeof l.delete=="function",T="/"+s+"/";p&&(t.paths[T]={},t.paths[T].post=new Tie(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new yN(d,r,{200:new AN({$ref:Ua+i})},"search for records by the specified property name and value pairs")),y&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Hk(d,r,"delete all the records that match the provided query",{204:new Fk})),T="/"+s+"/{"+c+"}",g&&(t.paths[T]={},t.paths[T].get=new yN([m],r,{200:new AN({$ref:Ua+i})},"retrieve a record by its primary key")),_&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Rie([m],r,i,"create or update the record with the URL path that maps to the record's primary key")),y&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new Hk([m],r,"delete a record with the given primary key",{204:new Fk})),g&&h.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new yN([m,h],r,{200:new AN({enum:f})},"used to retrieve the specified property of the specified record"))}return t}function Tie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Ua+e}}}},this.security=t,this.responses={200:{description:NN,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function yN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function AN(e){this.description=NN,this.content={"application/json":{schema:e}}}function Fk(){this.description="successfully processed request, no content returned to client"}function Rie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Ua+r}}}},this.responses={200:{description:NN}}}function Hk(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function kk(e){this.type="object",this.properties=e}function bN(e,t){this.type=e,this.format=t}function IN(e,t,r){this.name=e,this.in=t,this.schema=r}var Gk,Sie,RN,Ua,NN,$k=fe(()=>{Gk=w(Rt()),Sie="3.0.3",RN={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Ua="#/components/schemas/",NN="successful operation";o(qk,"generateJsonApi");o(Tie,"Post");o(yN,"Get");o(AN,"Response200");o(Fk,"Response204");o(Rie,"Put");o(Hk,"Delete");o(kk,"ResourceSchema");o(bN,"Type");o(IN,"Parameter")});var Kk={};Ce(Kk,{Request:()=>xa,createReuseportFd:()=>xg});var Vk,xa,wN,ON,xg,Eh=fe(()=>{Vk=require("os"),xa=class{static{o(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new ON(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new wN(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},wN=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},ON=class{constructor(t){this.asObject=t}static{o(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,Vk.platform)()!="win32"&&(xg=require("node-unix-socket").createReuseportFd)});var Fg={};Ce(Fg,{parseHeaderValue:()=>PN,start:()=>bie});async function Aie(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&T_(e);let i=new Ns;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==Yk){let g=Bg.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new Js(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let y=PN(g);for(let T of y)switch(T.name){case"max-age":e.expiresAt=T.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=PN(u).map(y=>(y.next?.name==="confirm"&&y.next.value>=0&&(e.replicatedConfirmation=+y.next.value),y.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 vt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=ho(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new nd.ClientError(g,400)}if(e.authorize=!0,a===Yk&&s==="GET"){if(e?.user?.role?.permission?.super_user)return qk(Bg);throw new nd.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 nd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new nd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,h;if(f==null)m=s==="GET"||s==="HEAD"?404:204,CN.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f.status>0&&f.headers){let g=xH(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=rm(f.data,e,f)),f}else if(h=e.lastModified){yie[0]=h;let g=String.fromCharCode(34,(Yr[0]&63)+62,(Yr[0]>>6)+(Yr[1]<<2&63)+62,(Yr[1]>>4)+(Yr[2]<<4&63)+62,(Yr[2]>>2)+62,(Yr[3]&63)+62,(Yr[3]>>6)+(Yr[4]<<2&63)+62,(Yr[4]>>4)+(Yr[5]<<4&63)+62,(Yr[5]>>2)+62,(Yr[6]&63)+62,(Yr[6]>>6)+(Yr[7]<<2&63)+62,34),y=r["if-none-match"];y&&g==y?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),CN.lastModified&&i.setIfNone("Last-Modified",new Date(h).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:m,headers:i,body:void 0},_=e.loadedFromSource??f?.wasLoadedFromSource?.();return _!==void 0&&(p.wasCacheMiss=_,!_&&h&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||h))/1e3))),f!==void 0&&(p.body=rm(f,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(a){a.statusCode?a.statusCode===500?ai.warn(a):ai.info(a):ai.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=rm(a.contentType?a:jk(a),e,c),c}}function bie(e){CN=e,!Wk&&(Wk=!0,e.includeExpensiveRecordCountEstimates&&(xa.prototype.includeExpensiveRecordCountEstimates=!0),Bg=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Aie(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{_h++;let s=new $n;zk||(zk=!0,th(l=>{_h>0&&l.push({metric:"ws-connections",connections:_h,byThread:!0})}));let i;t.on("error",l=>{i=!0,ai.warn(l)});let a;t.on("message",o(function(u){a||(a=ho(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);gt(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{_h--,Kr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=Bg.getMatch(l,"ws");if(Kr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,gt(p=>({count:p.count,total:_h}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new Js(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await vt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let h;for(;!(h=await c.next()).done;){let p=await _a(h.value,r);t.send(p),gt(p.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(_=>t._socket.once("drain",_))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?ai.warn(l):ai.info(l):ai.error(l),t.close(Iie[l.statusCode]||1011,jk(l))}t.close()},e))}function PN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var ai,nd,jk,Yr,yie,CN,Yk,Wk,Bg,zk,_h,Iie,Qk=fe(()=>{po();Hi();ai=w(z()),nd=w(Ee());R_();pu();vc();nh();$k();Eh();y_();({errorToString:jk}=ai),Yr=new Uint8Array(8),yie=new Float64Array(Yr.buffer,0,1),CN={},Yk="openapi";o(Aie,"http");_h=0;o(bie,"start");Iie={401:3e3,403:3003};o(PN,"parseHeaderValue")});var LN=M((QLe,Xk)=>{var{recordAction:Hg,recordActionBinary:Jk}=(Hi(),v(gg)),Nie=require("fastify-plugin"),wie=200;Xk.exports=Nie(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),Hg(a,"duration",u,f,d),Jk(s.raw.statusCode<400,"success",u,f,d),Jk(1,"response_"+s.raw.statusCode,u,f,d);let m=wie;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{Hg(performance.now()-c,"transfer",u,f,d),Hg(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,Hg(m,"bytes-sent",u,f,d));let h=a.toFixed(3),p=s.getHeader("Server-Timing"),_=`db;dur=${h}`;s.header("Server-Timing",p?`${p}, ${_}`:_)}),r()},{name:"hdb-request-time"})});var eG=M((JLe,Zk)=>{var Oie=at(),Cie={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Zk.exports=function(e){return Oie.validateObject(e,Cie)}});var kg=M((XLe,tG)=>{"use strict";var Pie=(k(),v(K)).OPERATIONS_ENUM,DN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Pie.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};tG.exports=DN});var Th={};Ce(Th,{createTokens:()=>UN,getJWTRSAKeys:()=>Kg,refreshOperationToken:()=>xN,validateOperationToken:()=>BN,validateRefreshToken:()=>Yg});async function Kg(){if(Gg)return Gg;try{let e=gh.default.join(Sh.default.getHdbBasePath(),Cy),t=await qg.default.readFile(gh.default.join(e,Uf.JWT_PASSPHRASE_NAME),"utf8"),r=await qg.default.readFile(gh.default.join(e,Uf.JWT_PRIVATE_KEY_NAME),"utf8");return Gg={publicKey:await qg.default.readFile(gh.default.join(e,Uf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},Gg}catch(e){throw Vg.default.error(e),new ci.ClientError(id.NO_ENCRYPTION_KEYS,sd.INTERNAL_SERVER_ERROR)}}async function UN(e){let t=(0,MN.validateBySchema)(e,qi.default.object({username:qi.default.string().optional(),password:qi.default.string().optional(),role:qi.default.string().optional(),expires_in:qi.default.alternatives(qi.default.string(),qi.default.number()).optional()}));if(t)throw new ci.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,vN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw Vg.default.error(f),new ci.ClientError(id.INVALID_CREDENTIALS,sd.UNAUTHORIZED)}if(!r)throw new ci.ClientError(id.INVALID_CREDENTIALS,sd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await Kg(),c=await od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??oG,algorithm:$g,subject:ad.OPERATION}),l=await od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:Lie,algorithm:$g,subject:ad.REFRESH}),u=OI(l,Mr.SHA256);if((await(0,rG.update)(new nG.default(vf,uu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new ci.ClientError(id.REFRESH_TOKEN_SAVE_FAILED,sd.INTERNAL_SERVER_ERROR);return sG.default.signalUserChange(new iG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function xN(e){let t=(0,MN.validateBySchema)(e,qi.default.object({refresh_token:qi.default.string().required()}).required());if(t)throw new ci.ClientError(t.message);let{refresh_token:r}=e;await Yg(r);let n=await Kg(),s=await od.default.decode(r);return{operation_token:await od.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:oG,algorithm:$g,subject:ad.OPERATION})}}async function BN(e){return aG(e,ad.OPERATION)}async function Yg(e){return aG(e,ad.REFRESH)}async function aG(e,t){try{let r=await Kg(),n=await od.default.verify(e,r.publicKey,{algorithms:$g,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,vN.findAndValidateUser)(n.username,void 0,!1);if(t===ad.REFRESH&&!CI(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw Vg.default.warn(r),r?.name==="TokenExpiredError"?new ci.ClientError(id.TOKEN_EXPIRED,sd.FORBIDDEN):new ci.ClientError(id.INVALID_TOKEN,sd.UNAUTHORIZED)}}var od,qg,gh,qi,MN,ci,Vg,vN,rG,nG,sG,iG,Sh,sd,id,oG,Lie,$g,ad,Gg,cd=fe(()=>{od=w(require("jsonwebtoken")),qg=w(require("fs-extra")),gh=w(require("node:path")),qi=w(require("joi")),MN=w(at());k();ci=w(Ee()),Vg=w(z());cg();vN=w(Jn()),rG=w(Mn()),nG=w(kg()),sG=w(bo()),iG=w(ti()),Sh=w(ce()),{HTTP_STATUS_CODES:sd,AUTHENTICATION_ERROR_MSGS:id}=ci.hdbErrors;Sh.default.initSync();oG=Sh.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",Lie=Sh.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",$g="RS256",ad={OPERATION:"operation",REFRESH:"refresh"};o(Kg,"getJWTRSAKeys");o(UN,"createTokens");o(xN,"refreshOperationToken");o(BN,"validateOperationToken");o(Yg,"validateRefreshToken");o(aG,"validateToken")});var FN=M((nDe,uG)=>{"use strict";var Die=eG(),ld=require("passport"),Mie=require("passport-local").Strategy,vie=require("passport-http").BasicStrategy,Uie=require("util"),xie=Jn(),lG=Uie.callbackify(xie.findAndValidateUser),rDe=tn(),Bie=(k(),v(K)),cG=(cd(),v(Th));ld.use(new Mie(function(e,t,r){lG(e,t,r)}));ld.use(new vie(function(e,t,r){lG(e,t,r)}));ld.serializeUser(function(e,t){t(null,e)});ld.deserializeUser(function(e,t){t(null,e)});function Fie(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":ld.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===Bie.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?cG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):cG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:ld.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(Fie,"authorize");function Hie(e,t){let r=Die(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Hie,"checkPermissions");uG.exports={authorize:Fie,checkPermissions:Hie}});var Wg=M((iDe,dG)=>{"use strict";var kie=jn();dG.exports={writeTransaction:Gie};function Gie(e,t,r){return kie.writeTransaction(e,t,r)}o(Gie,"writeTransaction")});var pG=M((cDe,hG)=>{"use strict";var qie=on(),$ie=ei(),fG=z(),Vie=Mn(),aDe=Wg(),Kie=require("clone"),kN=require("alasql"),Yie=J_(),mG=require("util"),Wie=mG.promisify($ie.getTableSchema),zie=mG.promisify(qie.search),jie=(k(),v(K)),HN=ie();Yie(kN);hG.exports={update:Jie};var Qie="There was a problem performing this update. Please check the logs and try again.";async function Jie({statement:e,hdb_user:t}){let r=await Wie(e.table.databaseid,e.table.tableid),n=Xie(e.columns);HN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Kie(s),c=HN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=kN.parse(l).statements[0],d=await zie(u),f=Zie(n,d);return eoe(a,f,t)}o(Jie,"update");function Xie(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=kN.compile(`SELECT ${r.expression.toString()} AS [${jie.FUNC_VAL}] FROM ?`)}),t}catch(t){throw fG.error(t),new Error(Qie)}}o(Xie,"createUpdateRecord");function Zie(e,t){return HN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(Zie,"buildUpdateRecords");async function eoe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await Vie.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){fG.error(`Error delete new_attributes from update response: ${i}`)}return s}o(eoe,"updateRecords")});var _G=M((fDe,EG)=>{var toe=require("alasql"),roe=on(),noe=z(),soe=jn(),qN=require("util"),GN=ie(),ioe=(k(),v(K)),ooe=ei(),uDe=Wg(),dDe=Mn(),aoe="record",coe="successfully deleted",loe=qN.callbackify(moe),uoe=qN.promisify(roe.search),doe=qN.promisify(ooe.getTableSchema);EG.exports={convertDelete:loe};function foe(e){return`${e.deleted_hashes.length} ${aoe}${e.deleted_hashes.length===1?"":"s"} ${coe}`}o(foe,"generateReturnMessage");async function moe({statement:e,hdb_user:t}){let r=await doe(e.table.databaseid,e.table.tableid);GN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=GN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=toe.parse(a).statements[0],l={operation:ioe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await uoe(c);let u=await soe.deleteRecords(l);return GN.isEmptyOrZeroLength(u.message)&&(u.message=foe(u)),delete u.txn_time,u}catch(u){throw noe.error(u),u.hdb_code?u.message:u}}o(moe,"convertDelete")});var yG=M((hDe,RG)=>{"use strict";var hoe=Ca(),{hdbErrors:gG}=Ee(),{getDatabases:SG}=(Le(),v(ft));RG.exports={checkSchemaExists:TG,checkSchemaTableExists:poe,schemaDescribe:hoe};async function TG(e){if(!SG()[e])return gG.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(TG,"checkSchemaExists");async function poe(e,t){let r=await TG(e);if(r)return r;if(!SG()[e][t])return gG.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(poe,"checkSchemaTableExists")});var WN=M((SDe,vG)=>{"use strict";var{decode:Eoe}=require("msgpackr"),{isMainThread:EDe,parentPort:_De,threadId:gDe}=require("worker_threads"),Qg=lr(),ud=It(),KN=(k(),v(K)),ln=z(),VN=ce(),_oe=(k(),v(K)),{onMessageByType:goe}=st(),NG=xi(),{recordAction:AG,recordActionBinary:Soe}=(Hi(),v(gg)),{publishToStream:Toe}=Qg,{ConsumerEvents:bG}=require("nats"),Roe=on(),{promisify:yoe}=require("util"),{decodeBlobsWithWrites:Aoe}=(Ts(),v(EA)),wG=yoe(setTimeout),Jg=1e4,Xg,jg,boe,Ioe,OG,Rh=new Map,dd=new Map;vG.exports={initialize:CG,ingestConsumer:YN,setSubscription:Noe,setIgnoreOrigin:Coe,getDatabaseSubscriptions:Ooe,updateConsumer:PG};async function CG(){goe(KN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await PG(n)}),OG=!0,ln.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Qg.getNATSReferences();Xg=e,jg=e.info.server_name,boe=t,Ioe=r}o(CG,"initialize");async function PG(e){if(e.status==="start"){let{js:t,jsm:r}=await LG(e.node_domain_name);YN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Rh.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?.(),Rh.set(e.stream_name+e.node_domain_name,"close")),dd.get(e.node_domain_name)==="failed"&&dd.set(e.node_domain_name,"close")}}o(PG,"updateConsumer");var Zg=new Map;function Noe(e,t,r){let n=Zg.get(e);n||Zg.set(e,n=new Map),n.set(t,r),OG||CG().then(woe)}o(Noe,"setSubscription");async function woe(){let e=await Roe.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ud.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await LG(r),!n))break;let{schema:a,table:c}=i,l=NG.createNatsTableStreamName(a,c);YN(l,n,s,r)}}}o(woe,"accessConsumers");async function LG(e){let t,r,n=1;for(;!r;)try{t=await Xg.jetstream({domain:e}),r=await Xg.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(dd.get(e)==="close")break;dd.set(e,"failed"),n%10===1&&ln.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Jg?n++*100:Jg;await wG(i)}return{js:t,jsm:r}}o(LG,"connectToRemoteJS");function Ooe(){return Zg}o(Ooe,"getDatabaseSubscriptions");var DG;function Coe(e){DG=e}o(Coe,"setIgnoreOrigin");var MG=100,IG=new Array(MG),zg=0;async function YN(e,t,r,n){let{connection:s}=await Qg.getNATSReferences();Xg=s,jg=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,jg),ln.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(dd.get(n)==="close")break;a%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 Qg.createConsumer(r,e,jg,new Date(Date.now()).toISOString()));let d=a++*100<Jg?a++*100:Jg;await wG(d)}let c=!1,l;for(;!c;){if(Rh.get(e+n)==="close"||dd.get(n)==="close"){Rh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:VN.get(KN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Rh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===bG.ConsumerDeleted&&(await l.close(),c=!0),d.type===bG.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 IG[zg],IG[zg]=Poe(d).catch(f=>{ln.error(f)}),++zg>=MG&&(zg=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)}}}o(YN,"ingestConsumer");async function Poe(e){let t;await Aoe(()=>{t=Eoe(e.data)}),AG(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=VN.get(KN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ud.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ud.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ud.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!DG),Soe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ud.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:h}=t;ln.trace("processing message:",a,c,u,(d?"records: "+d.map(P=>P?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),ln.trace(`messageProcessor nats msg id: ${e.headers.get(ud.MSG_HEADERS.NATS_MSG_ID)}`);let p;d||(d=f);let _=new Promise(P=>p=P),{timestamp:g,user:y,node_name:T}=m||{},R=Zg.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=p,R.send(t);else if(d.length===1&&!l)R.send({type:$N(a),value:d[0],id:f?.[0],expiresAt:h,timestamp:g,table:u,onCommit:p,user:y,nodeName:T});else{let P=d.map((Y,te)=>({type:$N(a),value:Y,expiresAt:h,id:f?.[te],table:u}));for(;l;)P.push({type:$N(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:P,table:u,timestamp:g,onCommit:p,user:y,nodeName:T})}VN.get(_oe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Toe(e.subject.split(".").slice(0,-1).join("."),NG.createNatsTableStreamName(c,u),e.headers,e.data),await _;let I=Date.now()-g;g&&AG(I,"replication-latency",e.subject,a,"ingest")}catch(a){ln.error(a)}e.ack()}o(Poe,"messageProcessor");function $N(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o($N,"convertOperation")});var lr=M((NDe,JG)=>{"use strict";var xr=ce();xr.initSync();var Loe=require("fs-extra"),Doe=require("semver"),bh=require("path"),{monotonicFactory:Moe}=require("ulidx"),xG=Moe(),voe=require("util"),BG=require("child_process"),Uoe=voe.promisify(BG.exec),xoe=BG.spawn,Wr=It(),Qe=(k(),v(K)),{packageJson:Boe,PACKAGE_ROOT:Foe}=Rt(),eS=ie(),li=z(),tS=xi(),Hoe=Wg(),yh=yt(),{broadcast:koe,onMessageByType:Goe,getWorkerIndex:qoe}=st(),{isMainThread:FG}=require("worker_threads"),{Encoder:$oe,decode:JN}=require("msgpackr"),HG=new $oe,{isEmpty:yl}=eS,kG=Jn(),RDe=48*36e11;FG&&Goe(Qe.ITC_EVENT_TYPES.RESTART,()=>{un=void 0,Rl=void 0});var{connect:Voe,StorageType:Koe,RetentionPolicy:Yoe,AckPolicy:XN,DeliverPolicy:ZN,DiscardPolicy:Woe,NatsConnection:yDe,JetStreamManager:ADe,JetStreamClient:bDe,StringCodec:IDe,JSONCodec:zoe,createInbox:ew,headers:joe,ErrorCode:UG}=require("nats"),{recordAction:Qoe}=(Hi(),v(gg)),{encodeBlobsAsBuffers:Joe}=(Ts(),v(EA)),GG=zoe(),Xoe="clustering",Zoe=Boe.engines[Wr.NATS_SERVER_NAME],eae=bh.join(Foe,"dependencies"),QN=bh.join(eae,`${process.platform}-${process.arch}`,Wr.NATS_BINARY_NAME),zN,jN,Ah,Sl,Tl;JG.exports={runCommand:qG,checkNATSServerInstalled:tae,createConnection:tw,getConnection:Ih,getJetStreamManager:Nh,getJetStream:VG,getNATSReferences:$i,getServerList:nae,createLocalStream:rw,listStreams:KG,deleteLocalStream:sae,getServerConfig:fd,listRemoteStreams:iae,viewStream:oae,viewStreamIterator:aae,publishToStream:cae,request:dae,reloadNATS:nw,reloadNATSHub:fae,reloadNATSLeaf:mae,extractServerName:uae,requestErrorHandler:hae,createLocalTableStream:jG,createTableStreams:_ae,purgeTableStream:QG,purgeSchemaTableStreams:gae,getStreamInfo:Sae,updateLocalStreams:Rae,closeConnection:rae,getJsmServerName:rS,addNatsMsgHeader:YG,clearClientCache:$G,updateRemoteConsumer:pae,createConsumer:WG,updateConsumerIterator:Eae};async function qG(e,t=void 0){let{stdout:r,stderr:n}=await Uoe(e,{cwd:t});if(n)throw new Error(n.replace(`
13
+ `},"serialize"),compressible:!1,q:.8});nn.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()}});Nv={type:"application/json",serializeStream:Xf,serialize:Zf,deserialize:zZ,q:.5};nn.set("*/*",Nv);nn.set("",Nv);o(zZ,"tryJSONParse");o(tm,"registerContentHandlers");jZ=(0,bv.default)(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:a,type:c}=YE(n.raw);s.type(c),s.serializer(function(l){let u;if(typeof l=="object"&&l&&(l[Symbol.iterator]||l[Symbol.asyncIterator])&&a.serializeStream){if(l.mapError){let d=l.getColumns;l=l.mapError(f=>(f.toJSON=()=>({error:f.name,message:f.message,...f.partialObject}),f)),l.getColumns=d}u=a.serializeStream}else u=a.serialize;return u(l,{headers:{set:o((d,f)=>{s.header(d,f)},"set")}})})}),r()},{name:"content-type-negotiation"});o(YE,"findBestSerializer");Sv=cA.default.get(U.HTTP_COMPRESSIONTHRESHOLD);o(rm,"serialize");o(ga,"serializeMessage");o(fA,"asyncSerialization");o(mA,"hasAsyncSerialization");o(QZ,"streamToBuffer");JZ=["ascii","utf8","utf-8","utf16le","utf-16le","ucs2","ucs-2","base64","base64url","latin1","binary","hex"];o(XZ,"isBufferEncoding");o(ZZ,"parseContentType");o(ho,"getDeserializer");o(e6,"deserializerUnknownType");o(t6,"transformIterable");o(KE,"toCsvStream")});var gA={};Ce(gA,{Blob:()=>Ss,blobsWereEncoded:()=>kc,databasePaths:()=>pA,decodeBlobsWithWrites:()=>t_,decodeFromDatabase:()=>Gc,decodeWithBlobCallback:()=>r_,deleteBlob:()=>XE,deleteBlobsInObject:()=>Sa,deleteRootBlobPathsForDB:()=>_A,encodeBlobsAsBuffers:()=>d6,encodeBlobsWithFilePath:()=>e_,findBlobsInObject:()=>_u,getFileId:()=>ZE,getFilePathForBlob:()=>Bv,getRootBlobPathsForDB:()=>om,setDeletionDelay:()=>i6});function vv(){}function XE(e){let t=Bv(e);t&&setTimeout(()=>{(0,Ze.unlink)(t,r=>{r&&Eo.default.debug?.("Error trying to remove blob file",r)})},Uv)}function i6(e){Uv=e}function xv(e){let t=bn.get(e);if(!t)t={storageIndex:0,fileId:null,store:In},bn.set(e,t);else{if(t.saving)return t;t.store=In}return a6(t),t.source?hA(e,t.source,t):t.contentBuffer?o6(e,t):hA(e,sm.Readable.from(e.stream()),t),t}function hA(e,t,r){let{filePath:n,fileId:s,store:i,compress:a,flush:c}=r;return r.saving=new Promise((l,u)=>{let d=s+":blob";if(!i.attemptLock(d,0))throw new Error(`Unable to get lock for blob file ${s}`);let f=(0,Ze.createWriteStream)(n,{autoClose:!1,flags:"w"});if(t.errored){let g=Buffer.from(t.errored.toString());f.end(Buffer.concat([p(BigInt(g.length)+0xff000000000000n),g]));return}let m=!1;e.size!==void 0&&(f.write(p(e.size)),m=!0);let h;a?(m||f.write(n6),h=(0,QE.createDeflate)(),t.pipe(h).pipe(f)):(m||f.write(r6),t.pipe(f)),t.on("error",_);function p(g){let y=BigInt(g),T=new Uint8Array(Rr),R=new DataView(T.buffer);return y|=BigInt(a?EA:Mv)<<48n,R.setBigInt64(0,y),T}o(p,"createHeader");function _(g){i.unlock(d,0);let y=f.fd;g?(y&&(0,Ze.close)(y),u(g)):c?(0,Ze.fdatasync)(y,T=>{T&&u(T),l(),(0,Ze.close)(y)}):(l(),(0,Ze.close)(y))}o(_,"finished"),f.on("error",_).on("finish",()=>{if(m)_();else{let g=h?h.bytesWritten:f.bytesWritten-Rr;e.size=g,(0,Ze.write)(f.fd,p(g),0,Rr,0,_)}})}),e}function ZE(e){return bn.get(e)?.fileId}function Bv(e){let t=bn.get(e);return t?.fileId&&im(t)}function om(e){if(!e)throw new Error("No store specified, can not determine blob storage path");let t=pA.get(e);if(!t){if(!e.databaseName)return Eo.default.warn?.("No database name specified, can not determine blob storage path"),[];let r=(0,JE.get)(U.STORAGE_BLOBPATHS);r?t=r.map(n=>(0,go.join)(n,e.databaseName)):t=[(0,go.join)((0,JE.getHdbBasePath)(),"blobs",e.databaseName)],pA.set(e,t)}return t}async function _A(e){let t=om(e);t&&await Promise.all(t.map(r=>Fv(r)))}async function Fv(e){if((0,Ze.existsSync)(e)){for(let t of await(0,js.readdir)(e,{withFileTypes:!0}))if(t.isDirectory())await Fv((0,go.join)(e,t.name));else try{await(0,js.unlink)((0,go.join)(e,t.name))}catch(r){Eo.default.warn?.("Error deleting file",r)}try{await(0,js.rmdir)(e)}catch(t){Eo.default.warn?.("Error deleting directory",t)}}}function im({storageIndex:e,fileId:t,store:r}){let n=om(r);return(0,go.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 o6(e,t){let r=t.contentBuffer,n=r.length;if(!(n<Dv))return e.size=n,hA(e,sm.Readable.from([r]),t)}function a6(e){let t=om(e.store),r=c6(),n=t?.length>1?l6(t,r):0,s=r.toString(16);e.storageIndex=n,e.fileId=s;let i=im(e),a=(0,go.dirname)(i);(0,Ze.existsSync)(a)||(0,Lv.ensureDirSync)(a),e.filePath=i}function c6(){let e=Pv.get(In);if(!e){let t=0,r=om(In);for(let n of r){let s=0;for(let i=0;i<3;i++){s=s*4096;let a=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>a&&(a=l)}s+=a,n=(0,go.join)(n,a.toString(16))}t=Math.max(t,s)}e=new BigInt64Array([BigInt(t)+1n]),e=new BigInt64Array(In.getUserSharedBuffer("blob-file-id",e.buffer)),Pv.set(In,e)}return Number(Atomics.add(e,0,1n))}function l6(e,t){let r=Date.now();if(!e.frequencyTable){e.lastUpdated=0;let s=new Array(jE);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,u6(e)),e.frequencyTable[t%jE]}async function u6(e){if(!js.statfs)return;let t=await Promise.all(e.map(async(s,i)=>{let a=await(0,js.statfs)(s),c=a.bavail*a.bsize;return Math.pow(c,.8)})),r=new Array(jE),n=t.map(s=>1/s);for(let s=0;s<jE;s++){let i=1/0,a=0;for(let c=0;c<n.length;c++)n[c]<i&&(a=c,i=n[c]);n[a]+=1/t[a],r[s]=a}e.frequencyTable=r}function e_(e,t,r){Eu=t,In=r,kc=!1;try{return e()}finally{Eu=void 0,In=void 0}}function d6(e){Gr=[];let t;try{t=e()}catch(n){throw Gr=void 0,n}let r=Gr.length<2?Gr[0]:Promise.all(Gr);return Gr=void 0,r?r.then(()=>e()):t}function t_(e,t){try{Gr=[],Hc=t,e()}catch(n){throw Hc=void 0,Gr=void 0,n}Hc=void 0;let r=Gr.length<2?Gr[0]:Promise.all(Gr);return Gr=void 0,r}function r_(e,t,r){In=r;try{return Hc=t,e()}finally{Hc=void 0}}function Gc(e,t){return In=t,e()}function Sa(e){_u(e,t=>{XE(t)})}function _u(e,t){if(e instanceof Ss)t(e);else if(Array.isArray(e))for(let r of e)typeof r=="object"&&r&&_u(r,t);else if(e&&typeof e=="object"&&!e[Symbol.iterator])for(let r in e){let n=e[r];typeof n=="object"&&n&&_u(e[r],t)}}function f6(){return class{static{o(this,"Blob")}content;constructor(t){this.content=t[0]}stream(){return new ReadableStream({start(t){t.enqueue(this.content),t.close()}})}text(){return Promise.resolve(this.content.toString())}arrayBuffer(){return Promise.resolve(this.content.buffer)}get size(){return this.content.length}slice(){throw new Error("Not implemented")}bytes(){return Promise.resolve(this.content)}get type(){return""}}}var _o,js,Ze,QE,sm,Lv,JE,go,Eo,Dv,Rr,Mv,EA,Ov,r6,n6,Cv,bn,Hc,Ss,Eu,Gr,In,kc,nm,WE,s6,zE,Uv,pA,Pv,jE,Ts=fe(()=>{_o=require("msgpackr"),js=require("node:fs/promises"),Ze=require("node:fs"),QE=require("node:zlib"),sm=require("node:stream"),Lv=require("fs-extra"),JE=w(ce());k();go=require("path"),Eo=w(Ni());po();Dv=8192,Rr=8,Mv=0,EA=1,Ov=255,r6=new Uint8Array([0,Mv,255,255,255,255,255,255]),n6=new Uint8Array([0,EA,255,255,255,255,255,255]),Cv=0xffffffffffff,bn=new WeakMap,Ss=global.Blob||f6(),kc=!1,nm=new Uint8Array(8),WE=new DataView(nm.buffer),s6=6e4;o(vv,"InstanceOfBlobWithNoConstructor");vv.prototype=Ss.prototype;zE=class e extends vv{static{o(this,"FileBackedBlob")}type="";size;#e;#t;constructor(t){super(),t?.type&&(this.type=t.type),t?.size!=null&&(this.size=t.size)}on(t,r){if(t==="error")this.#e??=[],this.#e.push(r);else if(t==="size")this.#t??=[],this.#t.push(r);else throw new Error("Only 'error' and 'size' events are supported")}toJSON(){if(this.type?.startsWith("text")){let t=bn.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):(mA()&&fA(this.bytes().then(a=>t.contentBuffer=a)),`[blob: ${this.type}, ${this.size} bytes]`))}return{description:"Blobs that are not of type text/* can not be directly serialized as JSON, use as the body of a response or convert to another type"}}async text(){return(await this.bytes()).toString()}bytes(){let t=bn.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=im(t),a,c=o(async()=>{let l,u=Rr;try{if(l=await(0,js.readFile)(i),l.length>=Rr){l.copy(nm,0,0,Rr);let f=WE.getBigUint64(0);if(Number(f>>48n)===Ov)throw new Error("Error in blob: "+buffer.subarray(Rr));if(u=Number(f&0xffffffffffffn),u<n&&(u=n),u<Cv&&(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,h=t.fileId+":blob";if(a)throw new Error("Incomplete blob");return new Promise((p,_)=>{if(m.attemptLock(h,0,()=>(a=!0,m.unlock(h,0),p(c()))))return a=!0,m.unlock(h,0),p(c())})}return(n!=null||r!=null)&&(f=f.subarray(r??0,n??f.length)),f}return o(d,"checkCompletion"),l[1]===EA?new Promise((f,m)=>{(0,QE.deflate)(l.subarray(Rr),(h,p)=>{h?m(h):f(d(p))})}):d(l.subarray(Rr))},"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=bn.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(_){_.enqueue(r),_.close()}});let i=im(t),a,c=0,l=0,u,d,f,m=!1,h=this;return new ReadableStream({start(){let _=1e3,g=o((y,T)=>{(0,Ze.open)(i,"r",(R,I)=>{if(R){if(R.code==="ENOENT"&&f!==!1&&(Eo.default.debug?.("File does not exist yet, waiting for it to be created",i,_),_-- >0))return setTimeout(()=>{p(),g(y,T)},20).unref();T(R),h.#e?.forEach(P=>P(R))}else a=I,y(I)})},"openFile");return new Promise(g)},pull:o(_=>{let g=0,y=100;return new Promise(o(function T(R,I){function P(te){(0,Ze.close)(a),clearTimeout(d),u&&u.close(),I(te),h.#e?.forEach(x=>x(te))}o(P,"onError");let Y=Buffer.allocUnsafe(262144);(0,Ze.read)(a,Y,0,Y.length,c,(te,x,$)=>{if(l+=x,te)return P(te);if(c===0){if(x<Rr){y-- >0&&f!==!1?(p(),Eo.default.debug?.("File was empty, waiting for data to be written",i,y),setTimeout(()=>T(R,I),20).unref()):(Eo.default.debug?.("File was empty, throwing error",i,y),I(new Error(`Blob ${t.fileId} was empty`)));return}$.copy(nm,0,0,Rr);let j=WE.getBigUint64(0);if(Number(j>>48n)===Ov)return P(new Error("Error in blob: "+$.subarray(Rr)));if(g=Number(j&0xffffffffffffn),g<Cv&&h.size!==g&&(h.size=g,h.#t))for(let V of h.#t)V(g);$=$.subarray(Rr,x),l-=Rr}else if(x===0){let j=Buffer.allocUnsafe(8);return(0,Ze.read)(a,j,0,Rr,0,V=>{if(V)return P(V);if(nm.set(j),g=Number(WE.getBigUint64(0)&0xffffffffffffn),g>l){p()?u?d=setTimeout(()=>{P(new Error("File read timed out"))},s6).unref():(u=(0,Ze.watch)(i,{persistent:!1},()=>{u.close(),u=null,d&&(clearTimeout(d),d=null,T(R,I))}),T(R,I)):m?P(new Error("Blob is incomplete")):(m=!0,T(R,I));return}(0,Ze.close)(a),_.close(),R()})}else $=$.subarray(0,x);if(n!==void 0||s!==void 0){if(n&&l<n)return c+=x,T(R,I);s&&l>=s&&(l>s&&($=$.subarray(0,s-c)),l=g=s),n&&n>c&&($=$.subarray(n-c))}c+=x;try{_.enqueue($)}catch(j){return Eo.default.debug?.("Error enqueuing chunk",j),R()}l===g&&((0,Ze.close)(a),_.close()),R()})},"readMore"))},"pull"),cancel(){(0,Ze.close)(a),clearTimeout(d),u&&u.close()}});function p(){if(f===void 0){let _=t.store,g=t.fileId+":blob";f=!_.attemptLock(g,0,()=>{f=!1,_.unlock(g,0)}),f||_.unlock(g,0)}return f}}slice(t,r,n){let s=bn.get(this),i=new e(n&&{type:n});if(s?.fileId){let a={...s,start:t,end:r};bn.set(i,a),this.size!=null&&(i.size=(r==null?this.size:Math.min(r,this.size))-(t??0))}else if(s?.contentBuffer&&!s.storageBuffer){let a={...s,contentBuffer:s.contentBuffer.subarray(t,r)};bn.set(i,a),i.size=(r??this.size)-t}else throw new Error("Can not slice a streaming blob that is not backed by a file");return i}save(t){if(In=t?.primaryStore?.rootStore,!In)throw new Error("No target table specified");return xv(this).saving??Promise.resolve()}},Uv=500;o(XE,"deleteBlob");o(i6,"setDeletionDelay");global.createBlob=function(e,t){let r=new zE(t),n={storageIndex:0,fileId:null,flush:t?.flush,compress:t?.compress};if(bn.set(r,n),e instanceof Uint8Array)r.size=e.length,n.contentBuffer=e;else if(e instanceof sm.Readable)n.source=e;else if(typeof e=="string")n.contentBuffer=Buffer.from(e);else if(e?.[Symbol.asyncIterator]||e?.[Symbol.iterator])n.source=sm.Readable.from(e);else throw new Error("Invalid source type");return r};o(xv,"saveBlob");o(hA,"writeBlobWithStream");o(ZE,"getFileId");o(Bv,"getFilePathForBlob");pA=new Map;o(om,"getRootBlobPathsForDB");o(_A,"deleteRootBlobPathsForDB");o(Fv,"rimrafSteadily");o(im,"getFilePath");o(o6,"writeBlobWithBuffer");o(a6,"generateFilePath");Pv=new Map;o(c6,"getNextFileId");jE=128;o(l6,"getNextStorageIndex");o(u6,"createFrequencyTableForStoragePaths");o(e_,"encodeBlobsWithFilePath");o(d6,"encodeBlobsAsBuffers");o(t_,"decodeBlobsWithWrites");o(r_,"decodeWithBlobCallback");o(Gc,"decodeFromDatabase");o(Sa,"deleteBlobsInObject");o(_u,"findBlobsInObject");(0,_o.addExtension)({Class:Ss,type:11,unpack:o(function(e){let t=(0,_o.unpack)(e),r=new zE;if(Object.assign(r,t[0]),typeof t[1]!="object"){if(bn.set(r,{storageIndex:t[1],fileId:t[2],store:In}),Hc)return Hc(r)??r;if(!In)throw new Error("No store specified, cannot load blob from storage")}else bn.set(r,{storageIndex:0,fileId:null,storageBuffer:e,contentBuffer:t[1]}),r.size=t[1]?.length;return r},"unpack"),pack:o(function(e){let t=bn.get(e);if(Eu!==void 0&&(kc=!0,t?.recordId!==void 0&&t.recordId!==Eu))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<Dv)return r.size=t.contentBuffer.length,(0,_o.pack)([r,t.contentBuffer])}if(Eu!==void 0){if(t=xv(e),!t.fileId)throw new Error("Unable to save blob without file id");return t.recordId=Eu,(0,_o.pack)([r,t.storageIndex,t.fileId])}if(t)try{let n=(0,Ze.readFileSync)(im(t));if(n.length>=Rr&&(n.copy(nm,0,0,Rr),Number(WE.getBigUint64(0)&0xffffffffffffn)===n.length-Rr))return Buffer.concat([(0,_o.pack)([r]),n]);if(Gr)Gr.push(e.bytes());else throw new Error("Incomplete blob");return Buffer.alloc(0)}catch(n){if(n.code==="ENOENT"&&Gr)return Gr.push(e.bytes()),Buffer.alloc(0);throw n}else throw new Error("Blob has no storage info or buffer attached to it")},"pack")});(0,_o.addExtension)({Class:Promise,type:12,pack(){throw new Error("Cannot encode a promise")}});o(f6,"polyfillBlob")});var $v={};Ce($v,{onStorageReclamation:()=>am,runReclamationHandlers:()=>yA,setAvailableSpaceRatioGetter:()=>h6});function am(e,t,r){(r||(0,s_.getWorkerIndex)()===(0,s_.getWorkerCount)()-1)&&(n_.has(e)||n_.set(e,[]),n_.get(e).push({priority:0,handler:t}),RA||(RA=setTimeout(yA,kv).unref()))}async function yA(){for(let[e,t]of n_)try{let r=await qv(e),n=m6/r;for(let s of t){let{priority:i,handler:a}=s;if(s.priority=n,n>1||i>1){let c=a(n>1?n:0);c&&(TA.default.info?.(`Running storage reclamation handler for ${e} with priority ${n}`),await c)}}}catch(r){TA.default.error?.("Error running storage reclamation handlers",r)}RA=setTimeout(yA,kv).unref()}function h6(e){qv=e??Gv}var SA,s_,TA,i_,Hv,n_,m6,kv,RA,Gv,qv,o_=fe(()=>{SA=require("node:fs/promises"),s_=w(st()),TA=w(Ni());k();i_=w(ce()),Hv=w(ie());i_.default.initSync();n_=new Map,m6=i_.default.get(U.STORAGE_RECLAMATION_THRESHOLD)??.4,kv=(0,Hv.convertToMS)(i_.default.get(U.STORAGE_RECLAMATION_INTERVAL))||36e5;o(am,"onStorageReclamation");Gv=o(async e=>{if(SA.statfs){let t=await(0,SA.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"),qv=Gv;o(yA,"runReclamationHandlers");o(h6,"setAvailableSpaceRatioGetter")});var rU={};Ce(rU,{ACTION_32_BIT:()=>d_,ACTION_64_BIT:()=>_6,AUDIT_STORE_OPTIONS:()=>um,Decoder:()=>$c,HAS_BLOBS:()=>Nn,HAS_CURRENT_RESIDENCY_ID:()=>Vc,HAS_EXPIRATION_EXTENDED_TYPE:()=>mm,HAS_ORIGINATING_OPERATION:()=>fm,HAS_PREVIOUS_RESIDENCY_ID:()=>Kc,REMOTE_SEQUENCE_UPDATE:()=>f_,createAuditEntry:()=>Su,getLastRemoved:()=>OA,openAuditStore:()=>l_,readAuditEntry:()=>Ut,removeAuditEntry:()=>u_,setAuditRetention:()=>E6,transactionKeyEncoder:()=>Xv});function l_(e){let t=e.auditStore=e.openDB(AA.AUDIT_STORE_NAME,{create:!1,...um});t||(t=e.auditStore=e.openDB(AA.AUDIT_STORE_NAME,um),Kv(t,1)),t.rootStore=e,t.tableStores=[];let r=[];t.addDeleteRemovalCallback=function(l,u,d){return r[l]=d,t.tableStores[l]=u,t.deleteCallbacks=r,{remove(){delete r[l]}}};let n=null,s,i=0,a=IA;am(t.env.path,l=>{if(i=l,l)return c(100)});function c(l){l&&(a=l),clearTimeout(n);let u=new Promise(d=>{n=setTimeout(async()=>{if(await s,s=u,t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let f=0,m,h;try{for(let{key:p,value:_}of t.getRange({start:1,snapshot:!1,end:Date.now()-bA/(1+i*i)})){try{m=u_(t,p,_)}catch(g){gu.warn("Error removing audit entry",g)}if(h=p,await new Promise(setImmediate),++f>=p6){a=10;break}}await m}finally{f===0?a=Math.min(a<<1,bA/10):(Kv(t,h),a>100&&(a=a>>1)),d(void 0),c()}},a).unref()});return u}if(o(c,"scheduleAuditCleanup"),t.scheduleAuditCleanup=c,(0,lm.getWorkerIndex)()===(0,lm.getWorkerCount)()-1&&c(),(0,lm.getWorkerIndex)()===0&&!Vv)for(let l of t.getKeys({reverse:!0,limit:1}))l>Date.now()&&(Vv=!0,gu.error("The current time is before the last recorded entry in the audit log. Time reversal can undermine the integrity of data tracking and certificate validation and the time must be corrected."));return t}function u_(e,t,r){let n=g6(r),s;if(n&Nn){s=Ut(r);let i=e.tableStores[s.tableId],a=i?.getEntry(s.recordId);(!a||a.version!==s.version||!a.value)&&Gc(()=>Sa(s.getValue(i)),i.rootStore)}if((n&15)===NA){s=s||Ut(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 Kv(e,t){wA[0]=t,e.put(Symbol.for("last-removed"),Zv)}function OA(e){let t=e.get(Symbol.for("last-removed"));if(t)return Zv.set(t),wA[0]}function E6(e,t=IA){bA=e,IA=t}function Su(e,t,r,n,s,i,a,c,l,u,d,f,m){let h=eU[a];if(!h)throw new Error(`Invalid audit entry type ${a}`);let p=1;if(n&&(n>1?Ta.setFloat64(0,n):Rs.set(CA),p=9),l){if(l&255)throw new Error("Illegal extended type");p+=3}y(s),y(t),g(r),Ta.setFloat64(p,e),p+=8,l&Vc&&y(u),l&Kc&&y(d),l&mm&&(Ta.setFloat64(p,f),p+=8),l&fm&&y(tU[m]),i?g(i):Rs[p++]=0,l?Ta.setUint32(n?8:0,h|l|3221225472):Rs[n?8:0]=h;let _=Rs.subarray(0,p);if(c)return Buffer.concat([_,c]);return _;function g(T){let R=p;p+=1,p=(0,qc.writeKey)(T,Rs,p);let I=p-R-1;I>127?I>16383?(gu.error("Key or username was too large for audit entry",T),p=R+1,Rs[R]=0):(Rs.copyWithin(R+2,R+1,p),Ta.setUint16(R,I|32768),p++):Rs[R]=I}function y(T){T<128?Rs[p++]=T:T<16384?(Ta.setUint16(p,T|32768),p+=2):T<1056964608?(Ta.setUint32(p,T|3221225472),p+=4):(Rs[p]=255,Ta.setUint32(p+1,T),p+=5)}}function g6(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 $c(e.buffer,e.byteOffset,e.byteLength));return n.position=t,n.readInt()}function Ut(e,t=0,r=void 0){try{let n=e.dataView||(e.dataView=new $c(e.buffer,e.byteOffset,e.byteLength));n.position=t;let s;e[n.position]==66&&(s=n.readFloat64());let i=n.readInt(),a=n.readInt(),c=n.readInt(),l=n.readInt(),u=n.position,d=n.position+=l,f=n.readFloat64(),m,h,p,_;if(i&Vc&&(m=n.readInt()),i&Kc&&(h=n.readInt()),i&mm&&(p=n.readFloat64()),i&fm){let R=n.readInt();_=tU[R]}l=n.readInt();let g=n.position,y=n.position+=l,T;return{type:eU[i&7],tableId:c,nodeId:a,get recordId(){return(0,qc.readKey)(e,u,d)},getBinaryRecordId(){return e.subarray(u,d)},version:f,previousLocalTime:s,get user(){return y>g?(0,qc.readKey)(e,g,y):void 0},get encoded(){return t?e.subarray(t,r):e},getValue(R,I,P){if(i&a_||i&cm&&!I)return T||(T=Gc(()=>R.decoder.decode(e.subarray(n.position,r)),R.rootStore)),T;if(i&cm&&P)return rA(R.getEntry(this.recordId),P,R)},getBinaryValue(){return i&(a_|cm)?e.subarray(n.position,r):void 0},extendedType:i,residencyId:m,previousResidencyId:h,expiresAt:p,originatingOperation:_}}catch(n){return gu.error("Reading audit entry error",n,e),{}}}var qc,c_,AA,lm,Jv,gu,Rs,Ta,Xv,um,bA,p6,wA,Zv,IA,Vv,a_,cm,Yv,NA,Wv,zv,jv,Qv,d_,_6,f_,Vc,Kc,fm,mm,Nn,eU,tU,$c,uo=fe(()=>{qc=require("ordered-binary"),c_=w(ce()),AA=w(kt());k();lm=w(st()),Jv=w(ie());Yc();gu=w(z());qE();Ts();o_();(0,c_.initSync)();Rs=Buffer.alloc(2816),Ta=new DataView(Rs.buffer,Rs.byteOffset,2816),Xv={writeKey(e,t,r){return e===dm?(t.set(dm,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,qc.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,qc.readKey)(e,t,r)}},um={encoding:"binary",keyEncoder:Xv},bA=(0,Jv.convertToMS)((0,c_.get)(U.LOGGING_AUDITRETENTION))||86400*3,p6=1e3,wA=new Float64Array(1),Zv=new Uint8Array(wA.buffer),IA=1e4,Vv=!1;o(l_,"openAuditStore");o(u_,"removeAuditEntry");o(Kv,"updateLastRemoved");o(OA,"getLastRemoved");o(E6,"setAuditRetention");a_=16,cm=32,Yv=1,NA=2,Wv=3,zv=4,jv=5,Qv=6,d_=14,_6=15,f_=11,Vc=512,Kc=1024,fm=2048,mm=4096,Nn=8192,eU={put:Yv|a_,[Yv]:"put",delete:NA,[NA]:"delete",message:Wv|a_,[Wv]:"message",invalidate:zv|cm,[zv]:"invalidate",patch:jv|cm,[jv]:"patch",relocate:Qv,[Qv]:"relocate"},tU={insert:1,update:2,upsert:3,1:"insert",2:"update",3:"upsert"};o(Su,"createAuditEntry");o(g6,"readAction");o(Ut,"readAuditEntry");$c=class extends DataView{static{o(this,"Decoder")}position=0;readInt(){let t;return t=this.getUint8(this.position++),t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch(t){throw t.message=`Error reading float64: ${t.message} at position ${this.position}`,t}}}});var aU={};Ce(aU,{ENTRY:()=>T6,HAS_EXPIRATION:()=>p_,HAS_RESIDENCY_ID:()=>UA,HAS_STRUCTURE_UPDATE:()=>E_,LAST_TIMESTAMP_PLACEHOLDER:()=>dm,LOCAL_TIMESTAMP:()=>S6,METADATA:()=>Ru,NEW_TIMESTAMP_PLACEHOLDER:()=>sU,NO_TIMESTAMP:()=>PA,PENDING_LOCAL_TIME:()=>xA,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>CA,RecordEncoder:()=>vA,TIMESTAMP_ASSIGN_LAST:()=>y6,TIMESTAMP_ASSIGN_NEW:()=>iU,TIMESTAMP_ASSIGN_PREVIOUS:()=>oU,TIMESTAMP_PLACEHOLDER:()=>m_,TIMESTAMP_RECORD_PREVIOUS:()=>LA,entryMap:()=>Ra,handleLocalTimeForGets:()=>__,lastMetadata:()=>ct,recordUpdater:()=>BA,removeEntry:()=>zc});function b6(){return Em[0]=Em[0]^64,R6.getFloat64(0)}function __(e,t){let r=e.getEntry;e.readCount=0,e.cachePuts=!1,e.rootStore=t,e.encoder.rootStore=t,e.getEntry=function(a,c){e.readCount++,ct=null;let l=r.call(this,a,c);return l&&(ct&&(l.metadataFlags=ct[Ru],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l.value&&Ra.set(l.value,l),l.key=a),l};let n=e.get;e.get=function(a,c){ct=null;let l=n.call(this,a,c);return ct&&l&&(Ra.set(l,ct),ct=null),l};let s=e.getRange;e.getRange=function(a){let c=s.call(this,a);return a.valuesForKey?c.map(l=>l?.value):a.values===!1||a.onlyCount?c:c.map(l=>(ct&&(l.metadataFlags=ct[Ru],l.localTime=ct.localTime,l.residencyId=ct.residencyId,ct.expiresAt>=0&&(l.expiresAt=ct.expiresAt),ct=null),l))};let i=e.useReadTransaction();if(i.done(),!i.done.isTracked){let a=i.constructor,c=i.use,l=i.done;a.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Wc.push(new WeakRef(this))),c.call(this)},a.prototype.done=function(){if(l.call(this),this.isDone)for(let u=0;u<Wc.length;u++){let d=Wc[u].deref();(!d||d.isDone||d.isCommitted)&&Wc.splice(u--,1)}},a.prototype.done.isTracked=!0}return e}function BA(e,t,r){return function(n,s,i,a,c=-1,l,u,d="put",f,m){f||l==null?Tu=i?.localTime?LA|oU:PA:Tu=l?i?.localTime?LA|16384:iU|16384:PA;let h=u?.expiresAt;if(h>=0&&(c|=p_),pm=c,DA=h,i?.version===a&&l===!1)throw new Error("Must retain local time if version is not changed");let p={version:a,instructedWrite:Tu>0},_,g=0;try{let y=i?.residencyId,T=u?.residencyId;T&&(MA=T,pm|=UA,g|=Vc),y!==T&&(g|=Kc,y||(y=0)),c&p_&&(g|=mm),u?.originatingOperation&&(g|=fm),f&&(p.ifVersion=_=i?.version??null),i&&i.value&&i.metadataFlags&Nn&&(r.getBinaryFast(i.localTime)||Sa(i.value));let R;if(s!==void 0&&(R=e_(()=>e.put(n,s,p),n,e.rootStore),kc&&(g|=Nn)),l){let I=u?.user?.username;if(m&&(e_(()=>e.encoder.encode(m),n,e.rootStore),kc&&(g|=Nn)),e.encoder.hasStructureUpdate&&(g|=E_,e.encoder.hasStructureUpdate=!1),f&&i?.localTime){let P=i?.localTime,Y=r.get(P);if(Y){let te=Ut(Y).previousLocalTime;return R=r.put(P,Su(a,t,n,te,u?.nodeId??server.replication.getThisNodeId(r)??0,I,d,hm,g,T,y,h),{ifVersion:_}),R}}R=r.put(s===void 0?sU:dm,Su(a,t,n,i?.localTime?1:0,u?.nodeId??server.replication?.getThisNodeId(r)??0,I,d,hm,g,T,y,h,u?.originatingOperation),{append:d!=="invalidate",instructedWrite:!0,ifVersion:_})}return R}catch(y){throw y.message+=" id: "+n+" options: "+p,y}}}function zc(e,t,r){if(t)return t.value&&t.metadataFlags&Nn&&!e.auditStore.getBinaryFast(t.localTime)&&Sa(t.value),e.remove(t.key,r)}var nU,h_,m_,dm,CA,sU,S6,Ru,T6,Em,R6,PA,iU,y6,oU,LA,p_,UA,xA,E_,Ra,A6,hm,Tu,pm,DA,MA,ct,vA,Wc,Yc=fe(()=>{nU=require("msgpackr");uo();h_=w(z());Ts();Ts();m_=new Uint8Array([1,1,1,1,4,64,0,0]),dm=new Uint8Array([1,1,1,1,1,0,0,0]),CA=new Uint8Array([1,1,1,1,3,64,0,0]),sU=new Uint8Array([1,1,1,1,0,64,0,0]),S6=Symbol("local-timestamp"),Ru=Symbol("metadata"),T6=Symbol("entry"),Em=new Uint8Array(8),R6=new DataView(Em.buffer,0,8),PA=0,iU=0,y6=1,oU=3,LA=4,p_=16,UA=32,xA=1,E_=256,Ra=new WeakMap,Tu=0,pm=-1,DA=-1,MA=0,ct=null,vA=class extends nU.Encoder{static{o(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0;class r{static{o(this,"RecordObject")}getUpdatedTime(){return Ra.get(this)?.version}getExpiresAt(){return Ra.get(this)?.expiresAt}}t.structPrototype=r.prototype,super(t);let n=this.encode;this.encode=function(i,a){if(Tu||pm>=0){let c=0,l=Tu;l&&(c+=8,Tu=0);let u=pm,d=DA,f=MA;u>=0&&(c+=4,pm=-1,d>=0&&(c+=8,DA=-1),f&&(c+=4,MA=0));let m=A6=n.call(this,i,a|2048|c);hm=m.subarray((m.start||0)+c,m.end);let h=m.start||0;return l&&(m_[4]=l,m_[5]=l>>8,m.set(m_,h),h+=8),kc&&(u|=Nn),u>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,u|d_<<24),h+=4,d>=0&&((m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setFloat64(h,d),h+=8),f&&(m.dataView||(m.dataView=new DataView(m.buffer,m.byteOffset,m.byteLength))).setUint32(h,f)),m}else return hm=n.call(this,i,a),hm};let s=this.saveStructures;this.saveStructures=function(i,a){let c=s.call(this,i,a);return this.hasStructureUpdate=!0,c}}decode(t,r){ct=null;let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],a=0;try{if(i<32&&s>2){let c=n,l;if(i===2){if(t.copy)t.copy(Em,0,c),c+=8;else for(let m=0;m<8;m++)Em[m]=t[c++];l=b6(),i=t[c]}let u,d;i<32&&(i===d_?(a=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4):(a=i|t[c+1]<<5,c+=2),a&p_&&(u=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8),a&UA&&(d=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getUint32(c),c+=4));let f=Gc(()=>r?.valueAsBuffer?t.subarray(c,s):super.decode(t.subarray(c,s),s-c),this.rootStore);return ct={localTime:l,[Ru]:a,expiresAt:u,residencyId:d},f}return r?.valueAsBuffer?t:Gc(()=>super.decode(t,r),this.rootStore)}catch(c){return h_.error("Error decoding record",c,"data: "+t.slice(0,40).toString("hex")),null}}};o(b6,"getTimestamp");o(__,"handleLocalTimeForGets");Wc=[];setInterval(()=>{for(let e=0;e<Wc.length;e++){let t=Wc[e].deref();!t||t.isDone||t.isCommitted?Wc.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(h_.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):h_.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();o(BA,"recordUpdater");o(zc,"removeEntry")});function kA(e,t,r,n,s,i,a,c){let l=e[0];if(t==="or"){let f=u(l);for(let h=1;h<e.length;h++){let p=e[h],_=u(p);f=f.concat(_)}let m=new Set;return f.filter(h=>{let p=h.key??h;return m.has(p)?!1:(m.add(p),!0)})}else{let f=u(l),m=d(e.slice(1),!0,l.estimated_count);return m.length>0?a(f,m):f}function u(f){return f.conditions?kA(f.conditions,f.operator,r,n,s,i,a,c):Iu(f,n,f.descending||s.reverse===!0,r,s.allowFullScan,c,i)}o(u,"executeCondition");function d(f,m,h){return f.map((p,_)=>{if(p.conditions){let T=p.operator==="or",R=d(p.conditions,!T,h);return T?(I,P)=>R.some(Y=>Y(I,P)):(I,P)=>R.every(Y=>Y(I,P))}let g=(p.attribute||p[0])===r.primaryKey,y=gm(p,r,i,c,g,h);return m&&_<f.length-1&&h&&(h=M6(r.primaryStore,p.estimated_count,h)),y}).filter(Boolean)}o(d,"mapConditionsToFilters")}function Iu(e,t,r,n,s,i,a){let c=e[0]??e.attribute,l=e[1]??e.value,u=e.comparator;if(l===void 0&&u!=="sort")throw new qr.ClientError(`Search condition for ${c} must have a value`);if(Array.isArray(c)){let R=c[0],I=Ci(n.attributes,R);if(I.relationship){if(c.length<2)throw new qr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let P=I.definition?.tableClass||I.elements?.definition?.tableClass,Y=new Map,te=Iu({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:u},t,r,P,s,Y);if(I.relationship.to){i[c[0]]=Y;let x=!!Ci(P.attributes,I.relationship.to)?.elements;te=C6(te,I,P.primaryStore,x,Y)}if(I.relationship.from){let x=o($=>($?.key!==void 0&&($=$.key),Iu({attribute:I.relationship.from,value:$},t,r,n,s,Y)),"searchEntry");I.elements?(i[c[0]]=Y,te=P6(te,I,P.primaryStore,Y,x)):te=te.flatMap(x)}return te}else if(c.length===1)c=c[0];else throw new qr.ClientError("Unable to query by attribute "+JSON.stringify(c))}let d=c===n.primaryKey||c==null,f=d?n.primaryStore:n.indices[c],m,h,p,_;l instanceof Date&&(l=l.getTime());let g;switch(GA[u]||u){case"lt":m=!0,h=l;break;case"le":m=!0,h=l,p=!0;break;case"gt":m=l,_=!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,h=l.slice(0),h[h.length-1]=Oi.MAXIMUM_KEY;break;case"starts_with":m=l.toString(),h=l+"\uFFFF";break;case"between":case"gele":case"gelt":case"gtlt":case"gtle":m=l[0],m instanceof Date&&(m=m.getTime()),h=l[1],h instanceof Date&&(h=h.getTime()),p=u==="gele"||u==="gtle"||u==="between",_=u==="gtlt"||u==="gtle";break;case"equals":case void 0:m=l,h=l,p=!0;break;case"ne":if(l===null){m=l,_=!0;break}case"sort":case"contains":case"ends_with":m=!0,g=!0;break;default:throw new qr.ClientError(`Unknown query comparator "${u}"`)}let y;if(typeof m=="string"&&m.length>ys.MAX_SEARCH_KEY_LENGTH&&(m=m.slice(0,ys.MAX_SEARCH_KEY_LENGTH)+ys.OVERFLOW_MARKER,_=!1,y=gm(e,n,null,i,d)),typeof h=="string"&&h.length>ys.MAX_SEARCH_KEY_LENGTH&&(h=h.slice(0,ys.MAX_SEARCH_KEY_LENGTH)+ys.OVERFLOW_MARKER,p=!0,y=y??gm(e,n,null,i,d)),r){let R=m;m=h,h=R,R=!_,_=!p,p=R}if(!f||f.isIndexing||g||l===null&&!f.indexNulls){if(s===!1&&!f)throw new qr.ClientError(`"${c}" is not indexed, can not search for this attribute`,404);if(s===!1&&g)throw new qr.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 qr.ServerError(`"${c}" is not indexed yet, can not search for this attribute`,503);if(l===null&&f&&!f.indexNulls)throw new qr.ClientError(`"${c}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(y=y??gm(e,n,null,i,d),!y)throw new qr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:m,end:h,inclusiveEnd:p,exclusiveStart:_,values:!0,versions:d,transaction:t,reverse:r};if(d){let R=f.getRange(T).map(y?function({key:I,value:P}){return this?.isSync?P&&y(P)?I:ya.SKIP:new Promise((Y,te)=>setImmediate(()=>{try{Y(P&&y(P)?I:ya.SKIP)}catch(x){te(x)}}))}:I=>I.value==null&&!(I.metadataFlags&(wn|Aa))?ya.SKIP:I);return R.hasEntries=!0,R}else return f?f.customIndex?f.customIndex.search(e,a).map(R=>{if(typeof R=="object"&&R){let{key:I,...P}=R,Y=n.primaryStore.getEntry(I);return{...P,...Y}}return R}):f.getRange(T).map(y?function({key:R,value:I}){let P;return typeof R=="string"&&R.length>ys.MAX_SEARCH_KEY_LENGTH?P=n.primaryStore.get(I):P={[c]:R},this.isSync?y(P)?I:ya.SKIP:new Promise((Y,te)=>setImmediate(()=>{try{Y(y(P)?I:ya.SKIP)}catch(x){te(x)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:I}){return this.isSync?I&&y(I)?R:ya.SKIP:new Promise((P,Y)=>setImmediate(()=>{try{P(I&&y(I)?R:ya.SKIP)}catch(te){Y(te)}}))})}function Ci(e,t){if(Array.isArray(t))if(t.length>1){let r=Ci(e,t[0]),n=(r?.definition?.tableClass||r?.elements?.definition?.tableClass)?.attributes??r?.properties;return n?Ci(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 C6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;return s.hasMappings=!0,{next(){if(!i){let c=t.relationship.to,l=o((u,d)=>{let f=s.get(u);f?f.push(d):s.set(u,f=[d])},"addEntry");for(let u of e){let d=u.value??r.get(u.key??u),f=d?.[c];if(f!=null&&!s.filters?.some(m=>!m(d)))if(n)for(let m=0;m<f.length;m++)l(f[m],u);else l(f,u)}return i=s.keys()[Symbol.iterator](),this.next()}let a=i.next();return a.done?a:{value:a.value}},return(){if(i?.return)return i.return()}}}})}function P6(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,a,c=new Set;return{next(){let l;if(a)for(;l=a.next(),!l.done;){let u=l.value;if(!c.has(u))return c.add(u),l}if(!i){let u=new Set;n.fromRecord=d=>d[t.relationship.from]?.filter?.(f=>u.has(f));for(let d of e){if(n.filters){let f=r.get(d);if(n.filters.some(m=>!m(f)))continue}u.add(d)}return i=u[Symbol.iterator](),this.next()}do{let u=i.next();return u.done?u:(a=s(u.value)[Symbol.iterator](),this.next())}while(!0)},return(){return a?.return?.()},throw(){return a?.throw?.()}}}})}function gm(e,t,r,n,s,i){let a=e.comparator,c=e[0]??e.attribute,l=e[1]??e.value;if(Array.isArray(c)){if(c.length===0)return()=>!0;if(c.length===1)c=c[0];else if(c.length>1){let d=c[0],f=Ci(t.attributes,d),m=f.definition?.tableClass||f.elements.definition?.tableClass,h=n?.[d],p=gm({attribute:c.length>2?c.slice(1):c[1],value:l,comparator:a},m,r,h?.[d]?.joined,c[1]===m.primaryKey,i);if(!p)return;if(h){h.filters||(h.filters=[]),h.filters.push(p);return}let _=t.propertyResolvers?.[d];_.to&&(p.to=_.to);let g,y=o((R,I)=>{let P,Y;return _?_.returnDirect?(P=_(R,r,I),Y=ct):(Y=_(R,r,I,!0),Array.isArray(Y)?(P=Y.map(te=>te.value),Y=null):P=Y?.value):P=R[d],{subObject:P,subEntry:Y}},"getSubObject"),T=o((R,I)=>{if(_&&p.idFilter){if(!g)if(p.idFilter.idSet?.size===1){for(let $ of p.idFilter.idSet)e={attribute:_.from??t.primaryKey,value:$};g=u(_.from??t.primaryKey,p.idFilter,!0,!0)}else g=u(_.from??t.primaryKey,p.idFilter,!1,!0);let x=g(R);return g.idFilter&&(T.idFilter=g.idFilter),x}let{subObject:P,subEntry:Y}=y(R,I);return P?Array.isArray(P)?(!n?.[d]&&n&&(n[d]={fromRecord(x){let $=y(x).subObject;return Array.isArray($)?$.filter(p).map(j=>j[m.primaryKey]):$}}),P.some(p)):p(P,Y):!1},"recordFilter");return T}}switch(l instanceof Date&&(l=l.getTime()),GA[a]||a){case ys.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,Oi.compareKeys)(d,l[0])>=0&&(0,Oi.compareKeys)(d,l[1])<=0,!0);case"gt":return u(c,d=>(0,Oi.compareKeys)(d,l)>0);case"ge":return u(c,d=>(0,Oi.compareKeys)(d,l)>=0);case"lt":return u(c,d=>(0,Oi.compareKeys)(d,l)<0);case"le":return u(c,d=>(0,Oi.compareKeys)(d,l)<=0);case"ne":return u(c,d=>(0,Oi.compareKeys)(d,l)!==0,!1,!0);case"sort":return()=>!0;default:throw new qr.ClientError(`Unknown query comparator "${a}"`)}function u(d,f,m,h){let p;m=m&&!s&&t?.indices[d]&&i>3,m&&(e.estimated_count==null&&S_(t)(e),p=e.estimated_count>>4,(isNaN(p)||p>=i)&&(m=!1));let _=0,g=3;function y(T){let R=T[d],I;if(typeof R!="object"||!R||h?I=f(R):Array.isArray(R)?I=R.some(f):R instanceof Date&&(I=f(R.getTime())),m&&(g++,!I&&!y.idFilter&&++_/g*i>p)){let P=Iu(e,r.transaction.getReadTxn(),!1,t),Y;y.to?Y=P.flatMap(x=>t.primaryStore.get(x)[y.to]):Y=P.map(Nu);let te=new Set(Y);y.idFilter=x=>te.has(Nu(x)),y.idFilter.idSet=te}return I}return o(y,"recordFilter"),s&&(y.idFilter=f),y}o(u,"attributeComparator")}function S_(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/So(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=GA[n]||n,n===ys.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=Ci(e.attributes,s[0]),a=i.definition?.tableClass||i.elements.definition?.tableClass,c=S_(a)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),l=e.indices[i.relationship.from];r.estimated_count=c+(l?c*So(e.indices[i.relationship.from])/(So(a.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=So(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else if(n==="starts_with"||n==="prefix")r.estimated_count=w6*So(e.primaryStore)+1;else if(n==="between")r.estimated_count=N6*So(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=So(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=I6*So(e.primaryStore)+1}typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return o(t,"estimateConditionForTable"),t}function T_(e,t){if(e)if(To=e,yu.lastIndex=0,L6.test(e))try{if(t&&(t.conditions=[]),Qs=t??new bu,_m(Qs,""),Lr!==To.length&&Gt("Unable to parse query, unexpected end of query"),Qs.parseErrorMessage&&(Qs.parseError=new FA(t.parseErrorMessage),!t))throw Qs.parseError;return Qs}catch(r){if(r.statusCode=400,r.message=`Unable to parse query, ${r.message} at position ${Lr} in '${To}'`,Qs.parseErrorMessage&&(r.message+=", "+Qs.parseErrorMessage),t)t.parseError=r;else throw r}else return t??new URLSearchParams(e)}function Gt(e){let t=`${e} at position ${Lr}`;Qs.parseErrorMessage=Qs.parseErrorMessage?Qs.parseErrorMessage+", "+t:t}function _m(e,t){let r=yu,n,s,i,a,c,l=decodeURIComponent,u;for(;n=r.exec(To);){Lr=r.lastIndex;let[,d,f]=n;a?(d&&Gt(`expected operator, but encountered '${d}'`),a=!1,c=!1):c=!0;let m;switch(f){case"=":s!=null?(d.length<=2?i=d:Gt(`invalid FIQL operator ${d}`),l=cU):(l=decodeURIComponent,i="equals",d||Gt("attribute must be specified before equality comparator"),s=Au(d));break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":i=O6[f],l=HA[i]?cU:decodeURIComponent,d||Gt(`attribute must be specified before comparator ${f}`),s=Au(d);break;case"&=":case"|=":case"|":case"&":case"":case void 0:if(s==null)s===void 0&&(t&&Gt(`expected '${t}', but encountered ${f[0]?"'"+f[0]+"'":"end of string"}}`),Gt(`no comparison specified before ${f?"'"+f+"'":"end of string"}`));else{e.conditions||Gt("conditions/comparisons are not allowed in a property list");let p={comparator:i,attribute:s||null,value:l(d)};if(i==="eq"&&lU(p,d),s===""){let _=e.conditions[e.conditions.length-1];_.chainedConditions=_.chainedConditions||[],_.chainedConditions.push(p),_.operator=u}else g_(e,u),e.conditions.push(p)}f==="&"?(u="and",s=void 0):f==="|"?(u="or",s=void 0):f==="&="?(u="and",s=""):f==="|="&&(u="or",s="");break;case",":e.conditions?Gt("conditions/comparisons are not allowed in a property list"):e.push(Au(d)),s=void 0;break;case"(":yu.lastIndex=Lr;let h=_m(d?[]:new bu,")");switch(d){case"":g_(e,u),e.conditions.push(h);break;case"limit":switch(h.length){case 1:e.limit=+h[0];break;case 2:e.offset=+h[0],e.limit=h[1]-e.offset;break;default:Gt("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(h[0])&&h.length===1&&!h[0].name?(e.select=h[0],e.select.asArray=!0):h.length===1?e.select=h[0]:h.length===2&&h[1]===""?e.select=h.slice(0,1):e.select=h;break;case"group-by":Gt("group by is not implemented yet");case"sort":e.sort=uU(h);break;default:Gt(`unknown query function call ${d}`)}To[Lr]===","?r.lastIndex=++Lr:a=!0,s=null;break;case"{":e.conditions&&Gt("property sets are not allowed in a queries"),d||Gt("property sets must have a defined parent property name"),yu.lastIndex=Lr,m=_m([],"}"),m.name=d,e.push(m),To[Lr]===","?r.lastIndex=++Lr:a=!0;break;case"[":if(yu.lastIndex=Lr,d?(m=_m(new bu,"]"),m.name=d):m=_m(e.conditions?new bu:[],"]"),e.conditions)if(g_(e,u),To[Lr]==="="){l=decodeURIComponent,i="equals",s=Au(d),r.lastIndex=++Lr;break}else e.conditions.push(m),s=null;else e.push(m);To[Lr]===","?r.lastIndex=++Lr:a=!0;break;case")":case"]":case"}":if(t===f[0]){if(e.conditions)if(s){let p={comparator:i||"equals",attribute:s,value:l(d)};i==="eq"&&lU(p,d),g_(e,u),e.conditions.push(p)}else d&&Gt("no attribute or comparison specified");else(d||e.length>0&&c)&&e.push(Au(d));return e}else Gt(t?`expected '${t}', but encountered '${f[0]}'`:`unexpected token '${f[0]}'`);default:Gt(`unexpected operator '${f}'`)}if(t!==")"&&(r=s?D6:yu,r.lastIndex=Lr),Lr===To.length)return e}t&&Gt(`expected '${t}', but encountered end of string`)}function g_(e,t){e.conditions.length>0&&(e.operator?e.operator!==t&&Gt("Can not mix operators within a condition grouping"):e.operator=t)}function Au(e){return e.indexOf(".")>-1?e.split(".").map(Au):decodeURIComponent(e)}function cU(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 qr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function lU(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new qr.ClientError("wildcard can only be used at the end of a string")}function uU(e){let t=dU(e[0]);return e.length>1&&(t.next=uU(e.slice(1))),t}function dU(e){if(Array.isArray(e)){let t=dU(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}}Gt(`Unknown sort type ${e}`)}function Nu(e){return Array.isArray(e)?e.join("\0"):e}function So(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function M6(e,t,r){return t*r/So(e)}var qr,ys,Oi,ya,I6,N6,w6,O6,HA,GA,FA,L6,yu,D6,Lr,Qs,To,bu,R_=fe(()=>{qr=w(Ee()),ys=w(kt()),Oi=require("ordered-binary"),ya=require("lmdb");Sm();Yc();I6=.3,N6=.1,w6=.05,O6={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},HA={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};o(kA,"executeConditions");o(Iu,"searchByIndex");o(Ci,"findAttribute");o(C6,"joinTo");o(P6,"joinFrom");GA={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(gm,"filterByType");o(S_,"estimateCondition");FA=class extends qr.Violation{static{o(this,"SyntaxViolation")}},L6=/[()[\]|!<>.]|(=\w*=)/,yu=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,D6=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;o(T_,"parseQuery");o(Gt,"recordError");o(_m,"parseBlock");o(g_,"assignOperator");o(Au,"decodeProperty");o(cU,"typedDecoding");o(lU,"wildcardDecoding");o(uU,"toSortObject");o(dU,"toSortEntry");bu=class{static{o(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}getAll(){let t=[];for(let r=0,n=this.conditions.length;r<n;r++){let s=this.conditions[r];s.attribute&&t.push(s.value)}return t}};o(Nu,"flattenKey");o(So,"estimatedEntryCount");o(M6,"intersectionEstimate")});var fU,Js,y_=fe(()=>{fU=w(Ws());ba();Js=class extends URLSearchParams{static{o(this,"RequestTarget")}#e;pathname;search;id;isCollection;constructor(t){let r,n;if(t&&(r=t.indexOf("?"))>-1){n=t.slice(0,r);let s=t.slice(r+1);super(s),this.search=s}else super(),n=t;this.pathname=n??"",this.#e=t}toString(){return this.#e?this.#e:this.size>0?this.pathname+"?"+super.toString():this.pathname}get url(){return this.toString()}delete(t){super.delete(t),this.conditions&&(this.conditions=this.conditions.filter(r=>r.attribute!==t)),this.#e=void 0}set(t,r){this.delete(t),super.set(t,r),this.conditions?.push({attribute:t,value:r})}append(t,r){super.append(t,r),this.#e=void 0,this.conditions?.push({attribute:t,value:r})}};(0,fU._assignPackageExport)("Resource",Dr)});var _U={};Ce(_U,{MultiPartId:()=>A_,Resource:()=>Dr,contextStorage:()=>Ou,snakeCase:()=>U6,transformForSelect:()=>b_});function U6(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function mU(e,t){if(jc=!1,e==="")return null;if(e=e.slice(1),t.splitSegments){if(e.indexOf("/")===-1)return e===""?(jc=!0,null):t.coerceId(decodeURIComponent(e));let r=e.split("/"),n=new A_;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){jc=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}else{if(e==="")return jc=!0,null;e[e.length-1]==="/"&&(jc=!0)}return t.coerceId(decodeURIComponent(e))}function On(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,a){let c,l,u,d;if(r){if(a)d=i,a=a.getContext?.()||a;else if(i)typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(d=s,c=d[this.primaryKey]??null,a=i.getContext?.()||i):i?.transaction instanceof lo?a=i:d=i;else if(s&&typeof s=="object")d=s,s=void 0,c=d.getId?.()??d[this.primaryKey];else throw new wu.ClientError(`Invalid argument for data, must be an object, but got ${s}`);c===null&&(u=!0)}else i?a=i.getContext?.()||i:s&&typeof s=="object"&&!Array.isArray(s)&&(a=s);if(c===void 0)if(typeof s=="object"&&s){if(l=s,c=s instanceof URLSearchParams?s.toString():s.url,s.conditions)c=s.id;else if(typeof c=="string")if(this.directURLMapping)c=c.slice(1),l.id=c;else{let _=c.indexOf("?");_>-1&&(l=this.parseQuery(c.slice(_+1),s),c=c.slice(0,_),c===""&&(u=!0));let g=this.parsePath(c,a,l);g?.id!==void 0?(g.query&&(l?l=Object.assign(g.query,l):l=g.query),u=g.isCollection,c=g.id):c=g,c&&(l.id=c)}else if(s[Symbol.iterator]){c=[],u=!0;for(let _ of s){if(typeof _=="object"&&_)break;c.push(_)}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 Js,l.id=c,u=!1)))}c===void 0&&(c=s.id??null,c==null&&(u=!0))}else c=s,l=new Js,l.id=c,c==null&&(u=!0);l||(l=new Js,l.id=c),u&&(l.isCollection=!0);let f;a||(a=Ou.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,h=p;if((m===!1?!this.explicitContext:this.explicitContext===!1)&&(h=o(_=>Ou.run(a,()=>p(_)),"runAction")),a?.transaction){let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)}else return vt(a,()=>{let _=this.getResource(c,a,f);return _.then?_.then(h):h(_)},f);function p(_){if(m!==!1&&a.authorize){a.authorize=!1;let g=t.type==="read"?_.allowRead(a.user,l,a):t.type==="update"?_.doesExist?.()===!1?_.allowCreate(a.user,d,a):_.allowUpdate(a.user,d,a):t.type==="create"?_.allowCreate(a.user,d,a):_.allowDelete(a.user,l,a);if(g?.then)return g.then(y=>{if(!y)throw new wu.AccessViolation(a.user);return typeof d?.then=="function"?d.then(T=>e(_,l,a,T)):e(_,l,a,d)});if(!g)throw new wu.AccessViolation(a.user)}return typeof d?.then=="function"?d.then(g=>e(_,l,a,g)):e(_,l,a,d)}o(p,"authorizeActionOnResource")}}function Vn(e,t){let r=new wu.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 qA(e,t,r){let n=e.getRecord?.();if(n){let s=e.getChanges?.();return i=>{let a,c;return e.hasOwnProperty(i)&&typeof(a=e[i])!="function"?a:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function b_(e,t){let r=t.propertyResolvers,n=t.getContext?.(),s;if(typeof e=="string")return o(function a(c){return c.then?c.then(a):Array.isArray(c)?c.map(a):qA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(c);let u=[],d=i(qA(l,r,n));for(let f of e)u.push(d(f));return u},"transform");let a=e.forceNulls;return o(function c(l){if(l.then)return l.then(c);if(Array.isArray(l))return l.map(m=>m&&typeof m=="object"?c(m):m);let u={},d=i(qA(l,r,n)),f;for(let m of e){let h=d(m);h===void 0&&a&&(h=null),h?.then?(f||(f=[]),f.push(h.then(p=>u[m.name||m]=p))):u[m.name||m]=h}return f?Promise.all(f).then(()=>u):u},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(a){return c=>{if(typeof c=="string")return a(c);if(typeof c=="object")if(c.name){s||(s={});let l=s[c.name];if(!l){let d=r[c.name]?.definition?.tableClass;l=s[c.name]=b_(c.select||c,d)}let u=a(c.name);return l(u)}else return a(c);else return c}}o(i,"handleProperty")}var hU,pU,wu,EU,Ou,v6,Dr,jc,A_,ba=fe(()=>{hU=require("crypto");Qf();pu();pU=w(Ws()),wu=w(Ee());Uc();R_();EU=require("async_hooks");y_();Ou=new EU.AsyncLocalStorage,v6={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Dr=class{static{o(this,"Resource")}#e;#t;#r;static transactions;static directURLMapping=!1;static loadAsInstance;constructor(t,r){this.#e=t;let n=r?.getContext?r.getContext()??null:void 0;this.#t=n!==void 0?n:r||null}static get=On(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(a);return a(i);function a(c){let l;if((l=r?.select)&&c!=null&&!c.selectApplied){let u=b_(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=On(function(t,r,n,s){if(Array.isArray(s)&&t.#r&&t.constructor.loadAsInstance!==!1){let i=[];for(let a of s){let c=t.constructor,l=a[c.primaryKey],u=c.getResource(l,n,{async:!0});u.then?i.push(u.then(d=>d.put(a,n))):i.push(u.put(a,n))}return Promise.all(i)}return t.put?t.constructor.loadAsInstance===!1?t.put(r,s):t.put(s,r):Vn(t,"put")},{hasContent:!0,type:"update"});static patch=On(function(t,r,n,s){return t.patch?t.constructor.loadAsInstance===!1?t.patch(r,s):t.patch(s,r):Vn(t,"patch")},{hasContent:!0,type:"update"});static delete=On(function(t,r,n,s){return t.delete?t.delete(r):Vn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,hU.randomUUID)()}static create(t,r,n){n?n.getContext&&(n=n.getContext()):n=Ou.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),vt(n,async()=>{let i=new this(s,n),a=await i.create?i.create(s,r):Vn(i,"create");return n.newLocation=s??a?.[this.primaryKey],n.createdResource=!0,this.loadAsInstance===!1?a:i})}static invalidate=On(function(t,r,n,s){return t.invalidate?t.invalidate(r):Vn(t,"delete")},{hasContent:!1,type:"update"});static post=On(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=On(function(t,r,n,s){return t.update(r,s)},{hasContent:!0,type:"create"});static connect=On(function(t,r,n,s){return t.connect?t.constructor.loadAsInstance===!1?t.connect(r,s):t.connect(s,r):Vn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=On(function(t,r,n,s){return t.subscribe?t.subscribe(r):Vn(t,"subscribe")},{type:"read"});static publish=On(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):Vn(t,"publish")},{hasContent:!0,type:"create"});static search=On(function(t,r,n){let s=t.search?t.search(r):Vn(t,"search"),i=n.select;if(i&&n.hasOwnProperty("select")&&s!=null&&!s.selectApplied){let a=b_(i,t.constructor);return s.map(a)}return s},{type:"read"});static query=On(function(t,r,n,s){return t.search?t.constructor.loadAsInstance===!1?t.search(r,s):t.search(s,r):Vn(t,"search")},{hasContent:!0,type:"read"});static copy=On(function(t,r,n,s){return t.copy?t.constructor.loadAsInstance===!1?t.copy(r,s):t.copy(s,r):Vn(t,"copy")},{hasContent:!0,type:"create"});static move=On(function(t,r,n,s){return t.move?t.constructor.loadAsInstance===!1?t.move(r,s):t.move(s,r):Vn(t,"move")},{hasContent:!0,type:"delete"});async post(t){if(this.#r)return(await this.constructor.create(this.#e,t,this.#t)).#e;Vn(this,"post")}static isCollection(t){return t&&t.#r}get isCollection(){return this.#r}static coerceId(t){return t}static parseQuery(t,r){return T_(t,r)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let a=t.slice(s+1),c=r?.headers&&v6[a];if(c)r.requestedContentType=c,t=t.slice(0,s);else if(this.attributes?.find(l=>l.name===a))if(t=t.slice(0,s),n)n.property=a;else return{query:{property:a},id:mU(t,this),isCollection:jc}}let i=mU(t,this);return jc?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r.getContext?.(),a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=n?.isCollection;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let l;if(i.resourceCache?l=i.resourceCache:l=i.resourceCache=[],l.asMap){let u=l.asMap.get(t);if(s=u?.find(d=>d.constructor===c),s)return s;u||l.asMap.set(t,u=[]),u.push(s=new c(t,i))}else{if(s=l.find(u=>u.#e===t&&u.constructor===c),s)return s;if(l.push(s=new c(t,i)),l.length>10){let u=new Map;for(let d of l){let f=d.#e,m=u.get(f);m?m.push(d):u.set(f,[d])}i.resourceCache.length=0,i.resourceCache.asMap=u}}}else s=new c(t,i);return a&&(s.#r=!0),s}subscribe(t){return new $n}connect(t,r){return r?.subscribe!==!1?this.subscribe?.(r):new $n}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,pU._assignPackageExport)("Resource",Dr);o(U6,"snakeCase");o(mU,"pathToId");A_=class extends Array{static{o(this,"MultiPartId")}toString(){return this.join("/")}};o(On,"transactional");o(Vn,"missingMethod");o(qA,"selectFromObject");o(b_,"transformForSelect")});var Qc,$A=fe(()=>{Qc=class{static{o(this,"ErrorResource")}error;constructor(t){this.error=t}isError=!0;allowRead(){throw this.error}allowUpdate(){throw this.error}allowCreate(){throw this.error}allowDelete(){throw this.error}getId(){throw this.error}getContext(){throw this.error}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var TU={};Ce(TU,{Resources:()=>I_,keyArrayToString:()=>Cu,resetResources:()=>x6,resources:()=>As});function x6(){return As=new I_,ve.resources=As,As}function Cu(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var gU,SU,I_,As,Pu=fe(()=>{Uc();$A();gU=w(z()),SU=w(Ee());Pr();I_=class extends Map{static{o(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,exportTypes:n,hasSubPaths:!1,relativeURL:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.Resource.tableName!==r.tableName)&&!s){let c=new SU.ServerError(`Conflicting paths for ${t}`);gU.default.error(c),i.Resource=new Qc(c)}super.set(t,i);for(let[c,l]of this){let u=2;for(;(u=c.indexOf("/",u))>-1;){let d=this.get(c.slice(0,u));d&&(d.hasSubPaths=!0),u+=2}}}getMatch(t,r){let n=2,s=0,i,a=t.length;for(;n<a;){s=n,n=t.indexOf("/",n),n===-1&&(n=a);let u=n===a?t:t.slice(0,n),d=this.get(u),f=-1;if(!d&&n===a&&(f=u.indexOf("?",s),f!==-1)){let m=u.slice(0,f);d=this.get(m)}if(d&&(!r||d.exportTypes?.[r]!==!1)){if(d.relativeURL=t.slice(f!==-1?f:n),!d.hasSubPaths)return d;i=d}n+=2}if(i)return i;let c=t.indexOf("?"),l=c>-1?t.slice(0,c):t;return i=this.get(l),!i&&l.indexOf(".")>-1&&(i=this.get(l.split(".")[0])),i&&(!r||i.exportTypes?.[r]!==!1)?i.relativeURL=c>-1?t.slice(c):"":i||(i=this.get(""),i&&(!r||i.exportTypes?.[r]!==!1)&&(t.charAt(0)!=="/"&&(t="/"+t),i.relativeURL=t)),i}getResource(t,r){let n=this.getMatch(t);if(n)return t=n.relativeURL,n.Resource.getResource(this.pathToId(t,n.Resource),r)}call(t,r,n){return vt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};o(x6,"resetResources");o(Cu,"keyArrayToString")});function YA(e,t,r,n,s){let i=e.primaryStore.env.path,a=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=yU,B6(e.primaryStore,e.auditStore)):(c=RU,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{AU(RU[i])})));let l=c[i]||(c[i]=[]);if(l.auditStore=e.auditStore,l.lastTxnTime==null&&(l.lastTxnTime=Date.now()),s?.scope==="full-database")return;let u=l[a];u||(u=l[a]=new Map,u.envs=l,u.tableId=a,u.store=e.primaryStore),t=Cu(t);let d=new KA(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 AU(e){if(!e)return;let t=e.auditStore;t.resetReadTxn(),bU(e.auditStore);let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=Ut(s),a=e[i.tableId];if(!a)continue;let c=i.recordId,l=Cu(c),u=0;do{let d=a.get(l);if(d){for(let m of d)if(!(u>0&&!(m.includeDescendants&&!(m.onlyChildren&&u>1)))){if(m.startTime>=n){(0,VA.info)("omitting",c,m.startTime,n);continue}try{let h;m.supportsTransactions&&m.txnInProgress!==i.version&&(h=!0,m.txnInProgress||(r?r.push(m):r=[m]),m.txnInProgress=i.version),m.listener(c,i,n,h)}catch(h){console.error(h),(0,VA.info)(h)}}}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 B6(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:a,txnId:c})=>{let l=yU[s];if(!l)return;let u=o(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),l.txnTime=r.threadLocalWrites[0]||Date.now();try{AU(l)}finally{r.threadLocalWrites[0]=l.lastTxnTime,r.unlock("thread-local-writes")}},"acquiredLock");r.attemptLock("thread-local-writes",u)&&u()})}}function bU(e){e.nextTransaction?.resolve();let t;e.nextTransaction=new Promise(r=>{t=r}),e.nextTransaction.resolve=t}function IU(e){return e.nextTransaction||(YA({primaryStore:e,auditStore:e},null,null,0,{scope:"full-database"}),bU(e)),e.nextTransaction}var VA,RU,yU,KA,WA=fe(()=>{VA=w(z());pu();Pu();uo();RU=Object.create(null),yU=Object.create(null);o(YA,"addSubscription");KA=class extends $n{static{o(this,"Subscription")}listener;subscriptions;startTime;includeDescendants;supportsTransactions;onlyChildren;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables;if(t){let r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};o(AU,"notifyFromTransactionData");o(B6,"listenToCommits");o(bU,"nextTransaction");o(IU,"whenNextTransaction")});var wU=M((PNe,NU)=>{"use strict";var zA=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};NU.exports=zA});var CU=M((DNe,OU)=>{"use strict";var jA=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};OU.exports=jA});var Tm=M((vNe,LU)=>{"use strict";var PU=ce(),F6=(k(),v(K)),{RecordEncoder:H6}=(Yc(),v(aU));PU.initSync();var k6=PU.get(F6.CONFIG_PARAMS.STORAGE_CACHING)!==!1,QA=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=k6&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:H6})}};LU.exports=QA});var Rm=M((xNe,DU)=>{"use strict";var Kn=ce(),bs=(k(),v(K));Kn.initSync();var N_=class{static{o(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=Kn.get(bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Kn.get(bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Kn.get(bs.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Kn.get(bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=Kn.get(bs.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),Kn.get(bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=Kn.get(bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),Kn.get(bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=Kn.get(bs.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),Kn.get(bs.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=Kn.get(bs.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=Kn.get(bs.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};DU.exports=N_;N_.MAX_DBS=1e4});var _t=M((FNe,qU)=>{"use strict";var XA=require("lmdb"),Xs=require("fs-extra"),Yn=require("path"),w_=An(),UU=z(),Cn=tn().LMDB_ERRORS_ENUM,O_=CU(),ZA=Tm(),xU=Rm(),Ia=kt(),MU=(k(),v(K)),{table:G6,resetDatabases:q6}=(Le(),v(ft)),vU=ce(),Zs=Ia.INTERNAL_DBIS_NAME,BU=Ia.DBI_DEFINITION_NAME,$6="data.mdb",V6="lock.mdb",ym=".mdb",K6="-lock",JA=class{static{o(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=Is(t,r),this.key_type=this.dbi[Ia.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ia.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new XA.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function C_(e,t){if(e===void 0)throw new Error(Cn.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Cn.ENV_NAME_REQUIRED)}o(C_,"pathEnvNameValidation");async function eb(e,t,r=!0){try{await Xs.access(e)}catch(n){throw n.code==="ENOENT"?new Error(Cn.INVALID_BASE_PATH):n}try{let n=Yn.join(e,t+ym);return await Xs.access(n,Xs.constants.R_OK|Xs.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await Xs.access(Yn.join(e,t,$6),Xs.constants.R_OK|Xs.constants.F_OK),Yn.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(Cn.INVALID_ENVIRONMENT)}else throw new Error(Cn.INVALID_ENVIRONMENT);throw n}}o(eb,"validateEnvironmentPath");function P_(e,t){if(w_.validateEnv(e),t===void 0)throw new Error(Cn.DBI_NAME_REQUIRED)}o(P_,"validateEnvDBIName");async function Y6(e,t,r=!1,n=!1){C_(e,t);let s=Yn.basename(e);t=t.toString();let i=vU.get(MU.CONFIG_PARAMS.DATABASES);i||vU.setProperty(MU.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await eb(e,t,n),FU(e,t,r)}catch(a){if(a.message===Cn.INVALID_ENVIRONMENT){let c=Yn.join(e,t);await Xs.mkdirp(n?c:e);let l=new xU(n?c:c+ym,!1),u=XA.open(l);u.dbis=Object.create(null);let d=new ZA(!1);u.openDB(Zs,d),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let f=tb(e,t,r);return u[Ia.ENVIRONMENT_NAME_KEY]=f,global.lmdb_map[f]=u,u}throw a}}o(Y6,"createEnvironment");async function W6(e,t,r,n=!0){C_(e,t),t=t.toString();let s=Yn.join(e,t);return G6({table:t,database:Yn.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}o(W6,"copyEnvironment");async function FU(e,t,r=!1){C_(e,t),t=t.toString();let n=tb(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 eb(e,t),i=Yn.join(e,t+ym),a=s!=i,c=new xU(s,a),l=XA.open(c);l.dbis=Object.create(null);let u=kU(l);for(let d=0;d<u.length;d++)Is(l,u[d]);return l[Ia.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=l,l}o(FU,"openEnvironment");async function z6(e,t,r=!1){C_(e,t),t=t.toString();let n=Yn.join(e,t+ym),s=await eb(e,t);if(global.lmdb_map!==void 0){let i=tb(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await HU(a),delete global.lmdb_map[i]}}await Xs.remove(s),await Xs.remove(s===n?s+K6:Yn.join(Yn.dirname(s),V6))}o(z6,"deleteEnvironment");async function HU(e){w_.validateEnv(e);let t=e[Ia.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(HU,"closeEnvironment");function tb(e,t,r=!1){let s=`${Yn.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}o(tb,"getCachedEnvironmentName");function j6(e){w_.validateEnv(e);let t=Object.create(null),r=Is(e,Zs);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Zs)try{t[n]=Object.assign(new O_,s)}catch{UU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}o(j6,"listDBIDefinitions");function kU(e){w_.validateEnv(e);let t=[],r=Is(e,Zs);for(let{key:n}of r.getRange({start:!1}))n!==Zs&&t.push(n);return t}o(kU,"listDBIs");function Q6(e,t){let n=Is(e,Zs).getEntry(t),s=new O_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{UU.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}o(Q6,"getDBIDefinition");function GU(e,t,r,n=!r){if(P_(e,t),t=t.toString(),t===Zs)throw new Error(Cn.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Is(e,t)}catch(s){if(s.message===Cn.DBI_DOES_NOT_EXIST){let i=new ZA(r,n===!0),a=e.openDB(t,i),c=new O_(r===!0,n);return a[BU]=c,Is(e,Zs).putSync(t,c),e.dbis[t]=a,a}throw s}}o(GU,"createDBI");function Is(e,t){if(P_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Zs?r=Q6(e,t):r=new O_,r===void 0)throw new Error(Cn.DBI_DOES_NOT_EXIST);let n;try{let s=new ZA(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(Cn.DBI_DOES_NOT_EXIST):s}return n[BU]=r,e.dbis[t]=n,n}o(Is,"openDBI");function J6(e,t){P_(e,t),t=t.toString();let r=Is(e,t),n=r.getStats();return r[Ia.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}o(J6,"statDBI");async function X6(e,t){try{let r=Yn.join(e,t+ym);return(await Xs.stat(r)).size}catch{throw new Error(Cn.INVALID_ENVIRONMENT)}}o(X6,"environmentDataSize");function Z6(e,t){if(P_(e,t),t=t.toString(),t===Zs)throw new Error(Cn.CANNOT_DROP_INTERNAL_DBIS_NAME);Is(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Is(e,Zs).removeSync(t)}o(Z6,"dropDBI");function e8(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{Is(e,i)}catch(a){if(a.message===Cn.DBI_DOES_NOT_EXIST)GU(e,i,i!==t,i===t),n=!0;else throw a}}n&&q6()}o(e8,"initializeDBIs");qU.exports={openDBI:Is,openEnvironment:FU,createEnvironment:Y6,listDBIs:kU,listDBIDefinitions:j6,createDBI:GU,dropDBI:Z6,statDBI:J6,deleteEnvironment:z6,initializeDBIs:e8,TransactionCursor:JA,environmentDataSize:X6,copyEnvironment:W6,closeEnvironment:HU}});var KU=M((kNe,VU)=>{"use strict";var rb=_t(),t8=z(),$U=tn().LMDB_ERRORS_ENUM;VU.exports=r8;async function r8(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await rb.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==$U.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await rb.closeEnvironment(global.lmdb_map[n]),await rb.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==$U.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){t8.error(t)}}o(r8,"cleanLMDBMap")});var Ro=M((qNe,n8)=>{n8.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:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"revoked_certificates"},{attribute:"shard"}]},hdb_certificate:{hash_attribute:"name",name:"hdb_certificate",schema:"system",attributes:[{attribute:"name"},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]},hdb_analytics_hostname:{hash_attribute:"id",name:"hdb_analytics_hostname",schema:"system",attributes:[{attribute:"id"},{attribute:"hostname"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var ei=M(($Ne,zU)=>{var s8=Ro(),{promisify:i8}=require("util"),{getDatabases:WU}=(Le(),v(ft));zU.exports={setSchemaDataToGlobal:YU,getTableSchema:o8,getSystemSchema:a8,setSchemaDataToGlobalAsync:i8(YU)};function YU(e){global.hdb_schema=WU(),e&&e()}o(YU,"setSchemaDataToGlobal");function o8(e,t,r){let n=WU()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}o(o8,"getTableSchema");function a8(){return s8}o(a8,"getSystemSchema")});var ax=M((YNe,ox)=>{"use strict";var nb=require("recursive-iterator"),c8=require("alasql"),sb=require("clone"),jU=ie(),{handleHDBError:QU,hdbErrors:l8}=Ee(),{HDB_ERROR_MSGS:JU,HTTP_STATUS_CODES:XU}=l8,{getDatabases:u8}=(Le(),v(ft)),d8=["DISTINCT_ARRAY"],ZU=Symbol("validateTables"),ib=Symbol("validateTable"),KNe=Symbol("getAllColumns"),ex=Symbol("validateAllColumns"),L_=Symbol("findColumn"),tx=Symbol("validateOrderBy"),Am=Symbol("validateSegment"),ob=Symbol("validateColumn"),rx=Symbol("setColumnsForTable"),nx=Symbol("checkColumnsForAsterisk"),sx=Symbol("validateGroupBy"),ix=Symbol("hasColumns"),ab=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[ZU](),this[nx](),this[ex]()}[ZU](){if(this[ix]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ib](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ib](t.table)})}}[ix](){let t=!1,r=new nb(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[ib](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=u8();if(!r[t.databaseid])throw QU(new Error,JU.SCHEMA_NOT_FOUND(t.databaseid),XU.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw QU(new Error,JU.TABLE_NOT_FOUND(t.databaseid,t.tableid),XU.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=sb(s);i.table=sb(t),this.attributes.push(i)})}[L_](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)}[nx](){let t=new nb(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[rx](r.tableid)}[rx](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new c8.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ex](){this[Am](this.statement.columns,!1),this[Am](this.statement.joins,!1),this[Am](this.statement.where,!1),this[sx](this.statement.group,!1),this[Am](this.statement.order,!0)}[Am](t,r){if(!t)return;let n=new nb(t),s=[];for(let{node:i,path:a}of n)!jU.isEmpty(i)&&!jU.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[tx](i):s.push(this[ob](i)));return s}[sx](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&d8.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=sb(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[L_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,a)=>{if(i.toString()===n.toString()){s=i,r.splice(a,1);return}});else{let i=this[L_](n);if(!i||i.length===0)throw`unknown column '${group_column.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${group_column.toString()}' in group by`;r.forEach((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){s=a,r.splice(c,1);return}})}if(!s)throw`group by column '${group_column.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[tx](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[ob](t)}[ob](t){let r=this[L_](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]}};ox.exports=ab});var lx=M((zNe,cx)=>{"use strict";var cb=class{static{o(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};cx.exports=cb});var dx=M((QNe,ux)=>{"use strict";var lb=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};ux.exports=lb});var mx=M((XNe,fx)=>{"use strict";var ub=class{static{o(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};fx.exports=ub});var px=M((ewe,hx)=>{"use strict";var db=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};hx.exports=db});var Xc=M((iwe,gx)=>{"use strict";var f8=_t(),m8=dx(),h8=mx(),p8=px(),Pi=An(),bm=tn().LMDB_ERRORS_ENUM,E8=kt(),yo=(k(),v(K)),_8=ie(),g8=require("uuid"),rwe=require("lmdb"),{handleHDBError:S8,hdbErrors:T8}=Ee(),{OVERFLOW_MARKER:nwe,MAX_SEARCH_KEY_LENGTH:swe}=E8,Ex=ce();Ex.initSync();var D_=Ex.get(yo.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),fb=yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Jc=yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function R8(e,t,r,n,s=Pi.getNextMonotonicTime()){Eb(e,t,r,n),mb(e,t,r);let i=new m8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l];_x(u,!0,s);let d=y8(e,t,r,u),f=u[t];a.push(d),c.push(f)}return hb(a,c,n,i,s)}o(R8,"insertRecords");function y8(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||n.hasOwnProperty(a)===!1)continue;let c=n[a];if(typeof c=="function"){let d=c([[{}]]);Array.isArray(d)&&(c=d[0][yo.FUNC_VAL],n[a]=c)}let l=Pi.getIndexedValues(c),u=e.dbis[a];if(l){D_&&u.prefetch(l.map(d=>({key:d,value:s})),M_);for(let d=0,f=l.length;d<f;d++)u.put(l[d],s)}}D_&&e.dbis[t].prefetch([s],M_),e.dbis[t].put(s,n,n[Jc])})}o(y8,"insertRecord");function A8(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}o(A8,"removeSkippedRecords");function _x(e,t,r){let n=r>0;(n||!Number.isInteger(e[Jc]))&&(e[Jc]=r||(r=Pi.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[fb]))&&(e[fb]=r||Pi.getNextMonotonicTime()):delete e[fb]}o(_x,"setTimestamps");function mb(e,t,r){r.indexOf(yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(yo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(yo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),f8.initializeDBIs(e,t,r)}o(mb,"initializeTransaction");async function b8(e,t,r,n,s=Pi.getNextMonotonicTime()){Eb(e,t,r,n),mb(e,t,r);let i=new h8,a=[],c=[],l=[];for(let u=0;u<n.length;u++){let d=n[u],f=d[t],m;try{m=pb(e,t,d,f,i,!0,s)}catch{i.skipped_hashes.push(f),a.push(u);continue}c.push(m),l.push(f)}return hb(c,l,n,i,s,a)}o(b8,"updateRecords");async function I8(e,t,r,n,s=Pi.getNextMonotonicTime()){try{Eb(e,t,r,n)}catch(l){throw S8(l,l.message,T8.HTTP_STATUS_CODES.BAD_REQUEST)}mb(e,t,r);let i=new p8,a=[],c=[];for(let l=0;l<n.length;l++){let u=n[l],d;_8.isEmpty(u[t])?(d=g8.v4(),u[t]=d):d=u[t];let f=pb(e,t,u,d,i,!1,s);a.push(f),c.push(d)}return hb(a,c,n,i,s)}o(I8,"upsertRecords");async function hb(e,t,r,n,s,i=[]){let a=await Promise.all(e);for(let c=0,l=a.length;c<l;c++)a[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||Pi.getNextMonotonicTime(),A8(r,i),n}o(hb,"finalizeWrite");function pb(e,t,r,n,s,i=!1,a){let c=e.dbis[t],l=c.getEntry(n),u=l?.value,d=u;if(!u){if(i)return!1;u={}}if(_x(r,!d,a),Number.isInteger(r[Jc])&&u[Jc]>r[Jc])return!1;d&&s.original_records.push(u);let f,m=o(()=>{for(let p in r){if(!r.hasOwnProperty(p)||p===t)continue;let _=r[p],g=e.dbis[p];if(g===void 0)continue;let y=u[p];if(typeof _=="function"){let R=_([[u]]);Array.isArray(R)&&(_=R[0][yo.FUNC_VAL],r[p]=_)}if(_===y)continue;let T=Pi.getIndexedValues(y);if(T){D_&&g.prefetch(T.map(R=>({key:R,value:n})),M_);for(let R=0,I=T.length;R<I;R++)g.remove(T[R],n)}if(T=Pi.getIndexedValues(_),T){D_&&g.prefetch(T.map(R=>({key:R,value:n})),M_);for(let R=0,I=T.length;R<I;R++)g.put(T[R],n)}}let h={...u,...r};c.put(n,h,h[Jc])},"doPut");return l?f=c.ifVersion(n,l.version,m):f=c.ifNoExists(n,m),f.then(h=>h?!0:pb(e,t,r,n,s,i,a))}o(pb,"updateUpsertRecord");function N8(e,t,r){if(Pi.validateEnv(e),t===void 0)throw new Error(bm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(bm.WRITE_ATTRIBUTES_REQUIRED):new Error(bm.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(N8,"validateBasic");function Eb(e,t,r,n){if(N8(e,t,r),!Array.isArray(n))throw n===void 0?new Error(bm.RECORDS_REQUIRED):new Error(bm.RECORDS_MUST_BE_ARRAY)}o(Eb,"validateWrite");function M_(){}o(M_,"noop");gx.exports={insertRecords:R8,updateRecords:b8,upsertRecords:I8}});var Tx=M((awe,Sx)=>{"use strict";var w8=require("uuid"),_b=class{static{o(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||w8.v4(),this.schema_table=`${this.schema}.${this.table}`}};Sx.exports=_b});var v_=M((lwe,Rx)=>{"use strict";var O8=Tx(),gb=class extends O8{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,a=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=a}};Rx.exports=gb});var Ax=M((dwe,yx)=>{"use strict";yx.exports=P8;var C8="inserted";function P8(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===C8?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}o(P8,"returnObject")});var U_=M((hwe,Ix)=>{"use strict";var L8=(k(),v(K)),Sb=_t(),D8=Xc(),{getSystemSchemaPath:M8,getSchemaPath:v8}=At(),mwe=Ro(),{validateBySchema:U8}=at(),Im=require("joi"),x8=v_(),B8=Ax(),{handleHDBError:F8,hdbErrors:H8,ClientError:k8}=Ee(),bx=ie(),{HTTP_STATUS_CODES:G8}=H8,q8="inserted";Ix.exports=$8;async function $8(e){let t=U8(e,Im.object({database:Im.string(),schema:Im.string(),table:Im.string().required(),attribute:Im.string().required()}));if(t)throw new k8(t.message);let r=!e.skip_table_check&&bx.checkGlobalSchemaTable(e.schema,e.table);if(r)throw F8(new Error,r,G8.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=bx.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 x8(e.schema,e.table,e.attribute,e.id);try{let i=await Sb.openEnvironment(v8(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}`);Sb.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await Sb.openEnvironment(M8(),L8.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:l}=await D8.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbAttributeAttributes,[s]);return B8(q8,c,{records:[s]},l)}catch(i){throw i}}o($8,"lmdbCreateAttribute")});var Di=M((Ewe,wx)=>{"use strict";var Nx=ie(),V8=(k(),v(K)),Lu=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Li=require("joi"),Na={schema_format:{pattern:Lu,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},K8=Li.alternatives(Li.string().min(1).max(Na.schema_length.maximum).pattern(Lu).messages({"string.pattern.base":"{:#label} "+Na.schema_format.message}),Li.number(),Li.array()).required(),Y8=Li.alternatives(Li.string().min(1).max(Na.schema_length.maximum).pattern(Lu).messages({"string.pattern.base":"{:#label} "+Na.schema_format.message}),Li.number()),W8=Li.alternatives(Li.string().min(1).max(Na.schema_length.maximum).pattern(Lu).messages({"string.pattern.base":"{:#label} "+Na.schema_format.message}),Li.number()).required();function z8(e,t){return t?typeof t!="string"?`'${property_name}' must be a string`:t.length?t.length>Na.schema_length.maximum?`'${property_name}' maximum of 250 characters`:Lu.test(t)?"":`'${property_name}' has illegal characters`:`'${property_name}' must be at least one character`:`'${property_name}' is required`}o(z8,"checkValidTable");function j8(e,t){return Nx.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(j8,"validateSchemaExists");function Q8(e,t){let r=t.state.ancestors[0].schema;return Nx.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(Q8,"validateTableExists");function J8(e,t){return e.toLowerCase()===V8.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${hdb_terms.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(J8,"validateSchemaName");wx.exports={commonValidators:Na,schemaRegex:Lu,hdbSchemaTable:K8,validateSchemaExists:j8,validateTableExists:Q8,validateSchemaName:J8,checkValidTable:z8,hdbDatabase:Y8,hdbTable:W8}});var Rb=M((gwe,Cx)=>{var{hdbTable:X8,hdbDatabase:Ox}=Di(),Z8=at(),Tb=require("joi"),e5={undefined:"undefined",null:"null"},t5=o((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let a=r[i];(!a||a.length===0||e5[a]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${a}'`:s+=`. Invalid attribute name: '${a}'`)}return s?t.message(s):e},"customRecordsVal"),r5=Tb.object({database:Ox,schema:Ox,table:X8,records:Tb.array().items(Tb.object().custom(t5)).required()});Cx.exports=function(e){return Z8.validateBySchema(e,r5)}});var Nm=M((Rwe,Lx)=>{"use strict";var Ao=ie(),Px=z(),Twe=Rb(),{getDatabases:n5}=(Le(),v(ft)),{ClientError:Zc}=Ee();Lx.exports=s5;function s5(e){if(Ao.isEmpty(e))throw new Zc("invalid update parameters defined.");if(Ao.isEmptyOrZeroLength(e.schema))throw new Zc("invalid schema specified.");if(Ao.isEmptyOrZeroLength(e.table))throw new Zc("invalid table specified.");if(!Array.isArray(e.records))throw new Zc("records must be an array");let t=n5()[e.schema]?.[e.table];if(Ao.isEmpty(t))throw new Zc(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(a=>{if(i&&Ao.isEmptyOrZeroLength(a[r]))throw Px.error("a valid hash attribute must be provided with update record:",a),new Zc("a valid hash attribute must be provided with update record, check log for more info");if(!Ao.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw Px.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Zc(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Ao.isEmpty(a[r])&&a[r]!==""&&n.has(Ao.autoCast(a[r]))&&(a.skip=!0),n.add(Ao.autoCast(a[r]));for(let c in a)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}o(s5,"insertUpdateValidate")});var x_=M((Awe,Mx)=>{"use strict";var Dx=ie(),i5=(k(),v(K)),o5=z(),a5=U_(),c5=v_(),l5=bo(),{SchemaEventMsg:u5}=ti(),d5="already exists in";Mx.exports=f5;async function f5(e,t,r){if(Dx.isEmptyOrZeroLength(r))return r;let n=[];Dx.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 m5(e,t.schema,t.name,i)})),s}o(f5,"lmdbCheckForNewAttributes");async function m5(e,t,r,n){let s=new c5(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await h5(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(d5))o5.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}o(m5,"createNewAttribute");async function h5(e){let t;return t=await a5(e),l5.signalSchemaChange(new u5(process.pid,i5.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(h5,"createAttribute")});var Du=M((Iwe,vx)=>{"use strict";var yb=class{static{o(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};vx.exports=yb});var xx=M((wwe,Ux)=>{"use strict";var p5=Du(),E5=(k(),v(K)).OPERATIONS_ENUM,Ab=class extends p5{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(E5.INSERT,r,n,s,i),this.records=t}};Ux.exports=Ab});var Fx=M((Cwe,Bx)=>{"use strict";var _5=Du(),g5=(k(),v(K)).OPERATIONS_ENUM,bb=class extends _5{static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(g5.UPDATE,n,s,i,a),this.records=t,this.original_records=r}};Bx.exports=bb});var kx=M((Lwe,Hx)=>{"use strict";var S5=Du(),T5=(k(),v(K)).OPERATIONS_ENUM,Ib=class extends S5{static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,a=void 0){super(T5.UPSERT,n,s,i,a),this.records=t,this.original_records=r}};Hx.exports=Ib});var qx=M((Mwe,Gx)=>{"use strict";var R5=Du(),y5=(k(),v(K)).OPERATIONS_ENUM,Nb=class extends R5{static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(y5.DELETE,n,s,t,i),this.original_records=r}};Gx.exports=Nb});var wm=M((xwe,Yx)=>{"use strict";var Uwe=require("path"),$x=_t(),A5=xx(),b5=Fx(),I5=kx(),N5=qx(),Mu=kt(),Vx=ie(),{CONFIG_PARAMS:w5}=(k(),v(K)),Kx=ce();Kx.initSync();var B_=(k(),v(K)).OPERATIONS_ENUM,{getTransactionAuditStorePath:O5}=At();Yx.exports=C5;async function C5(e,t){if(Kx.get(w5.LOGGING_AUDITLOG)===!1)return;let r=O5(e.schema,e.table),n=await $x.openEnvironment(r,e.table,!0),s=P5(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){$x.initializeDBIs(n,Mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Mu.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[Mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[Mu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),Vx.isEmpty(s.user_name)||n.dbis[Mu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let a=0;a<s.hash_values.length;a++)n.dbis[Mu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[a],i)})}}o(C5,"writeTransaction");function P5(e,t){let r=Vx.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===B_.INSERT)return new A5(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===B_.UPDATE)return new b5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===B_.UPSERT)return new I5(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===B_.DELETE)return new N5(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(P5,"createTransactionObject")});var wb=M((Hwe,Wx)=>{"use strict";var L5=Nm(),Fwe=Wf(),Om=(k(),v(K)),D5=zf(),M5=Xc().insertRecords,v5=_t(),U5=z(),x5=x_(),{getSchemaPath:B5}=At(),F5=wm();Wx.exports=H5;async function H5(e){try{let{schemaTable:t,attributes:r}=L5(e);D5(e,r,t.hash_attribute),e.schema!==Om.SYSTEM_SCHEMA_NAME&&(r.includes(Om.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Om.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Om.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Om.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await x5(e.hdb_auth_header,t,r),s=B5(e.schema,e.table),i=await v5.openEnvironment(s,e.table),a=await M5(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await F5(e,a)}catch(c){U5.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(H5,"lmdbCreateRecords")});var Qx=M((Gwe,jx)=>{"use strict";var zx=(k(),v(K)),k5=wb(),G5=Wf(),q5=require("fs-extra"),{getSchemaPath:$5}=At();jx.exports=V5;async function V5(e){let t=[{name:e.schema,createddate:Date.now()}],r=new G5(zx.SYSTEM_SCHEMA_NAME,zx.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await k5(r),await q5.mkdirp($5(e.schema))}o(V5,"lmdbCreateSchema")});var Xx=M(($we,Jx)=>{"use strict";var Ob=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};Jx.exports=Ob});var r0=M((zwe,t0)=>{"use strict";var Zx=_t(),Cb=An(),Pb=tn().LMDB_ERRORS_ENUM,K5=kt(),e0=z(),Kwe=ie(),Y5=require("lmdb"),W5=Xx(),z5=(k(),v(K)),{OVERFLOW_MARKER:Ywe,MAX_SEARCH_KEY_LENGTH:Wwe}=K5,j5=z5.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Q5(e,t,r,n){if(Cb.validateEnv(e),t===void 0)throw new Error(Pb.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Pb.IDS_REQUIRED):new Error(Pb.IDS_MUST_BE_ITERABLE);try{let s=Zx.listDBIs(e);Zx.initializeDBIs(e,t,s);let i=new W5,a,c=[],l=[];for(let m=0,h=r.length;m<h;m++)try{a=r[m];let p=e.dbis[t].get(a);if(!p||n&&p[j5]>n){i.skipped.push(a);continue}let _=e.dbis[t].ifVersion(a,Y5.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let g=0;g<s.length;g++){let y=s[g];if(!p.hasOwnProperty(y)||y===t)continue;let T=e.dbis[y],R=p[y];if(R!=null)try{let I=Cb.getIndexedValues(R);if(I)for(let P=0,Y=I.length;P<Y;P++)T.remove(I[P],a)}catch{e0.warn(`cannot delete from attribute: ${y}, ${R}:${a}`)}}});c.push(_),l.push(a),i.original_records.push(p)}catch(p){e0.warn(p),i.skipped.push(a)}let u=[],d=await Promise.all(c);for(let m=0,h=d.length;m<h;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 h=u[m];i.original_records.splice(h-f,1),f++}return i.txn_time=Cb.getNextMonotonicTime(),i}catch(s){throw s}}o(Q5,"deleteRecords");t0.exports={deleteRecords:Q5}});var Cm=M((Qwe,s0)=>{"use strict";var vu=ie(),J5=r0(),X5=_t(),{getSchemaPath:Z5}=At(),e9=wm(),t9=z();s0.exports=r9;async function r9(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(vu.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(vu.isEmptyOrZeroLength(e.hash_values)&&!vu.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let l=e.records[c][n];vu.isEmpty(l)||e.hash_values.push(l)}}if(vu.isEmptyOrZeroLength(e.hash_values))return n0([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(vu.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=Z5(e.schema,e.table),i=await X5.openEnvironment(s,e.table),a=await J5.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await e9(e,a)}catch(c){t9.error(`unable to write transaction due to ${c.message}`)}return n0(a.deleted,a.skipped,a.txn_time)}catch(s){throw s}}o(r9,"lmdbDeleteRecords");function n0(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}o(n0,"createDeleteResponse")});var Db=M((Zwe,i0)=>{"use strict";var n9=(k(),v(K)),Xwe=An();function Lb(e,t){let r=Object.create(null);if(t.length===1&&n9.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}o(Lb,"parseRow");function s9(e,t,r,n){let s=Lb(r,e);n.push(s)}o(s9,"searchAll");function i9(e,t,r,n){let s=Lb(r,e);n[t]=s}o(i9,"searchAllToMap");function o9(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o(o9,"iterateDBI");function el(e,t,r,n,s){let i=Object.create(null);i[s]=e;let a;n===s?a=e:(a=t,n!==void 0&&(i[n]=a)),r[0].push(a),r[1].push(i)}o(el,"pushResults");function a9(e,t,r,n,s,i){t.toString().endsWith(e)&&el(t,r,n,s,i)}o(a9,"endsWith");function c9(e,t,r,n,s,i){t.toString().includes(e)&&el(t,r,n,s,i)}o(c9,"contains");function l9(e,t,r,n,s,i){t>e&&el(t,r,n,s,i)}o(l9,"greaterThanCompare");function u9(e,t,r,n,s,i){t>=e&&el(t,r,n,s,i)}o(u9,"greaterThanEqualCompare");function d9(e,t,r,n,s,i){t<e&&el(t,r,n,s,i)}o(d9,"lessThanCompare");function f9(e,t,r,n,s,i){t<=e&&el(t,r,n,s,i)}o(f9,"lessThanEqualCompare");i0.exports={parseRow:Lb,searchAll:s9,searchAllToMap:i9,iterateDBI:o9,endsWith:a9,contains:c9,greaterThanCompare:l9,greaterThanEqualCompare:u9,lessThanCompare:d9,lessThanEqualCompare:f9,pushResults:el}});var Uu=M((sOe,f0)=>{"use strict";var wa=_t(),tOe=z(),Wn=An(),F_=kt(),Jt=tn().LMDB_ERRORS_ENUM,rOe=ie(),m9=(k(),v(K)),H_=Db(),{parseRow:h9}=H_,nOe=require("lmdb"),{OVERFLOW_MARKER:o0,MAX_SEARCH_KEY_LENGTH:p9}=F_;function a0(e,t,r,n=!1,s=void 0,i=void 0){return tl(e,t,r,(a,c)=>c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}o(a0,"iterateFullIndex");function Pm(e,t,r,n,s,i=!1,a=void 0,c=void 0,l=!1,u=!1){return tl(e,t,r,(d,f,m,h)=>{let T={transaction:d,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!l:!u,exclusiveStart:i===!0?u:l};return h===r?(T.values=!1,f.getRange(T).map(R=>({value:R}))):f.getRange(T)})}o(Pm,"iterateRangeBetween");function tl(e,t,r,n){let s=e.database||e,i=wa.openDBI(s,r);i[F_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&wa.openDBI(s,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=n(a,i,s,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(tl,"setupTransaction");function c0(e,t,r,n){let s;return function(i,a){if(typeof i=="string"&&i.endsWith(o0)){if(!s)if(r)s=wa.openDBI(e,r);else{let l=wa.listDBIs(e);for(let u=0,d=l.length;u<d&&(s=wa.openDBI(e,l[u]),!s[F_.DBI_DEFINITION_NAME].is_hash_attribute);u++);}i=s.get(a,{transaction:t,lazy:!0})[n]}return i}}o(c0,"getOverflowCheck");function E9(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);return tl(e,t,t,(a,c,l)=>(k_(r),r=Lm(l,r),c.getRange({transaction:a,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(u=>h9(u.value,r))))}o(E9,"searchAll");function _9(e,t,r,n=!1,s=void 0,i=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);k_(r),r=Lm(e.database||e,r);let a=new Map;for(let{key:c,value:l}of a0(e,t,t,n,s,i))a.set(c,H_.parseRow(l,r));return a}o(_9,"searchAllToMap");function g9(e,t,r=!1,n=void 0,s=void 0){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=a0(e,void 0,t,r,n,s),c=a.transaction,l=c0(c.database,c,void 0,t);for(let{key:u,value:d}of a){let f=l(u,d);i[f]===void 0&&(i[f]=[]),i[f].push(d)}return i}o(g9,"iterateDBI");function S9(e,t){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);return wa.statDBI(e,t).entryCount}o(S9,"countAll");function T9(e,t,r,n,s=!1,i=void 0,a=void 0){return Oa(e,r,n),tl(e,t,r,(c,l,u,d)=>(n=Wn.convertKeyValueToWrite(n),d===r?l.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:l.getValues(n,{transaction:c,reverse:s,limit:i,offset:a}).map(f=>({key:n,value:f}))))}o(T9,"equals");function R9(e,t,r){return Oa(e,t,r),wa.openDBI(e,t).getValuesCount(r)}o(R9,"count");function y9(e,t,r,n,s=!1,i=void 0,a=void 0){return Oa(e,r,n),tl(e,null,r,(c,l)=>{n=Wn.convertKeyValueToWrite(n);let u=!0;typeof n=="number"&&(u=!1);let d;if(s===!0){let f;for(let m of l.getKeys({transaction:c,start:n}))if(!m.startsWith(n)){f=m;break}return f!==void 0&&(Number.isInteger(a)?a++:i++),d=l.getRange({transaction:c,start:f,end:void 0,reverse:s,limit:i,offset:a}).map(m=>{let{key:h}=m;if(h!==f){if(h.toString().startsWith(n))return m;if(u===!0)return d.DONE}}),d.filter(m=>m)}else return d=l.getRange({transaction:c,start:n,reverse:s,limit:i,offset:a}).map(f=>{if(f.key.toString().startsWith(n))return f;if(u===!0)return d.DONE}),u?d:d.filter(f=>f)})}o(y9,"startsWith");function A9(e,t,r,n,s=!1,i=void 0,a=void 0){return l0(e,t,r,n,s,i,a,!0)}o(A9,"endsWith");function l0(e,t,r,n,s=!1,i=void 0,a=void 0,c=!1){return Oa(e,r,n),tl(e,null,r,(l,u,d,f)=>{let m=c0(d,l,f,r);return a=Number.isInteger(a)?a:0,u.getKeys({transaction:l,end:s?!1:void 0,reverse:s}).flatMap(h=>{let p=h.toString();return p.endsWith(o0)?u.getValues(h,{transaction:l}).map(_=>{let g=m(h,_);if(c?g.endsWith(n):g.includes(n))return{key:g,value:_}}).filter(_=>_):(c?p.endsWith(n):p.includes(n))?u[F_.DBI_DEFINITION_NAME].is_hash_attribute?{key:h,value:h}:u.getValues(h,{transaction:l}).map(_=>({key:h,value:_})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(l0,"contains");function b9(e,t,r,n,s=!1,i=void 0,a=void 0){Oa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Pm(e,t,r,n,l,s,i,a,!0,!1)}o(b9,"greaterThan");function I9(e,t,r,n,s=!1,i=void 0,a=void 0){Oa(e,r,n);let c=typeof n,l;return c==="string"?l="\uFFFF":c==="number"?l=1/0:c==="boolean"&&(l=!0),Pm(e,t,r,n,l,s,i,a,!1,!1)}o(I9,"greaterThanEqual");function N9(e,t,r,n,s=!1,i=void 0,a=void 0){Oa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Pm(e,t,r,l,n,s,i,a,!1,!0)}o(N9,"lessThan");function w9(e,t,r,n,s=!1,i=void 0,a=void 0){Oa(e,r,n);let c=typeof n,l;return c==="string"?l="\0":c==="number"?l=-1/0:c==="boolean"&&(l=!1),Pm(e,t,r,l,n,s,i,a,!1,!1)}o(w9,"lessThanEqual");function O9(e,t,r,n,s,i=!1,a=void 0,c=void 0){if(Wn.validateEnv(e),r===void 0)throw new Error(Jt.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(Jt.START_VALUE_REQUIRED);if(s===void 0)throw new Error(Jt.END_VALUE_REQUIRED);if(n=Wn.convertKeyValueToWrite(n),s=Wn.convertKeyValueToWrite(s),n>s)throw new Error(Jt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Pm(e,t,r,n,s,i,a,c)}o(O9,"between");function C9(e,t,r,n){Wn.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);if(k_(r),r=Lm(s,r),n===void 0)throw new Error(Jt.ID_REQUIRED);let a=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(a=H_.parseRow(c,r)),a}o(C9,"searchByHash");function P9(e,t,r){Wn.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Jt.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}o(P9,"checkHashExists");function L9(e,t,r,n,s=[]){return d0(e,t,r,n,s),u0(e,t,r,n,s).map(i=>i[1])}o(L9,"batchSearchByHash");function D9(e,t,r,n,s=[]){d0(e,t,r,n,s);let i=new Map;for(let[a,c]of u0(e,t,r,n,s))i.set(a,c);return i}o(D9,"batchSearchByHashToMap");function u0(e,t,r,n,s=[]){return tl(e,t,t,(i,a,c)=>{r=Lm(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,H_.parseRow(d,r)];s.push(u)}).filter(u=>u)})}o(u0,"batchHashSearch");function d0(e,t,r,n,s){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.HASH_ATTRIBUTE_REQUIRED);if(k_(r),n==null)throw new Error(Jt.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(Jt.IDS_MUST_BE_ITERABLE)}o(d0,"initializeBatchSearchByHash");function k_(e){if(!Array.isArray(e))throw e===void 0?new Error(Jt.FETCH_ATTRIBUTES_REQUIRED):new Error(Jt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(k_,"validateFetchAttributes");function Oa(e,t,r){if(Wn.validateEnv(e),t===void 0)throw new Error(Jt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Jt.SEARCH_VALUE_REQUIRED);if(r?.length>p9)throw new Error(Jt.SEARCH_VALUE_TOO_LARGE)}o(Oa,"validateComparisonFunctions");function Lm(e,t){return t.length===1&&m9.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=wa.listDBIs(e)),t}o(Lm,"setGetWholeRowAttributes");f0.exports={searchAll:E9,searchAllToMap:_9,count:R9,countAll:S9,equals:T9,startsWith:y9,endsWith:A9,contains:l0,searchByHash:C9,setGetWholeRowAttributes:Lm,batchSearchByHash:L9,batchSearchByHashToMap:D9,checkHashExists:P9,iterateDBI:g9,greaterThan:b9,greaterThanEqual:I9,lessThan:N9,lessThanEqual:w9,between:O9}});var xu=M((oOe,_0)=>{var m0=require("lodash"),h0=at(),$e=require("joi"),M9=ie(),{hdbSchemaTable:Dm,checkValidTable:p0,hdbTable:E0,hdbDatabase:G_}=Di(),{handleHDBError:v9,hdbErrors:U9}=Ee(),{getDatabases:x9}=(Le(),v(ft)),{HTTP_STATUS_CODES:B9}=U9,F9=$e.object({database:G_,schema:G_,table:E0,search_attribute:Dm,search_value:$e.any().required(),get_attributes:$e.array().min(1).items($e.alternatives(Dm,$e.object())).optional(),desc:$e.bool(),limit:$e.number().integer().min(1),offset:$e.number().integer().min(0)}),H9=$e.object({database:G_,schema:G_,table:E0,operator:$e.string().valid("and","or").default("and").lowercase(),offset:$e.number().integer().min(0),limit:$e.number().integer().min(1),get_attributes:$e.array().min(1).items($e.alternatives(Dm,$e.object())).optional(),sort:$e.object({attribute:$e.alternatives(Dm,$e.array().min(1)),descending:$e.bool().optional()}).optional(),conditions:$e.array().min(1).items($e.alternatives($e.object({operator:$e.string().valid("and","or").default("and").lowercase(),conditions:$e.array()}),$e.object({search_attribute:$e.alternatives(Dm,$e.array().min(1)),search_type:$e.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:$e.when("search_type",{switch:[{is:"equals",then:$e.any()},{is:"between",then:$e.array().items($e.alternatives([$e.string(),$e.number()])).length(2)}],otherwise:$e.alternatives($e.string(),$e.number())}).required()}))).required()});_0.exports=function(e,t){let r=null;switch(t){case"value":r=h0.validateBySchema(e,F9);break;case"hashes":let i=function(a){s?s+=". "+a:s=a};var n=i;o(i,"addError");let s;i(p0("database",e.schema)),i(p0("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(a=>typeof a=="string"||typeof a=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=h0.validateBySchema(e,H9);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=M9.checkGlobalSchemaTable(e.schema,e.table);if(s)return v9(new Error,s,B9.NOT_FOUND);let a=x9()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let l=o(d=>{for(let f=0,m=d.conditions.length;f<m;f++){let h=d.conditions[f];h.conditions?l(h):c.push(h.search_attribute)}},"addConditions");t==="conditions"&&l(e);let u=m0.filter(c,d=>d!=="*"&&!d.startsWith?.("$")&&d.attribute!=="*"&&!Array.isArray(d)&&!d.name&&!m0.some(a,f=>f===d||f.attribute===d||f.attribute===d.attribute));if(u&&u.length>0){let d=u.join(", ");return d=d.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${d}'`)}}return r}});var Mb=M((cOe,g0)=>{"use strict";var k9=_t(),G9=xu(),{getSchemaPath:q9}=At();g0.exports=$9;function $9(e){let t=G9(e,"hashes");if(t)throw t;let r=q9(e.schema,e.table);return k9.openEnvironment(r,e.table)}o($9,"initialize")});var vb=M((uOe,S0)=>{"use strict";var V9=Uu(),K9=Mb();S0.exports=Y9;async function Y9(e){let t=await K9(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return V9.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(Y9,"lmdbGetDataByHash")});var Bu=M((fOe,T0)=>{"use strict";var Ub=class{static{o(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};T0.exports=Ub});var y0=M((pOe,R0)=>{"use strict";var hOe=Bu(),W9=Uu(),z9=Mb();R0.exports=j9;async function j9(e){let t=await z9(e),r=global.hdb_schema[e.schema][e.table];return W9.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(j9,"lmdbSearchByHash")});var ri=M((_Oe,A0)=>{"use strict";var xb=class{static{o(this,"SearchObject")}constructor(t,r,n,s,i,a,c,l=!1,u=void 0,d=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=a,this.end_value=c,this.reverse=l,this.limit=u,this.offset=d}};A0.exports=xb});var q_=M((SOe,C0)=>{"use strict";var sn=Uu(),Q9=_t(),J9=ie(),Ve=kt(),rl=(k(),v(K)),X9=Ro(),b0=tn().LMDB_ERRORS_ENUM,{getSchemaPath:Z9}=At(),Io=rl.SEARCH_WILDCARDS;async function e7(e,t,r){let n;e.schema===rl.SYSTEM_SCHEMA_NAME?n=X9[e.table]:n=global.hdb_schema[e.schema][e.table];let s=O0(e,n.hash_attribute,r,t);return N0(e,s,n.hash_attribute,r)}o(e7,"prepSearch");async function N0(e,t,r,n){let s=Z9(e.schema,e.table),i=await Q9.openEnvironment(s,e.table),a=w0(i,e,t,r),c=a.transaction||i;if([Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,Ve.SEARCH_TYPES.SEARCH_ALL,Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(t7(e,r)===!1){let d=e.search_attribute;if(d===r)return n?I0(a,()=>!0):a.map(m=>({[r]:m.key}));let f=o(m=>({[r]:m.value,[d]:m.key}),"toObject");return n?I0(a,f):a.map(f)}let u=e.search_attribute===r?a.map(d=>d.key):a.map(d=>d.value);return n===!0?sn.batchSearchByHashToMap(c,r,e.get_attributes,u):sn.batchSearchByHash(c,r,e.get_attributes,u)}o(N0,"executeSearch");function w0(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:a,limit:c,offset:l}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,l=Number.isInteger(l)?l:void 0,r){case Ve.SEARCH_TYPES.EQUALS:s=sn.equals(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.CONTAINS:s=sn.contains(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.ENDS_WITH:case Ve.SEARCH_TYPES._ENDS_WITH:s=sn.endsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.STARTS_WITH:case Ve.SEARCH_TYPES._STARTS_WITH:s=sn.startsWith(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return sn.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return sn.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case Ve.SEARCH_TYPES.SEARCH_ALL:return sn.searchAll(e,n,t.get_attributes,a,c,l);case Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return sn.searchAllToMap(e,n,t.get_attributes,a,c,l);case Ve.SEARCH_TYPES.BETWEEN:s=sn.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,l);break;case Ve.SEARCH_TYPES.GREATER_THAN:case Ve.SEARCH_TYPES._GREATER_THAN:s=sn.greaterThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.GREATER_THAN_EQUAL:case Ve.SEARCH_TYPES._GREATER_THAN_EQUAL:s=sn.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.LESS_THAN:case Ve.SEARCH_TYPES._LESS_THAN:s=sn.lessThan(e,i,t.search_attribute,t.search_value,a,c,l);break;case Ve.SEARCH_TYPES.LESS_THAN_EQUAL:case Ve.SEARCH_TYPES._LESS_THAN_EQUAL:s=sn.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,l);break;default:return Object.create(null)}return s}o(w0,"searchByType");function I0(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}o(I0,"createMapFromIterable");function t7(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}o(t7,"checkToFetchMore");function O0(e,t,r,n){if(J9.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),a=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Io.indexOf(s)>-1)return r===!0?Ve.SEARCH_TYPES.SEARCH_ALL_TO_MAP:Ve.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Io[0])<0&&s.indexOf(Io[1])<0)return c===!0?r===!0?Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:Ve.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:Ve.SEARCH_TYPES.EQUALS;if(Io.indexOf(i)>=0&&Io.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),Ve.SEARCH_TYPES.CONTAINS;if(Io.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),Ve.SEARCH_TYPES.ENDS_WITH;if(Io.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),Ve.SEARCH_TYPES.STARTS_WITH;if(s.includes(Io[0])||s.includes(Io[1]))return Ve.SEARCH_TYPES.EQUALS;throw new Error(b0.UNKNOWN_SEARCH_TYPE)}else switch(n){case rl.VALUE_SEARCH_COMPARATORS.BETWEEN:return Ve.SEARCH_TYPES.BETWEEN;case rl.VALUE_SEARCH_COMPARATORS.GREATER:return Ve.SEARCH_TYPES.GREATER_THAN;case rl.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return Ve.SEARCH_TYPES.GREATER_THAN_EQUAL;case rl.VALUE_SEARCH_COMPARATORS.LESS:return Ve.SEARCH_TYPES.LESS_THAN;case rl.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return Ve.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(b0.UNKNOWN_SEARCH_TYPE)}}o(O0,"createSearchTypeFromSearchObject");C0.exports={executeSearch:N0,createSearchTypeFromSearchObject:O0,prepSearch:e7,searchByType:w0}});var L0=M((yOe,P0)=>{"use strict";var ROe=ri(),r7=xu(),n7=ie(),s7=(k(),v(K)),i7=q_();P0.exports=o7;function o7(e,t){if(!n7.isEmpty(t)&&s7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=r7(e,"value");if(n)throw n;return i7.prepSearch(e,t,!0)}o(o7,"lmdbGetDataByValue")});var Mm=M((IOe,D0)=>{"use strict";var bOe=ri(),a7=xu(),c7=ie(),l7=(k(),v(K)),u7=q_();D0.exports=d7;async function d7(e,t){if(!c7.isEmpty(t)&&l7.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=a7(e,"value");if(n)throw n;return u7.prepSearch(e,t,!1)}o(d7,"lmdbSearchByValue")});var v0=M((OOe,M0)=>{"use strict";var wOe=kt(),Bb=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=a,this.conditions=s,this.operator=c}},Fb=class{static{o(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},Hb=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};M0.exports={SearchByConditionsObject:Bb,SearchCondition:Fb,SortAttribute:Hb}});var H0=M((DOe,F0)=>{"use strict";var POe=v0().SearchByConditionsObject,f7=ri(),m7=xu(),kb=Uu(),$_=kt(),{Resource:LOe}=(ba(),v(_U)),B0=q_(),h7=Db(),p7=require("lodash"),{getSchemaPath:E7}=At(),U0=_t(),{handleHDBError:_7,hdbErrors:g7}=Ee(),{HTTP_STATUS_CODES:S7}=g7,T7=1e8;F0.exports=R7;async function R7(e){let t=m7(e,"conditions");if(t)throw _7(t,t.message,S7.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=E7(e.schema,e.table),n=await U0.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let u of e.conditions)U0.openDBI(n,u.search_attribute);let i=p7.sortBy(e.conditions,u=>{if(u.estimated_count===void 0){let d=u.search_type;d===$_.SEARCH_TYPES.EQUALS?u.estimated_count=kb.count(n,u.search_attribute,u.search_value):d===$_.SEARCH_TYPES.CONTAINS||d===$_.SEARCH_TYPES.ENDS_WITH?u.estimated_count=1/0:u.estimated_count=T7}return u.estimated_count}),a=n.useReadTransaction();a.database=n;let c=await x0(a,e,i[0],s.hash_attribute),l;if(!e.operator||e.operator.toLowerCase()==="and"){let u=n.dbis[s.hash_attribute],d=i.slice(1).map(B0.filterByType),f=d.length,m=kb.setGetWholeRowAttributes(n,e.get_attributes);l=c.map(h=>u.get(h,{transaction:a,lazy:!0})),f>0&&(l=l.filter(h=>{for(let p=0;p<f;p++)if(!d[p](h))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(h=>h7.parseRow(h,m))}else{for(let f=1;f<i.length;f++){let m=i[f],h=await x0(a,e,m,s.hash_attribute);c=c.concat(h)}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=kb.batchSearchByHash(a,s.hash_attribute,e.get_attributes,c)}return l.onDone=()=>{a.done()},l}o(R7,"lmdbSearchByConditions");async function x0(e,t,r,n){let s=new f7(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===$_.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,B0.searchByType(e,s,i,n).map(a=>a.value)}o(x0,"executeConditionSearch")});var vm=M((vOe,k0)=>{"use strict";var y7=(k(),v(K)).OPERATIONS_ENUM,Gb=class{static{o(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=y7.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};k0.exports=Gb});var qb=M((xOe,z0)=>{"use strict";var V0=ri(),K0=vm(),Y0=Mm(),W0=Cm(),Pn=(k(),v(K)),G0=ie(),q0=_t(),{getTransactionAuditStorePath:A7,getSchemaPath:b7}=At(),$0=z();z0.exports=I7;async function I7(e){try{if(G0.isEmpty(global.hdb_schema[e.schema])||G0.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await N7(e),await w7(e);let t=b7(e.schema,e.table);try{await q0.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")$0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=A7(e.schema,e.table);await q0.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")$0.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(I7,"lmdbDropTable");async function N7(e){let t=new V0(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Y0(t)),n=[];for(let i=0;i<r.length;i++){let a=r[i];n.push(a.id)}if(n.length===0)return;let s=new K0(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await W0(s)}o(N7,"deleteAttributesFromSystem");async function w7(e){let t=new V0(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Pn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Y0(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(n=a)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new K0(Pn.SYSTEM_SCHEMA_NAME,Pn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await W0(s)}catch(i){throw i}}o(w7,"dropTableFromSystem")});var Q0=M((FOe,j0)=>{"use strict";var O7=require("fs-extra"),C7=ri(),P7=Bu(),L7=vm(),D7=qb(),M7=Cm(),v7=vb(),U7=Mm(),No=(k(),v(K)),{getSchemaPath:x7}=At(),{handleHDBError:B7,hdbErrors:F7}=Ee(),{HDB_ERROR_MSGS:H7,HTTP_STATUS_CODES:k7}=F7;j0.exports=G7;async function G7(e){let t;try{t=await q7(e.schema);let r=new C7(No.SYSTEM_SCHEMA_NAME,No.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,No.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[No.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await U7(r));for(let a=0;a<n.length;a++){let c={schema:t,table:n[a].name};try{await D7(c)}catch(l){if(l.message!=="invalid environment")throw l}}let s=new L7(No.SYSTEM_SCHEMA_NAME,No.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await M7(s);let i=x7(t);await O7.remove(i)}catch(r){throw r}}o(G7,"lmdbDropSchema");async function q7(e){let t=new P7(No.SYSTEM_SCHEMA_NAME,No.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[No.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await v7(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw B7(new Error,H7.SCHEMA_NOT_FOUND(e),k7.NOT_FOUND,void 0,void 0,!0);return n}o(q7,"validateDropSchema")});var Um=M((kOe,J0)=>{"use strict";var $b=class{static{o(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};J0.exports=$b});var Kb=M(($Oe,X0)=>{"use strict";var $7=require("fs-extra"),V_=_t(),{getTransactionAuditStorePath:V7}=At(),Vb=kt(),qOe=Um();X0.exports=K7;async function K7(e){let t;try{let r=V7(e.schema,e.table);await $7.mkdirp(r),t=await V_.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{V_.createDBI(t,Vb.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),V_.createDBI(t,Vb.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),V_.createDBI(t,Vb.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}o(K7,"createTransactionsAuditEnvironment")});var tB=M((YOe,eB)=>{"use strict";var Yb=(k(),v(K)),Z0=_t(),Y7=Xc(),{getSystemSchemaPath:W7,getSchemaPath:z7}=At(),KOe=Ro(),j7=U_(),Wb=v_(),Q7=z(),J7=Kb();eB.exports=X7;async function X7(e,t){let r=z7(t.schema,t.table),n=new Wb(t.schema,t.table,Yb.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Wb(t.schema,t.table,Yb.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Wb(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Z0.createEnvironment(r,t.table),e!==void 0){let a=await Z0.openEnvironment(W7(),Yb.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Y7.insertRecords(a,HDB_TABLE_INFO.hash_attribute,hdbTableAttributes,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await zb(n),await zb(s),await zb(i)}await J7(t)}catch(a){throw a}}o(X7,"lmdbCreateTable");async function zb(e){try{await j7(e)}catch(t){Q7.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(zb,"createAttribute")});var nB=M((zOe,rB)=>{"use strict";var Z7=Nm(),eee=zf(),tee=x_(),xm=(k(),v(K)),ree=Xc().updateRecords,nee=_t(),{getSchemaPath:see}=At(),iee=wm(),oee=z();rB.exports=aee;async function aee(e){try{let{schemaTable:t,attributes:r}=Z7(e);eee(e,r,t.hash_attribute),e.schema!==xm.SYSTEM_SCHEMA_NAME&&(r.includes(xm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(xm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(xm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(xm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await tee(e.hdb_auth_header,t,r),s=see(e.schema,e.table),i=await nee.openEnvironment(s,e.table),a=await ree(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await iee(e,a)}catch(c){oee.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schemaTable:t,new_attributes:n,txn_time:a.txn_time}}catch(t){throw t}}o(aee,"lmdbUpdateRecords")});var iB=M((QOe,sB)=>{"use strict";var cee=(k(),v(K)).OPERATIONS_ENUM,jb=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=cee.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};sB.exports=jb});var aB=M((ZOe,oB)=>{"use strict";var XOe=iB(),lee=Nm(),uee=zf(),dee=x_(),Bm=(k(),v(K)),fee=Xc().upsertRecords,mee=_t(),{getSchemaPath:hee}=At(),pee=wm(),Eee=z(),{handleHDBError:_ee,hdbErrors:gee}=Ee();oB.exports=See;async function See(e){let t;try{t=lee(e)}catch(l){throw _ee(l,l.message,gee.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schemaTable:r,attributes:n}=t;uee(e,n,r.hash_attribute),e.schema!==Bm.SYSTEM_SCHEMA_NAME&&(n.includes(Bm.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(Bm.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(Bm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(Bm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await dee(e.hdb_auth_header,r,n),i=hee(e.schema,e.table),a=await mee.openEnvironment(i,e.table),c=await fee(a,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await pee(e,c)}catch(l){Eee.error(`unable to write transaction due to ${l.message}`)}return{written_hashes:c.written_hashes,schemaTable:r,new_attributes:s,txn_time:c.txn_time}}o(See,"lmdbUpsertRecords")});var lB=M((tCe,cB)=>{"use strict";var Qb=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};cB.exports=Qb});var dB=M((nCe,uB)=>{"use strict";var Jb=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};uB.exports=Jb});var hB=M((oCe,mB)=>{"use strict";var Xb=_t(),{getTransactionAuditStorePath:Tee}=At(),iCe=lB(),Fm=kt(),Ree=ie(),fB=dB(),yee=require("util").promisify,Aee=yee(setTimeout),bee=1e4,Iee=100;mB.exports=Nee;async function Nee(e){let t=Tee(e.schema,e.table),r=await Xb.openEnvironment(t,e.table,!0),n=Xb.listDBIs(r);Xb.initializeDBIs(r,Fm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fB;do s=await wee(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 Aee(Iee);while(s.transactions_deleted>0);return i}o(Nee,"deleteAuditLogsBefore");async function wee(e,t){let r=new fB;try{let n=e.dbis[Fm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:a}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=a[Fm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Ree.isEmpty(c)||(s=e.dbis[Fm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let l=0;l<a.hash_values.length;l++)s=e.dbis[Fm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[l],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>bee)break}return await s,r}catch(n){throw n}}o(wee,"deleteTransactions")});var EB=M((cCe,pB)=>{"use strict";var Zb=class{static{o(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};pB.exports=Zb});var gB=M((dCe,_B)=>{"use strict";var Oee=ri(),Cee=vm(),uCe=EB(),Mi=(k(),v(K)),Pee=ie(),eI=_t(),Lee=Ro(),Dee=Mm(),Mee=Cm(),{getSchemaPath:vee}=At();_B.exports=Uee;async function Uee(e,t=!0){let r;e.schema===Mi.SYSTEM_SCHEMA_NAME?r=Lee[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await Bee(e),s=vee(e.schema,e.table),i=await eI.openEnvironment(s,e.table);return t===!0&&await xee(e,i,r.hash_attribute),eI.dropDBI(i,e.attribute),n}o(Uee,"lmdbDropAttribute");async function xee(e,t,r){let n=eI.openDBI(t,r),s,i=e.attribute;for(let{key:a,value:c,version:l}of n.getRange({start:!1,versions:!0})){let u={};for(let d in c)d!==i&&(u[d]=c[d]);s=t.dbis[r].put(a,u,l)}await s}o(xee,"removeAttributeFromAllObjects");async function Bee(e){let t=new Oee(Mi.SYSTEM_SCHEMA_NAME,Mi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await Dee(t)).filter(a=>a[Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Pee.isEmptyOrZeroLength(n))throw new Error(`Attribute '${drop_attribute_obj.attribute}' was not found in '${drop_attribute_obj.schema}.${drop_attribute_obj.table}'`);let s=n.map(a=>a[Mi.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Cee(Mi.SYSTEM_SCHEMA_NAME,Mi.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return Mee(i)}o(Bee,"dropAttributeFromSystem")});var bB=M((hCe,AB)=>{"use strict";var tI=_t(),Fu=kt(),mCe=An(),rI=(k(),v(K)),SB=ie(),{getTransactionAuditStorePath:Fee}=At(),Hee=Uu(),K_=Du(),kee=z();AB.exports=Gee;async function Gee(e){let t=Fee(e.schema,e.table),r=await tI.openEnvironment(t,e.table,!0),n=tI.listDBIs(r);tI.initializeDBIs(r,Fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case rI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return TB(r,e.search_values);case rI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,$ee(r,e.search_values,s);case rI.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return qee(r,e.search_values);default:return TB(r)}}o(Gee,"readAuditLog");function TB(e,t=[0,Date.now()]){SB.isEmpty(t[0])&&(t[0]=0),SB.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Fu.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 K_,s))}o(TB,"searchTransactionsByTimestamp");function qee(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let a of e.dbis[Fu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(a);r.set(s,yB(e,i))}return Object.fromEntries(r)}o(qee,"searchTransactionsByUsername");function $ee(e,t,r){let n=new Map;for(let c=0,l=t.length;c<l;c++){let u=t[c],d=Hee.equals(e,Fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Fu.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=yB(e,s),a=new Map;for(let c=0;c<i.length;c++){let l=i[c],u=l.timestamp,d=n.get(u);RB(l,"records",r,d,a),RB(l,"original_records",r,d,a)}return Object.fromEntries(a)}o($ee,"searchTransactionsByHashValues");function RB(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],l=c[r].toString();if(n.indexOf(l)>=0)if(s.has(l)){let u=s.get(l),d=u[u.length-1];if(d.timestamp===i)d[t]=[c];else{let f=new K_(e.operation,e.user_name,i,void 0);f[t]=[c],u.push(f)}}else{let u=new K_(e.operation,e.user_name,i,void 0);u[t]=[c],s.set(l,[u])}}}o(RB,"loopRecords");function yB(e,t){let r=[];try{let n=e.dbis[Fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let a=Object.assign(new K_,i);r.push(a)}}catch(i){kee.warn(i)}return r}catch(n){throw n}}o(yB,"batchSearchTransactions")});var NB=M((gCe,IB)=>{"use strict";var{getSchemaPath:ECe}=At(),_Ce=_t(),{database:Vee}=(Le(),v(ft));IB.exports={writeTransaction:Kee};async function Kee(e,t,r){return Vee({database:e,table:t}).transaction(r)}o(Kee,"writeTransaction")});var PB=M((TCe,CB)=>{"use strict";var{getSchemaPath:wB}=At(),OB=_t();CB.exports={flush:Yee,resetReadTxn:Wee};async function Yee(e,t){return(await OB.openEnvironment(wB(e,t),t.toString())).flushed}o(Yee,"flush");async function Wee(e,t){try{(await OB.openEnvironment(wB(e,t),t.toString())).resetReadTxn()}catch{}}o(Wee,"resetReadTxn")});var vB=M((yCe,MB)=>{"use strict";var{Readable:zee}=require("stream"),{getDatabases:jee}=(Le(),v(ft)),{readSync:Qee,openSync:Jee,createReadStream:LB}=require("fs"),{open:Xee}=require("lmdb"),DB=Tm(),Zee=Rm(),{AUDIT_STORE_OPTIONS:ete}=(uo(),v(rU)),{INTERNAL_DBIS_NAME:tte,AUDIT_STORE_NAME:rte}=kt();MB.exports=ste;var nI=32768,nte=100;async function ste(e){let t=e.database||e.schema||"data",r=jee()[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=Xee({noSync:!0,maxDbs:Zee.MAX_DBS}),m,h=f.openDB(tte,new DB(!1)),p=d.useReadTransaction(),_=0,g=o(async function(T,R){R.encoding="binary",R.encoder=void 0;let I=f.openDB(T,R),P=d.openDB(T,R);for(let{key:Y,version:te,value:x}of P.getRange({start:null,transaction:p,versions:P.useVersions}))m=I.put(Y,x,te),_++%nte===0&&(await new Promise($=>setTimeout($,20)),p.openTimer&&(p.openTimer=0))},"copyDatabase");for(let{key:T,value:R}of d.getRange({transaction:p,start:!1}))if(s.some(I=>T.startsWith?.(I+"/"))){h.put(T,R);let[,I]=T.split("/"),P=!I,Y=new DB(!P,P);await g(T,Y)}e.include_audit&&await g(rte,{...ete}),await m;let y=LB(f.path);return y.headers=l(),y.on("close",()=>{p.done(),f.close()}),y}let a=r[Object.keys(r)[0]].primaryStore,c=Jee(a.path);return a.transaction(()=>{let u=Buffer.alloc(nI);Qee(c,u,0,nI),a.resetReadTxn();let d=a.useReadTransaction();d.renew();let f=LB(null,{fd:c,start:nI}),m=new zee.from(async function*(){yield u;for await(let h of f)d.openTimer&&(d.openTimer=0),yield h;d.done()}());return m.headers=l(),m});function l(){let u=new Map;return u.set("content-type","application/octet-stream"),u.set("content-disposition",`attachment; filename="${t}"`),u.set("date",n),u}}o(ste,"getBackup")});var BB=M((bCe,xB)=>{"use strict";var ite=z(),{handleHDBError:ote}=Ee(),ate=lx(),cte=U_(),lte=wb(),ute=Qx(),dte=Cm(),fte=vb(),mte=y0(),hte=L0(),pte=Mm(),Ete=H0(),_te=Q0(),gte=tB(),Ste=nB(),Tte=aB(),Rte=hB(),yte=qb(),Ate=gB(),bte=bB(),Ite=NB(),UB=PB(),Nte=vB(),sI=class extends ate{static{o(this,"LMDBBridge")}async searchByConditions(t){return Ete(t)}async getDataByHash(t){return await fte(t)}async searchByHash(t){return await mte(t)}async getDataByValue(t,r){return await hte(t,r)}async searchByValue(t){return await pte(t)}async createSchema(t){return await ute(t)}async dropSchema(t){return await _te(t)}async createTable(t,r){return await gte(t,r)}async dropTable(t){return await yte(t)}async createAttribute(t){return await cte(t)}async createRecords(t){return await lte(t)}async updateRecords(t){return await Ste(t)}async upsertRecords(t){try{return await Tte(t)}catch(r){throw ote(r,null,null,ite.ERR,r)}}async deleteRecords(t){return await dte(t)}async dropAttribute(t){return await Ate(t)}async deleteAuditLogsBefore(t){return await Rte(t)}async readAuditLog(t){return await bte(t)}writeTransaction(t,r,n){return Ite.writeTransaction(t,r,n)}flush(t,r){return UB.flush(t,r)}resetReadTxn(t,r){return UB.resetReadTxn(t,r)}getBackup(t){return Nte(t)}};xB.exports=sI});function Ln(e){let t=e.getChanges();return t||(t=Object.create(null),e._setChanges(t)),t}function km(e,t,r=!1){let n=e.prototype,s={},i=t.attributes||t.properties||[];for(let l of i){let u=l.name,d,f;if(l.resolve)f={get(){return l.resolve(this,this.getContext?.())},set(m){return l.set(this,m)},configurable:!0};else{switch(l.type){case"String":d=o(function(m){if(!(typeof m=="string"||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a string, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"ID":d=o(function(m){if(!(typeof m=="string"||m?.length>0&&m.every?.(h=>typeof h=="string")||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a string, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Float":case"Number":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="number"||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a number, attempt to assign ${h}`);Ln(this)[u]=m},"set");break;case"Int":d=o(function(m){let h=m?.__op__?m.value:m;if(!(h>>0===h||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs((h>>0)-h)<=1)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new zn.ClientError(`${u} must be an integer between -2147483648 and 2147483647, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Long":d=o(function(m){let h=m?.__op__?m.value:m;if(!(Math.round(h)===m&&Math.abs(h)<=9007199254740992||m==null&&l.nullable!==!1))if(typeof h=="number"&&Math.abs(h)<=9007199254740992)h=Math.round(h),m?.__op__?m.value=h:m=h;else throw new zn.ClientError(`${u} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"BigInt":d=o(function(m){let h=m?.__op__?m.value:m;if(!(typeof h=="bigint"||m==null&&l.nullable!==!1))if(typeof h=="string"||typeof h=="number")h=BigInt(h),m?.__op__?m.value=h:m=h;else throw new zn.ClientError(`${u} must be a number, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Boolean":d=o(function(m){if(!(typeof m=="boolean"||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a boolean, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Date":d=o(function(m){if(!(m instanceof Date||m==null&&l.nullable!==!1))if(typeof m=="string"||typeof m=="number")m=new Date(m);else throw new zn.ClientError(`${u} must be a Date, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Bytes":d=o(function(m){if(!(m instanceof Uint8Array||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a Buffer or Uint8Array, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Blob":d=o(function(m){if(!(m instanceof Ss||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be a Blob, attempt to assign ${m}`);Ln(this)[u]=m},"set");break;case"Any":case void 0:d=o(function(m){Ln(this)[u]=m},"set");break;default:d=o(function(m){if(!(typeof m=="object"||m==null&&l.nullable!==!1))throw new zn.ClientError(`${u} must be an object, attempt to assign ${m}`);Ln(this)[u]=m},"set")}f={get(){let m=this.getChanges?.();if(m&&u in m){let p=m[u];if(p?.__op__){let _=this.getRecord()?.[u];return p.update(_)}return p}let h=this.getRecord()?.[u];if(h&&typeof h=="object"){let p=iI(h,l);if(p)return m||this._setChanges(m=Object.create(null)),m[u]=p}return h},set:d,enumerable:!0,configurable:!0}}f.get.isAttribute=!0,s[u]=f,(!(u in n)||Object.getOwnPropertyDescriptor(n,u)?.get?.isAttribute)&&Object.defineProperty(n,u,f)}a("getProperty",function(l){let u=s[l];if(u)return u.get.call(this);let d=this.getChanges();return d?.[l]!==void 0?d[l]:this.getRecord()?.[l]}),a("set",function(l,u){let d=s[l];if(d)return d.set.call(this,u);if(t.sealed)throw new zn.ClientError("Can not add a property to a sealed table schema");Ln(this)[l]=u}),a("deleteProperty",function(l){Ln(this)[l]=void 0}),a("toJSON",function(){let l=this.getChanges?.(),u;for(let f in l){u||(u={...this.getRecord()});let m=l[f];if(m?.__op__){let h=u[f];m=m.update(h)}u[f]=m}return Object.keys(this).length>0&&(u||(u={...this.getRecord()}),Object.assign(u,this)),u||this.getRecord()}),n.get||a("get",n.getProperty),n.delete||a("delete",n.deleteProperty),n.then||a("then",null);function a(l,u){Object.defineProperty(n,l,{value:u,configurable:!0})}o(a,"setMethod");let c=n;do{let l=Object.getPrototypeOf(c);if(l===Object.prototype){Object.setPrototypeOf(c,r?kB:HB);break}c=l}while(c&&c!==HB&&c!==kB)}function GB(e,t,r){if(typeof t=="string"){if(t==="then"||t==="getRecord"||t==="getChanges")return;if(FB[t])return FB[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=iI(s);if(i)return n||(n=Object.create(null),r._setChanges(n)),n[t]=i,i}return s}}function wte(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 iI(e,t){let r;switch(e.constructor){case Object:return t?(r=t.TrackedObject,r||(t.TrackedObject=r=class extends sl{static{o(this,"TrackedObject")}},km(r,t)),new r(e)):new sl(e);case Array:let n=new W_(e.length,e);for(let s=0,i=e.length;s<i;s++){let a=e[s];a&&typeof a=="object"&&(a=iI(a,t?.elements)),n[s]=a}return n;default:return e}}function z_(e){let t=e.getChanges?.(),r;for(let s in t){r||(r=e.getRecord?{...e.getRecord()}:{});let i=t[s];if(i&&typeof i=="object")if(i.__op__){let a=r[s];i=i.update(a)}else i=z_(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 Ca(e,t=e.getChanges?.()){let r;if(!e)return t;if(e.getRecord&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let a=Ca(i);a!==i&&r===e&&(r=e.slice(0)),i=a}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r={...e.getRecord?e.getRecord():e});let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=nA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Ca(s);r[n]=s}if(!Array.isArray(e)&&e.getRecord)for(let n in e)Ote.call(e,n)&&(r||(r={...e.getRecord()}),r[n]=e[n]);return r?Object.freeze(r):e.getRecord?e.getRecord():e}function Y_(e){let t=e.getRecord?.();if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[nl]||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(Y_(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(Y_(s))return!0}else return!0}else return!0}}return!1}var zn,FB,HB,kB,sl,Ote,nl,W_,Hm,oI=fe(()=>{zn=w(Ee());qE();Ts();o(Ln,"getChanges");o(km,"assignTrackedAccessors");FB=Object.prototype,HB=new Proxy({},{get:GB}),kB=new Proxy({},{get:GB,set:wte});o(GB,"getProxiedProperty");o(wte,"setProxiedProperty");o(iI,"trackObject");sl=class{static{o(this,"GenericTrackedObject")}#e;#t;constructor(t){if(t?.getRecord)throw new Error("Can not track an already tracked object, check for circular references");this.#e=t}getRecord(){return this.#e}setRecord(t){this.#e=t}getChanges(){return this.#t}_setChanges(t){this.#t=t}};km(sl,{},!0);o(z_,"collapseData");Ote=Object.prototype.hasOwnProperty;o(Ca,"updateAndFreeze");o(Y_,"hasChanges");nl=Symbol.for("has-array-changes"),W_=class extends Array{static{o(this,"TrackedArray")}#e;[nl];constructor(t,r){super(t),this.#e=r}getRecord(){return this.#e}splice(...t){return this[nl]=!0,super.splice(...t)}push(...t){return this[nl]=!0,super.push(...t)}pop(){return this[nl]=!0,super.pop()}unshift(...t){return this[nl]=!0,super.unshift(...t)}shift(){return this[nl]=!0,super.shift()}};W_.prototype.constructor=Array;Hm=class{static{o(this,"Addition")}__op__="add";value;constructor(t){this.value=t}update(t){return(+t||0)+this.value}}});var jB={};Ce(jB,{ResourceBridge:()=>lI});function uI({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 qB(e,t){let r=vi(e),n=uI(e,r);if(!r)throw new ni.ClientError(`Table ${e.table} not found`);let s;n&&r.attributes.length-n.length>2&&n.length<5&&(s=!0);let i={user:e.hdb_user,onlyIfCached:e.onlyIfCached,noCacheStore:e.noCacheStore,noCache:e.noCache,replicateFrom:e.replicateFrom},a;vt(i,()=>new Promise(u=>a=u));let c=e.ids||e.hash_values,l=0;return{[Symbol.asyncIterator](){return{async next(){if(l<c.length){let u=c[l++],d;try{d=await r.get({id:u,lazy:s,select:n},i),d=d&&z_(d)}catch(f){d={message:(0,zB.errorToString)(f)}}return t?{value:{key:u,value:d}}:{value:d}}else return a(),{done:!0}},return(u){return a(),{value:u,done:!0}},throw(u){return a(),{done:!0}}}}}}function vi(e){let t=e.database||e.schema||Pte,r=it()[t];if(!r)throw(0,ni.handleHDBError)(new Error,Cte.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function $B(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*VB(e,t,r,n){let s,i=0;for await(let a of e.getHistory(t,r)){let c=a.operation??a.type;c==="put"&&(c="upsert");let{id:l,version:u,value:d}=a;if(s?.timestamp===u)s.hash_values.push(l),s.records.push(d);else{if(s&&(yield s,i++,n&&n<=i)){s=void 0;break}s={operation:c,user_name:a.user,timestamp:u,hash_values:[l],records:[d]}}}s&&(yield s)}var KB,j_,ni,YB,aI,cI,WB,zB,Cte,Pte,Lte,Dte,lI,QB=fe(()=>{KB=w(BB()),j_=w(xu()),ni=w(Ee());Le();YB=w(Nm());k();aI=w(bo()),cI=w(ti()),WB=w(ie());Uc();oI();zB=w(z()),{HDB_ERROR_MSGS:Cte}=ni.hdbErrors,Pte="data",Lte=1e4,Dte=10,lI=class extends KB.default{static{o(this,"ResourceBridge")}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let a of t.conditions||[])a?.attribute!==void 0&&(a.search_attribute=a.attribute),a?.comparator!==void 0&&(a.search_type=a.comparator),a?.value!==void 0&&(a.search_value=a.value);let r=(0,j_.default)(t,"conditions");if(r)throw(0,ni.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=vi(t);if(!n)throw new ni.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(a){if("conditions"in a&&a.conditions)return a.conditions=a.conditions.map(i),a;{let c=a;return{attribute:c.search_attribute??c.attribute,comparator:c.search_type??c.comparator,value:c.search_value!==void 0?c.search_value:c.value}}}return o(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:uI(t,n),sort:t.sort,allowFullScan:!0},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let a of n)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new ni.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");n=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.database??r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration,audit:r.audit})}async createAttribute(t){return await vi(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=vi(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=o((a,c,l)=>(c={...c},delete c[n],r.primaryStore.ifVersion(a,l,()=>r.primaryStore.put(a,c,l)).then(u=>{if(!u){let{value:d,version:f}=r.primaryStore.getEntry(a);return i(a,d,f)}})),"deleteRecord");for(let{key:a,value:c,version:l}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(a,c,l),await new Promise(u=>setImmediate(u));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){return vi(t).dropTable()}createSchema(t){return Hu({database:t.schema,table:null}),aI.signalSchemaChange(new cI.SchemaEventMsg(process.pid,G.CREATE_SCHEMA,t.schema))}async dropSchema(t){await dI(t.schema),aI.signalSchemaChange(new cI.SchemaEventMsg(process.pid,G.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,YB.default)(t),s,i=it()[t.schema][t.table],a={user:t.hdb_user,expiresAt:t.expiresAt,originatingOperation:t.operation};return t.replicateTo&&(a.replicateTo=t.replicateTo),t.replicatedConfirmation&&(a.replicatedConfirmation=t.replicatedConfirmation),vt(a,async c=>{if(!i.schemaDefined){s=[];for(let d of n)i.attributes.find(m=>m.name==d)||s.push(d);s.length>0&&await i.addAttributes(s.map(d=>({name:d,indexed:!0})))}let l=[],u=[];for(let d of t.records){let f=d[i.primaryKey],m=f!=null&&await i.get(f,a);if(t.requires_existing&&!m||t.requires_no_existing&&m){u.push(d[i.primaryKey]);continue}m&&(m=z_(m));for(let h in d)if(Object.prototype.hasOwnProperty.call(d,h)){let p=d[h];if(typeof p=="function")try{let _=p([[m]]);Array.isArray(_)&&(p=_[0].func_val,d[h]=p)}catch(_){throw _.message+="Trying to set key "+h+" on object"+JSON.stringify(d),_}}if(m)for(let h in m)Object.prototype.hasOwnProperty.call(d,h)||(d[h]=m[h]);await(f==null?i.create(d,a):i.put(d,a)),l.push(d[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:l,new_attributes:s,skipped_hashes:u}})}async deleteRecords(t){let r=it()[t.schema][t.table],n={user:t.hdb_user};return t.replicateTo&&(n.replicateTo=t.replicateTo),t.replicatedConfirmation&&(n.replicatedConfirmation=t.replicatedConfirmation),vt(n,async s=>{let i=t.hash_values||t.records.map(l=>l[r.primaryKey]),a=[],c=[];for(let l of i)await r.delete(l,n)?a.push(l):c.push(l);return $B(a,c,s.timestamp)})}async deleteRecordsBefore(t){let r=it()[t.schema][t.table];if(!r.createdTimeProperty)throw new ni.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:AE.LESS}]}),s=!1,i=[],a=[],c=0,l=[],u=o(async()=>{let d=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:l});i.push(...d.deleted_hashes),a.push(...d.skipped_hashes),await(0,WB.asyncSetTimeout)(Dte),l=[],s=!0},"chunkDelete");for await(let d of n)l.push(d[r.primaryKey]),c++,c%Lte===0&&await u();return l.length>0&&await u(),s?$B(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,j_.default)(t,"hashes");if(r)throw r;return qB(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of qB(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&Uy[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=t.attribute),t.value!==void 0&&(t.search_value=t.value);let n=(0,j_.default)(t,"value");if(n)throw n;let s=vi(t);if(!s)throw new ni.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===AE.BETWEEN&&(i=[i,t.end_value]);let a=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,sort:t.sort,select:uI(t,s)},{onlyIfCached:t.onlyIfCached,noCacheStore:t.noCacheStore,noCache:t.noCache,replicateFrom:t.replicateFrom})}async getDataByValue(t,r){let n=new Map,s=vi(t);t.get_attributes&&!t.get_attributes.includes(s.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(s.primaryKey);for await(let i of this.searchByValue(t,r))n.set(i[s.primaryKey],i);return n}resetReadTxn(t,r){vi({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return vi(t).deleteHistory(t.timestamp,t.cleanup_deleted_records)}async readAuditLog(t){let r=vi(t),n={};switch(t.search_type){case bE.HASH_VALUE:for(let s of t.search_values)n[s]=(await r.getHistoryOfRecord(s)).map(i=>{let a=i.operation??i.type;return a==="put"&&(a="upsert"),{operation:a,timestamp:i.version,user_name:i.user,hash_values:[s],records:[i.value]}});return n;case bE.USERNAME:{let s=t.search_values;for await(let i of VB(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n}default:return VB(r,t.search_values?.[0],t.search_values?.[1],t.limit)}}};o(uI,"getSelect");o(qB,"getRecords");o(vi,"getTable");o($B,"createDeleteResponse");o(VB,"groupRecordsInHistory")});var jn=M((UCe,JB)=>{"use strict";var{ResourceBridge:Mte}=(QB(),v(jB)),vte=ce();vte.initSync();var Q_;function Ute(){return Q_||(Q_=new Mte,Q_)}o(Ute,"getBridge");JB.exports=Ute()});var tF=M((BCe,eF)=>{"use strict";var XB=require("lodash"),Gm=require("mathjs"),xte=require("jsonata"),ZB=ie();eF.exports={distinct_array:o(e=>Array.isArray(e)&&e.length>1?XB.uniqWith(e,XB.isEqual):e,"distinct_array"),searchJSON:Bte,mad:qm.bind(null,Gm.mad),mean:qm.bind(null,Gm.mean),mode:qm.bind(null,Gm.mode),prod:qm.bind(null,Gm.prod),median:qm.bind(null,Gm.median)};function qm(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}o(qm,"aggregateFunction");function Bte(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(ZB.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ZB.isEmpty(this.__ala__.res[r])){let n=xte(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}o(Bte,"searchJSON")});var nF=M((HCe,rF)=>{"use strict";var ar=require("moment"),fI="YYYY-MM-DDTHH:mm:ss.SSSZZ";ar.suppressDeprecationWarnings=!0;rF.exports={current_date:o(()=>ar().utc().format("YYYY-MM-DD"),"current_date"),current_time:o(()=>ar().utc().format("HH:mm:ss.SSS"),"current_time"),extract:o((e,t)=>{switch(t.toLowerCase()){case"year":return ar(e).utc().format("YYYY");case"month":return ar(e).utc().format("MM");case"day":return ar(e).utc().format("DD");case"hour":return ar(e).utc().format("HH");case"minute":return ar(e).utc().format("mm");case"second":return ar(e).utc().format("ss");case"millisecond":return ar(e).utc().format("SSS");default:break}},"extract"),date:o(e=>ar(e).utc().format(fI),"date"),date_format:o((e,t)=>ar(e).utc().format(t),"date_format"),date_add:o((e,t,r)=>ar(e).utc().add(t,r).valueOf(),"date_add"),date_sub:o((e,t,r)=>ar(e).utc().subtract(t,r).valueOf(),"date_sub"),date_diff:o((e,t,r)=>{let n=ar(e).utc(),s=ar(t).utc();return r?n.diff(s,r,!0):n.diff(s)},"date_diff"),now:o(()=>ar().utc().valueOf(),"now"),get_server_time:o(()=>ar().format(fI),"get_server_time"),offset_utc:o((e,t)=>ar(e).utc().utcOffset(t).format(fI),"offset_utc")}});var aF=M((GCe,oF)=>{"use strict";var Fte=require("@turf/area"),Hte=require("@turf/length"),kte=require("@turf/circle"),Gte=require("@turf/difference"),qte=require("@turf/distance"),$te=require("@turf/boolean-contains"),Vte=require("@turf/boolean-equal"),Kte=require("@turf/boolean-disjoint"),Yte=require("@turf/helpers"),sF=(k(),v(K)),Ye=ie(),wo=z();oF.exports={geoArea:Wte,geoLength:zte,geoCircle:jte,geoDifference:Qte,geoDistance:iF,geoNear:Jte,geoContains:Xte,geoEqual:Zte,geoCrosses:ere,geoConvert:tre};function Wte(e){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return Fte.default(e)}catch(t){return wo.trace(t,e),NaN}}o(Wte,"geoArea");function zte(e,t){if(Ye.isEmpty(e))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return Hte.default(e,{units:t||"kilometers"})}catch(r){return wo.trace(r,e),NaN}}o(zte,"geoLength");function jte(e,t,r){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e));try{return kte.default(e,t,{units:r||"kilometers"})}catch(n){return wo.trace(n,e,t),NaN}}o(jte,"geoCircle");function Qte(e,t){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return Gte(e,t)}catch(r){return wo.trace(r,e,t),NaN}}o(Qte,"geoDifference");function iF(e,t,r){if(Ye.isEmpty(e))return NaN;if(Ye.isEmpty(t))return NaN;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return qte.default(e,t,{units:r||"kilometers"})}catch(n){return wo.trace(n,e,t),NaN}}o(iF,"geoDistance");function Jte(e,t,r,n){if(Ye.isEmpty(e)||Ye.isEmpty(t))return!1;if(Ye.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return iF(e,t,n)<=r}catch(s){return wo.trace(s,e,t),!1}}o(Jte,"geoNear");function Xte(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return $te.default(e,t)}catch(r){return wo.trace(r,e,t),!1}}o(Xte,"geoContains");function Zte(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return Vte.default(e,t)}catch(r){return wo.trace(r,e,t),!1}}o(Zte,"geoEqual");function ere(e,t){if(Ye.isEmpty(e)||Ye.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Ye.autoCastJSON(e)),typeof t=="string"&&(t=Ye.autoCastJSON(t));try{return!Kte.default(e,t)}catch(r){return wo.trace(r,e,t),!1}}o(ere,"geoCrosses");function tre(e,t,r){if(Ye.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ye.isEmpty(t))throw new Error("geo_type is required");if(Ye.isEmpty(sF.GEO_CONVERSION_ENUM[t]))throw new Error(`geoType of ${t} is invalid please use one of the following types: ${Object.keys(sF.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Ye.autoCastJSON(e)),Yte[t](e,r)}o(tre,"geoConvert")});var J_=M(($Ce,cF)=>{var il=tF(),Qn=nF(),Ui=aF();cF.exports=e=>{e.aggr.mad=e.aggr.MAD=il.mad,e.aggr.mean=e.aggr.MEAN=il.mean,e.aggr.mode=e.aggr.MODE=il.mode,e.aggr.prod=e.aggr.PROD=il.prod,e.aggr.median=e.aggr.MEDIAN=il.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=il.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=il.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Qn.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Qn.current_time,e.fn.extract=e.fn.EXTRACT=Qn.extract,e.fn.date=e.fn.DATE=Qn.date,e.fn.date_format=e.fn.DATE_FORMAT=Qn.date_format,e.fn.date_add=e.fn.DATE_ADD=Qn.date_add,e.fn.date_sub=e.fn.DATE_SUB=Qn.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Qn.date_diff,e.fn.now=e.fn.NOW=Qn.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Qn.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Qn.get_server_time,e.fn.getdate=e.fn.GETDATE=Qn.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Qn.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Ui.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Ui.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Ui.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Ui.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Ui.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Ui.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Ui.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Ui.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Ui.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Ui.geoNear}});var fF=M((VCe,dF)=>{"use strict";var $m=require("lodash"),Dn=require("alasql");Dn.options.cache=!1;var rre=J_(),lF=require("clone"),X_=require("recursive-iterator"),ke=z(),tt=ie(),ku=jn(),nre=(k(),v(K)),{hdbErrors:sre}=Ee(),{getDatabases:uF}=(Le(),v(ft)),ire="IS NULL",si="There was a problem performing this search. Please check the logs and try again.";rre(Dn);var mI=class{static{o(this,"SQLSearch")}constructor(t,r){if(tt.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(),tt.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!tt.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(si)}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(si)}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(si)}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(si)}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(si)}}_getColumns(){let t=new X_(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(lF(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$m.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=uF()[r.databaseid][r.tableid].primaryKey,this.data[n].__mergedData={},this.data[n].__mergedAttributes=[],this.data[n].__mergedAttrMap={}})}_conditionsToFetchAttributeValues(){if(tt.isEmpty(this.statement.where)){ke.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new X_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!tt.isEmpty(r)&&r.right)if(tt.isNotEmptyAndHasValue(r.right.value)){let n=tt.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new Dn.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=tt.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new Dn.yy.LogicValue({value:i}):n instanceof Dn.yy.StringValue&&tt.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new Dn.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 X_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!tt.isEmpty(nre.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(tt.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(tt.isEmptyOrZeroLength(r.left.columnid)||tt.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(tt.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].ignore){let c=!1;switch(r.op){case"=":!tt.isEmpty(r.right.value)||!tt.isEmpty(r.left.value)?n.add(tt.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let l=Array.isArray(r.right)?r.right:r.left;for(let u=0;u<l.length;u++)if(l[u].value)n.add(l[u].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].values,...n])}}}_setAliasesForColumns(){if(tt.isEmptyOrZeroLength(this.all_table_attributes)&&tt.isEmptyOrZeroLength(this.statement.from)&&tt.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&&$m.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(tt.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);tt.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(tt.isEmptyOrZeroLength(this.all_table_attributes)&&!tt.isEmptyOrZeroLength(this.columns.columns))return t;if(tt.isEmptyOrZeroLength(this.all_table_attributes)&&tt.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Dn.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(lF(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(tt.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(ire)>-1&&this.tables.forEach(s=>{let i={columnid:uF()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$m.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hashName;return s[a]||(s[a]=[],s[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(s[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,a=this.data[i].__hashName,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},l=!1,u=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===a&&(l=!0),!tt.isEmpty(this.exact_search_values[u])&&!this.exact_search_values[u].ignore&&!tt.isEmptyOrZeroLength(this.exact_search_values[u].values))if(l)try{c.hash_values=Array.from(this.exact_search_values[u].values);let d=await ku.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(si)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[u].values).map(async d=>{let f={...c};f.search_value=d;let m=await ku.getDataByValue(f);for(let[h,p]of m)this.data[i].__mergedData[h]?this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]):(this.data[i].__mergedData[h]=[...n[i]],this._updateMergedAttribute(i,h,s.attribute,p[s.attribute]),this._setMergedHashAttribute(i,h))}))}catch(d){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ke.error(d),new Error(si)}else if(!tt.isEmpty(this.comparator_search_values[u])&&!this.comparator_search_values[u].ignore&&!tt.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 h=d[f];c.search_attribute=h.attribute,c.search_value=h.search_value;let p=await ku.getDataByValue(c,h.operation);if(l)for(let[_]of p)this.data[i].__mergedData[_]||(this.data[i].__mergedData[_]=[...n[i]],this._setMergedHashAttribute(i,_));else for(let[_,g]of p)this.data[i].__mergedData[_]?this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]):(this.data[i].__mergedData[_]=[...n[i]],this._updateMergedAttribute(i,_,s.attribute,g[s.attribute]),this._setMergedHashAttribute(i,_))}}catch(d){throw ke.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ke.error(d),new Error(si)}else try{c.search_attribute=s.attribute,c.search_value="*";let d=await ku.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(si)}}}_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 Dn.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,a=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===a});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new Dn.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new Dn.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 Dn.yy.FuncValue:new Dn.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(h=>{h.joinmode&&h.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(h.table);let p=h.joinmode+" JOIN ? AS "+(h.as?h.as:h.table.tableid);h.on&&(p+=" ON "+h.on.toString()),i.push(p),t.push(Object.values(this.data[`${h.table.databaseid_orig}_${h.table.as?h.table.as_orig:h.table.tableid_orig}`].__mergedData))});let a=[],c={};s.forEach(h=>{let p=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.tableid_orig}`].__hashName,_=h.as?h.as_orig:h.tableid_orig;a.push({key:`'${_}.${p}'`,schema:h.databaseid_orig,table:h.as?h.as_orig:h.tableid_orig,keys:new Set}),r.push(`${h.as?h.as:h.tableid}.\`${p}\` AS "${_}.${p}"`),c[h.as?h.as_orig:h.tableid_orig]=this.data[`${h.databaseid_orig}_${h.as?h.as_orig:h.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(h=>{h.is_func?r.push(h.initial_select_column.toString()):h.initial_select_column.tableid?r.push(`${h.initial_select_column.tableid}.${h.initial_select_column.columnid} AS ${h.expression.columnid}`):r.push(`${h.initial_select_column.columnid} AS ${h.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 h=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${l} ${u} ${d} ${f}`,p=this._convertColumnsToIndexes(h,s);m=await Dn.promise(p,t),t=null}catch(h){throw ke.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ke.error(h),new Error("There was a problem processing the data.")}if(m&&m.length>0){for(let h=0,p=m.length;h<p;h++){let _=m[h];a.forEach(g=>{_[g.key]!==null&&_[g.key]!==void 0&&g.keys.add(_[g.key])})}a.forEach(h=>{let p=Object.keys(this.data[`${h.schema}_${h.table}`].__mergedData),_=$m.difference(p,[...h.keys].map(g=>g.toString()));for(let g=0,y=_.length;g<y;g++){let T=_[g];delete this.data[`${h.schema}_${h.table}`].__mergedData[T]}})}return{existing_attributes:c,joined_length:m?m.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new X_(this.columns);for(let{node:i}of s)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&n.push(a)}}n=$m.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(si)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__mergedData,a=[];for(let d in i)a.push(i[d][0]);this.data[n].__mergedAttributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:a,get_attributes:s.columns},l=await ku.getDataByHash(c),u=s.columns.length;for(let d=0,f=a.length;d<f;d++){let m=a[d],h=l.get(m);for(let p=0;p<u;p++){let _=s.columns[p],g=h[_]===void 0?null:h[_];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(a=>{let c=a.aggregatorid?a.expression:a,l=a.aggregatorid?a.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===l}).length===0&&(s.expression.columnid=s.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&this.statement.limit&&!this.statement.joins&&(delete this.statement.limit,delete this.statement.offset);let n;try{let s=this._buildSQL();ke.trace(`Final SQL: ${s}`),n=await Dn.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(sre.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((a,c)=>{let l=s[i],u=new RegExp(`${l}.\`${a}\``,"g"),d=`${l}.[${c}]`;n=n.replace(u,d)});for(let i in this.data)this.data[i].__mergedAttributes.forEach((a,c)=>{let l=new RegExp(`\`${a}\``,"g"),u=`[${c}]`;n=n.replace(l,u)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let a=await ku.getDataByValue(i);for(let[c,l]of a)this.data[s].__mergedData[c]||(l[n.attribute]===void 0&&(l[n.attribute]=null),this.data[s].__mergedData[c]={...r[s]}),this.data[s].__mergedData[c][t[n.attribute]]=l[n.attribute]??null}catch(a){throw ke.error("There was an error when processing this SQL operation. Check your logs"),ke.error(a),new Error(si)}}return Object.values(Object.values(this.data)[0].__mergedData)}};dF.exports=mI});var on=M((YCe,mF)=>{"use strict";var ore=ax();mF.exports={searchByConditions:cre,searchByHash:lre,searchByValue:ure,search:dre};var hI=jn(),{transformReq:pI}=ie(),are=fF();async function cre(e){return pI(e),hI.searchByConditions(e)}o(cre,"searchByConditions");async function lre(e){pI(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of hI.searchByHash(e))r&&t.push(r);return t}o(lre,"searchByHash");async function ure(e){pI(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of hI.searchByValue(e))t.push(r);return t}o(ure,"searchByValue");function dre(e,t){try{let r=new ore(e);r.validate(),new are(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}o(dre,"search")});var xi=M((zCe,_F)=>{"use strict";var Vm=require("crypto"),fre=ce(),{CONFIG_PARAMS:mre}=(k(),v(K)),pF="aes-256-cbc",hre=32,pre=16,EI=64,EF=32,Ere=EI+EF,hF=new Map;_F.exports={encrypt:_re,decrypt:gre,createNatsTableStreamName:Sre};function _re(e){let t=Vm.randomBytes(hre),r=Vm.randomBytes(pre),n=Vm.createCipheriv(pF,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=s.toString("hex");return i+a+c}o(_re,"encrypt");function gre(e){let t=e.substr(0,EI),r=e.substr(EI,EF),n=e.substr(Ere,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),a=Vm.createDecipheriv(pF,Buffer.from(t,"hex"),s),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(gre,"decrypt");function Sre(e,t){let r=fre.get(mre.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=hF.get(r);return n||(n=Vm.createHash("md5").update(r).digest("hex"),hF.set(r,n)),n}o(Sre,"createNatsTableStreamName")});var Pa=M((JCe,RF)=>{"use strict";var QCe=on(),Km=z(),{validateBySchema:gF}=at(),ol=require("joi"),Tre=xi(),Z_=ie(),{handleHDBError:eg,hdbErrors:Rre,ClientError:SF}=Ee(),{HDB_ERROR_MSGS:tg,HTTP_STATUS_CODES:_I}=Rre,TF=ce();TF.initSync();var{getDatabases:gI}=(Le(),v(ft)),yre=require("fs-extra"),Are=(k(),v(K));RF.exports={describeAll:bre,describeTable:rg,describeSchema:Ire};async function bre(e={}){try{let t=Z_.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=gI(),a={},c={},l=[],u=e?.exact_count;for(let f in i){a[f]=!0,!t&&!s&&!r&&(c[f]=e.hdb_user?.role?.permission[f]?.describe);let m=i[f];for(let h in m)try{let p;if(t||s||r)p=await rg({schema:f,table:h,exactCount:u});else if(n&&n[f].describe&&n[f].tables[h].describe){let _=n[f].tables[h].attribute_permissions;p=await rg({schema:f,table:h,exactCount:u},_)}p&&l.push(p)}catch(p){Km.error(p)}}let d={};for(let f in l)t||s||r?(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]):c[l[f].schema]&&(d[l[f].schema]==null&&(d[l[f].schema]={}),d[l[f].schema][l[f].name]=l[f],a[l[f].schema]&&delete a[l[f].schema]);for(let f in a)t||s||r?d[f]={}:c[f]&&(d[f]={});return d}catch(t){return Km.error("Got an error in describeAll"),Km.error(t),eg(new Error,tg.DESCRIBE_ALL_ERR)}}o(bre,"describeAll");async function rg(e,t){Z_.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=gF(e,ol.object({database:ol.string(),table:ol.string().required(),exact_count:ol.boolean().strict()}));if(i)throw new SF(i.message);let c=gI()[r];if(!c)throw eg(new Error,tg.SCHEMA_NOT_FOUND(e.schema),_I.NOT_FOUND);let l=c[n];if(!l)throw eg(new Error,tg.TABLE_NOT_FOUND(e.schema,e.table),_I.NOT_FOUND);function u(h){d.push({attribute:h.attribute,type:h.type,elements:h.elements?.type,indexed:h.indexed,is_primary_key:h.isPrimaryKey,assigned_created_time:h.assignCreatedTime,assigned_updated_time:h.assignUpdatedTime,nullable:h.nullable,properties:h.properties?h.properties.map(p=>({type:p.type,name:p.name})):void 0})}o(u,"pushAtt");let d=[];if(s){let h={};s.forEach(p=>{p.describe&&(h[p.attribute_name]=!0)}),l.attributes.forEach(p=>{h[p.name]&&u(p)})}else l.attributes?.forEach(h=>u(h));let f;try{f=(await yre.stat(l.primaryStore.env.path)).size}catch(h){Km.warn("unable to get database size",h)}let m={schema:r,name:l.tableName,hash_attribute:l.attributes.find(h=>h.isPrimaryKey||h.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(h=>h.name).filter(h=>h&&h!=="NATSReplicator"&&h!=="Replicator")),TF.get(Are.CONFIG_PARAMS.CLUSTERING_ENABLED)&&(m.clustering_stream_name=Tre.createNatsTableStreamName(m.schema,m.name));try{let h=await l.getRecordCount({exactCount:!!e.exact_count});m.record_count=h.recordCount,m.table_size=l.getSize(),m.db_audit_size=l.getAuditSize(),m.estimated_record_range=h.estimatedRange;let p=l.auditStore;if(p)for(let _ of p.getKeys({reverse:!0,limit:1}))m.last_updated_record=_[0];if(!m.last_updated_record&&l.indices.__updatedtime__)for(let _ of l.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))m.last_updated_record=_}catch(h){Km.warn(`unable to stat table dbi due to ${h}`)}return m}o(rg,"descTable");async function Ire(e){Z_.transformReq(e);let t=gF(e,ol.object({database:ol.string(),exact_count:ol.boolean().strict()}));if(t)throw new SF(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=gI()[n];if(!i)throw eg(new Error,tg.SCHEMA_NOT_FOUND(e.schema),_I.NOT_FOUND);let a={};for(let c in i){let l;if(r&&r.tables[c]&&(l=r.tables[c]),Z_.isEmpty(l)||l.describe){let u=await rg({schema:e.schema,table:c,exact_count:e.exact_count},l?l.attribute_permissions:null);u&&(a[u.name]=u)}}return a}o(Ire,"describeSchema")});var Mn=M((ZCe,IF)=>{"use strict";var sg=Rb(),$r=ie(),Nre=require("util"),ig=jn(),wre=ei(),yF=z(),{handleHDBError:al,hdbErrors:Ore}=Ee(),{HTTP_STATUS_CODES:cl}=Ore,Cre=Nre.promisify(wre.getTableSchema),Pre="updated",AF="inserted",bF="upserted";IF.exports={insert:Dre,update:Mre,upsert:vre,validation:Lre,flush:Ure};async function Lre(e){if($r.isEmpty(e))throw new Error("invalid update parameters defined.");if($r.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if($r.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Cre(e.schema,e.table),r=sg(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&$r.isEmptyOrZeroLength(c[n]))throw yF.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(!$r.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw yF.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!$r.isEmpty(c[n])&&c[n]!==""&&s.has($r.autoCast(c[n]))&&(c.skip=!0),s.add($r.autoCast(c[n]));for(let l in c)i[l]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}o(Lre,"validation");async function Dre(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=sg(e);if(t)throw al(new Error,t.message,cl.BAD_REQUEST);$r.transformReq(e);let r=$r.checkSchemaTableExist(e.schema,e.table);if(r)throw al(new Error,r,cl.BAD_REQUEST);let n=await ig.createRecords(e);return ng(AF,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}o(Dre,"insertData");async function Mre(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=sg(e);if(t)throw al(new Error,t.message,cl.BAD_REQUEST);$r.transformReq(e);let r=$r.checkSchemaTableExist(e.schema,e.table);if(r)throw al(new Error,r,cl.BAD_REQUEST);let n=await ig.updateRecords(e);return $r.isEmpty(n.existing_rows)?ng(Pre,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):ng(n.update_action,[],e,n.hashes,void 0,n.txn_time)}o(Mre,"updateData");async function vre(e){if(e.operation!=="upsert")throw al(new Error,"invalid operation, must be upsert",cl.INTERNAL_SERVER_ERROR);let t=sg(e);if(t)throw al(new Error,t.message,cl.BAD_REQUEST);$r.transformReq(e);let r=$r.checkSchemaTableExist(e.schema,e.table);if(r)throw al(new Error,r,cl.BAD_REQUEST);let n=await ig.upsertRecords(e);return ng(bF,n.written_hashes,e,[],n.new_attributes,n.txn_time)}o(vre,"upsertData");function ng(e,t,r,n,s,i){let a={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===AF?(a.inserted_hashes=t,a.skipped_hashes=n,a):e===bF?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=n,a)}o(ng,"returnObject");function Ure(e){return $r.transformReq(e),ig.flush(e.schema,e.table)}o(Ure,"flush")});var TI=M((tPe,OF)=>{var xre=at(),SI=require("joi"),{hdbTable:Bre,hdbDatabase:NF}=Di(),wF={schema:NF,database:NF,table:Bre},Fre={date:SI.date().iso().required()},Hre={timestamp:SI.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OF.exports=function(e,t){let r=t==="timestamp"?{...wF,...Hre}:{...wF,...Fre},n=SI.object(r);return xre.validateBySchema(e,n)}});var LF=M((rPe,PF)=>{var kre=at(),RI=require("joi"),{hdbTable:Gre,hdbDatabase:CF}=Di(),qre=RI.object({schema:CF,database:CF,table:Gre,hash_values:RI.array().required(),ids:RI.array()});PF.exports=function(e){return kre.validateBySchema(e,qre)}});var II=M((nPe,DF)=>{"use strict";var yI=class{static{o(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},AI=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,a){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=a}},bI=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};DF.exports={InsertObject:yI,NoSQLSeachObject:AI,DeleteResponseObject:bI}});var dl=M((iPe,BF)=>{"use strict";var vF=TI(),$re=LF(),ll=ie(),MF=require("moment"),UF=z(),{promisify:Vre,callbackify:Kre}=require("util"),ul=(k(),v(K)),Yre=ei(),NI=Vre(Yre.getTableSchema),wI=jn(),{DeleteResponseObject:Wre}=II(),{handleHDBError:La,hdbErrors:zre}=Ee(),{HDB_ERROR_MSGS:og,HTTP_STATUS_CODES:Da}=zre,jre="records successfully deleted",Qre=Kre(xF);BF.exports={delete:Qre,deleteRecord:xF,deleteFilesBefore:Jre,deleteAuditLogsBefore:Xre};async function Jre(e){let t=vF(e,"date");if(t)throw La(t,t.message,Da.BAD_REQUEST,void 0,void 0,!0);if(ll.transformReq(e),!MF(e.date,MF.ISO_8601).isValid())throw La(new Error,og.INVALID_DATE,Da.BAD_REQUEST,ul.LOG_LEVELS.ERROR,og.INVALID_DATE,!0);let n=ll.checkSchemaTableExist(e.schema,e.table);if(n)throw La(new Error,n,Da.NOT_FOUND,ul.LOG_LEVELS.ERROR,n,!0);let s=await wI.deleteRecordsBefore(e);if(await NI(e.schema,e.table),UF.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}o(Jre,"deleteFilesBefore");async function Xre(e){let t=vF(e,"timestamp");if(t)throw La(t,t.message,Da.BAD_REQUEST,void 0,void 0,!0);if(ll.transformReq(e),isNaN(e.timestamp))throw La(new Error,og.INVALID_VALUE("Timestamp"),Da.BAD_REQUEST,ul.LOG_LEVELS.ERROR,og.INVALID_VALUE("Timestamp"),!0);let r=ll.checkSchemaTableExist(e.schema,e.table);if(r)throw La(new Error,r,Da.NOT_FOUND,ul.LOG_LEVELS.ERROR,r,!0);let n=await wI.deleteAuditLogsBefore(e);return await NI(e.schema,e.table),UF.info(`Finished deleting audit logs before ${e.timestamp}`),n}o(Xre,"deleteAuditLogsBefore");async function xF(e){e.ids&&(e.hash_values=e.ids);let t=$re(e);if(t)throw La(t,t.message,Da.BAD_REQUEST,void 0,void 0,!0);ll.transformReq(e);let r=ll.checkSchemaTableExist(e.schema,e.table);if(r)throw La(new Error,r,Da.NOT_FOUND,ul.LOG_LEVELS.ERROR,r,!0);try{await NI(e.schema,e.table);let n=await wI.deleteRecords(e);return ll.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${jre}`),n}catch(n){if(n.message===ul.SEARCH_NOT_FOUND_MESSAGE){let s=new Wre;return s.message=ul.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}o(xF,"deleteRecord")});var ag={};Ce(ag,{HASH_FUNCTION:()=>Mr,hash:()=>PI,validate:()=>LI});function OI(e=Wm){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";return Array.from(Ym.randomBytes(e)).map(r=>t[r%t.length]).join("")}function PI(e,t=Mr[HF?.toUpperCase()]??Mr.SHA256){return CI[t](e)}function LI(e,t,r=Mr[HF?.toUpperCase()]??Mr.SHA256){return e?Zre[r](e,t):!1}var Ym,Gu,FF,HF,Wm,kF,Mr,CI,Zre,cg=fe(()=>{Ym=w(require("node:crypto")),Gu=w(require("argon2")),FF=w(ce());k();HF=(0,FF.get)(U.AUTHENTICATION_HASHFUNCTION)?.toLowerCase(),Wm=16,kF=9,Mr={MD5:"md5",SHA256:"sha256",ARGON2ID:"argon2id"};o(OI,"generateSalt");CI={[Mr.MD5]:(e,t=void 0)=>{t=t??OI(kF);let r=Ym.createHash(Mr.MD5).update(e+t).digest("hex");return t+r},[Mr.SHA256]:(e,t=void 0)=>{t=t??OI(Wm);let r=Ym.createHash(Mr.SHA256).update(e+t).digest("hex");return t+r},[Mr.ARGON2ID]:async e=>{let t=OI(Wm),r=await Gu.hash(e,{type:Gu.argon2id,salt:Buffer.from(t)});return t+r}},Zre={[Mr.MD5]:(e,t)=>{let r=e.slice(0,kF);return e===CI[Mr.MD5](t,r)},[Mr.SHA256]:(e,t)=>{let r=e.slice(0,Wm);return e===CI[Mr.SHA256](t,r)},[Mr.ARGON2ID]:async(e,t)=>await Gu.verify(e.slice(Wm),t)};o(PI,"hash");o(LI,"validate")});var qF=M((lPe,GF)=>{var DI=at(),an={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 ene(e){return an.password.presence=!0,an.username.presence=!0,an.role.presence=!0,an.active.presence=!0,DI.validateObject(e,an)}o(ene,"addUserValidation");function tne(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,DI.validateObject(e,an)}o(tne,"alterUserValidation");function rne(e){return an.password.presence=!1,an.username.presence=!0,an.role.presence=!1,an.active.presence=!1,DI.validateObject(e,an)}o(rne,"dropUserValidation");GF.exports={addUserValidation:ene,alterUserValidation:tne,dropUserValidation:rne}});var It=M((fPe,VF)=>{"use strict";var{platform:dPe}=require("os"),nne="nats-server.zip",MI="nats-server",sne=process.platform==="win32"?`${MI}.exe`:MI,ine=/^[^\s.,*>]+$/,$F="__request__",one=o(e=>`${e}.${$F}`,"REQUEST_SUBJECT"),ane={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},cne={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},lne={HUB:"hub.pid",LEAF:"leaf.pid"},une={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},dne={SUCCESS:"success",ERROR:"error"},fne={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},mne={TXN:"txn",MSGID:"msgid"},qu={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},hne={[qu.ERR]:1,[qu.WRN]:2,[qu.INF]:3,[qu.DBG]:4,[qu.TRC]:5},pne={debug:"-D",trace:"-DVV"};VF.exports={NATS_SERVER_ZIP:nne,NATS_SERVER_NAME:MI,NATS_BINARY_NAME:sne,PID_FILES:lne,NATS_CONFIG_FILES:cne,SERVER_SUFFIX:une,NATS_TERM_CONSTRAINTS_RX:ine,REQUEST_SUFFIX:$F,UPDATE_REMOTE_RESPONSE_STATUSES:dne,CLUSTER_STATUS_STATUSES:fne,REQUEST_SUBJECT:one,SUBJECT_PREFIXES:mne,MSG_HEADERS:ane,LOG_LEVELS:qu,LOG_LEVEL_FLAGS:pne,LOG_LEVEL_HIERARCHY:hne}});var Jn=M((hPe,vr)=>{"use strict";var WF="username is required",zF="nothing to update, must supply active, role or password to update",jF="password cannot be an empty string",QF="If role is specified, it cannot be empty.",JF="active must be true or false";vr.exports.addUser=bne;vr.exports.alterUser=Ine;vr.exports.dropUser=wne;vr.exports.getSuperUser=Dne;vr.exports.userInfo=One;vr.exports.listUsers=ug;vr.exports.listUsersExternal=Cne;vr.exports.setUsersWithRolesCache=fl;vr.exports.findAndValidateUser=qI;vr.exports.getClusterUser=Mne;vr.exports.getUsersWithRolesCache=Lne;vr.exports.USERNAME_REQUIRED=WF;vr.exports.ALTERUSER_NOTHING_TO_UPDATE=zF;vr.exports.EMPTY_PASSWORD=jF;vr.exports.EMPTY_ROLE=QF;vr.exports.ACTIVE_BOOLEAN=JF;var XF=Mn(),Ene=dl(),zm=(cg(),v(ag)),ZF=qF(),jm=on(),FI=bo(),Bi=ie(),eH=require("validate.js"),HI=z(),{promisify:_ne}=require("util"),kI=xi(),UI=(k(),v(K)),KF=It(),gne=yt(),Sne=ce(),Tne=Ro(),{hdbErrors:Rne,ClientError:ii}=Ee(),{HTTP_STATUS_CODES:Oo,AUTHENTICATION_ERROR_MSGS:vI,HDB_ERROR_MSGS:$u}=Rne,{UserEventMsg:GI}=ti(),xI=require("lodash"),{server:lg}=(Pr(),v(Bf)),yne=z();lg.getUser=(e,t)=>qI(e,t,t!=null);lg.authenticateUser=(e,t)=>qI(e,t);var tH={username:!0,active:!0,role:!0,password:!0},YF=new Map,Ane=_ne(Ene.delete),BI=Sne.get(UI.CONFIG_PARAMS.AUTHENTICATION_HASHFUNCTION)??zm.HASH_FUNCTION.SHA256,Fi;async function bne(e){let t=eH.cleanAttributes(e,tH),r=ZF.addUserValidation(t);if(r)throw new ii(r.message);let n=await jm.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]});if(!n||n.length<1)throw new ii($u.ROLE_NAME_NOT_FOUND(t.role),Oo.NOT_FOUND);if(n.length>1)throw new ii($u.DUP_ROLES_FOUND(t.role),Oo.CONFLICT);n[0].permission.cluster_user===!0&&(t.hash=kI.encrypt(t.password)),t.password=await zm.hash(t.password,BI),t.hash_function=BI,t.role=n[0].id;let s=await XF.insert({operation:"insert",schema:"system",table:"hdb_user",records:[t]});if(HI.debug(s),await fl(),s.skipped_hashes.length===1)throw new ii($u.USER_ALREADY_EXISTS(t.username),Oo.CONFLICT);return FI.signalUserChange(new GI(process.pid)),`${t.username} successfully added`}o(bne,"addUser");async function Ine(e){let t=eH.cleanAttributes(e,tH);if(Bi.isEmptyOrZeroLength(t.username))throw new Error(WF);if(Bi.isEmptyOrZeroLength(t.password)&&Bi.isEmptyOrZeroLength(t.role)&&Bi.isEmptyOrZeroLength(t.active))throw new Error(zF);if(!Bi.isEmpty(t.password)&&Bi.isEmptyOrZeroLength(t.password.trim()))throw new Error(jF);if(!Bi.isEmpty(t.active)&&!Bi.isBoolean(t.active))throw new Error(JF);if(!Bi.isEmpty(t.password)&&!Bi.isEmptyOrZeroLength(t.password.trim())&&(Nne(t.username)&&(t.hash=kI.encrypt(t.password)),t.password=await zm.hash(t.password,BI)),t.role==="")throw new Error(QF);if(t.role){let n=await jm.searchByValue({schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]});if(!n||n.length===0)throw new ii($u.ALTER_USER_ROLE_NOT_FOUND(t.role),Oo.NOT_FOUND);if(n.length>1)throw new ii($u.DUP_ROLES_FOUND(t.role),Oo.CONFLICT);t.role=n[0].id}let r=await XF.update({operation:"update",schema:"system",table:"hdb_user",records:[t]});return await fl(),FI.signalUserChange(new GI(process.pid)),r}o(Ine,"alterUser");function Nne(e){let t=!1,r=Fi.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(Nne,"isClusterUser");async function wne(e){let t=ZF.dropUserValidation(e);if(t)throw new ii(t.message);if(Fi.get(e.username)===void 0)throw new ii($u.USER_NOT_EXIST(e.username),Oo.NOT_FOUND);let r=await Ane({table:"hdb_user",schema:"system",hash_values:[e.username]});return HI.debug(r),await fl(),FI.signalUserChange(new GI(process.pid)),`${e.username} successfully deleted`}o(wne,"dropUser");async function One(e){let t={};if(!e||!e.hdb_user)return"There was no user info in the body";t=xI.cloneDeep(e.hdb_user);let r=await jm.searchByHash({schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]});return t.role=r[0],delete t.password,delete t.refresh_token,delete t.hash,delete t.hash_function,t}o(One,"userInfo");async function Cne(){let e=await ug();return e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token,delete t.hash_function}),[...e.values()]}o(Cne,"listUsersExternal");async function ug(){let e=await jm.searchByValue({schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]}),t={};for(let s of e)t[s.id]=xI.cloneDeep(s);if(Object.keys(t).length===0)return null;let r=await jm.searchByValue({schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]}),n=new Map;for(let s of r)s=xI.cloneDeep(s),s.role=t[s.role],Pne(s.role),n.set(s.username,s);return n}o(ug,"listUsers");function Pne(e){if(!e){HI.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(Tne)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}o(Pne,"appendSystemTablesToRole");async function fl(e=void 0){e?Fi=e:Fi=await ug()}o(fl,"setUsersWithRolesCache");async function Lne(){return Fi||await fl(),Fi}o(Lne,"getUsersWithRolesCache");async function qI(e,t,r=!0){Fi||await fl();let n=Fi.get(e);if(!n){if(!r)return{username:e};throw new ii(vI.GENERIC_AUTH_FAIL,Oo.UNAUTHORIZED)}if(n&&!n.active)throw new ii(vI.USER_INACTIVE,Oo.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(YF.get(t)===n.password)return s;{let i=zm.validate(n.password,t,n.hash_function||zm.HASH_FUNCTION.MD5);if(i?.then&&(i=await i),i===!0)YF.set(t,n.password);else throw new ii(vI.GENERIC_AUTH_FAIL,Oo.UNAUTHORIZED)}}return s}o(qI,"findAndValidateUser");async function Dne(){Fi||await fl();for(let[,e]of Fi)if(e.role.role==="super_user")return e}o(Dne,"getSuperUser");async function Mne(){let e=await ug(),t=gne.getConfigFromFile(UI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!(r==null||r?.role?.role!==UI.ROLE_TYPES_ENUM.CLUSTER_USER))return r.decrypt_hash=kI.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+KF.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+KF.SERVER_SUFFIX.ADMIN,r}o(Mne,"getClusterUser");var rH=[];lg.invalidateUser=function(e){for(let t of rH)try{t(e)}catch(r){yne.error("Error invalidating user",r)}};lg.onInvalidatedUser=function(e){rH.push(e)}});var Jm=M((gPe,oH)=>{"use strict";var ml=z(),Xn=(k(),v(K)),vne=KU(),EPe=ei(),_Pe=Pa(),Une=Jn(),{validateEvent:nH}=ti(),Qm=jn(),xne=require("process"),{resetDatabases:Bne}=(Le(),v(ft)),Fne={[Xn.ITC_EVENT_TYPES.SCHEMA]:Hne,[Xn.ITC_EVENT_TYPES.USER]:iH};async function Hne(e){let t=nH(e);if(t){ml.error(t);return}ml.trace("ITC schemaHandler received schema event:",e),await vne(e.message),await kne(e.message)}o(Hne,"schemaHandler");async function kne(e){try{Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=Bne();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ml.error(t)}}o(kne,"syncSchemaMetadata");var sH=[];async function iH(e){try{try{Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Qm.resetReadTxn(Xn.SYSTEM_SCHEMA_NAME,Xn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ml.warn(r)}let t=nH(e);if(t){ml.error(t);return}ml.trace(`ITC userHandler ${Xn.HDB_ITC_CLIENT_PREFIX}${xne.pid} received user event:`,e),await Une.setUsersWithRolesCache();for(let r of sH)r()}catch(t){ml.error(t)}}o(iH,"userHandler");iH.addListener=function(e){sH.push(e)};oH.exports=Fne});var ti=M((bPe,cH)=>{"use strict";var TPe=z(),$I=ie(),Gne=(k(),v(K)),{ITC_ERRORS:Xm}=tn(),{parentPort:RPe,threadId:qne,isMainThread:$ne,workerData:yPe}=require("worker_threads"),{onMessageFromWorkers:Vne,broadcast:APe,broadcastWithAcknowledgement:Kne}=st();cH.exports={sendItcEvent:Yne,validateEvent:aH,SchemaEventMsg:Wne,UserEventMsg:zne};var dg;Vne(async(e,t)=>{dg=dg||Jm(),aH(e),dg[e.type]&&await dg[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function Yne(e){return!$ne&&e.message&&(e.message.originator=qne),Kne(e)}o(Yne,"sendItcEvent");function aH(e){if(typeof e!="object")return Xm.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||$I.isEmpty(e.type))return Xm.MISSING_TYPE;if(!e.hasOwnProperty("message")||$I.isEmpty(e.message))return Xm.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||$I.isEmpty(e.message.originator))return Xm.MISSING_ORIGIN;if(Gne.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Xm.INVALID_EVENT(e.type)}o(aH,"validateEvent");function Wne(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}o(Wne,"SchemaEventMsg");function zne(e){this.originator=e}o(zne,"UserEventMsg")});var bo=M((wPe,fH)=>{"use strict";var lH=(k(),v(K)),NPe=ie(),fg=z(),uH=wU(),Vu,{sendItcEvent:dH}=ti();function jne(e){try{fg.info("signalSchemaChange called with message:",e),Vu=Vu||Jm();let t=new uH(lH.ITC_EVENT_TYPES.SCHEMA,e);return Vu.schema(t),dH(t)}catch(t){fg.error(t)}}o(jne,"signalSchemaChange");function Qne(e){try{fg.trace("signalUserChange called with message:",e),Vu=Vu||Jm();let t=new uH(lH.ITC_EVENT_TYPES.USER,e);return Vu.user(t),dH(t)}catch(t){fg.error(t)}}o(Qne,"signalUserChange");fH.exports={signalSchemaChange:jne,signalUserChange:Qne}});function mg(){return VI||(VI=et({table:"hdb_analytics_hostname",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"hostname"}]})),VI}function Xne(e){return e=e.replace(Jne,t=>{let[r,n,s,i]=t.split(".").map(a=>parseInt(a));return(r<<8|n).toString(16)+":"+(s<<8|i).toString(16)}),e=e.replace("::",":".repeat(10-e.split(":").length)),e.toLowerCase().split(":").map(t=>t.padStart(4,"0")).join(":")}function Zne(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 YI(e){let t=mH.default.createHash("shake128",{outputLength:4}),r;return(0,hH.isIPv6)(e)?r=Xne(e):r=e.toLowerCase(),Zne(Uint8Array.from(t.update(r).digest()))}var mH,hH,KI,VI,Jne,WI=fe(()=>{Le();mH=w(require("crypto")),hH=require("node:net"),KI=new Map;o(mg,"getAnalyticsHostnameTable");Jne=/(\d{1,3}\.){3}\d{1,3}$/;o(Xne,"normalizeIPv6");o(Zne,"nodeHashToNumber");o(YI,"stableNodeId")});var Co,zI=fe(()=>{Co={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 gg={};Ce(gg,{addAnalyticsListener:()=>th,calculateCPUUtilization:()=>LH,diffResourceUsage:()=>DH,recordAction:()=>gt,recordActionBinary:()=>Kr,recordHostname:()=>JI,setAnalyticsEnabled:()=>ese});function ese(e){NH=e}function tse(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 rse(e,t,r,n,s,i){let a={};if(typeof t=="number")a.total=t,a.values=new Float32Array(4),a.values.index=1,a.values[0]=t,a.total=t;else if(typeof t=="boolean")a.total=t?1:0,a.count=1;else if(typeof t=="function")a.count=1,a.callback=t;else throw new TypeError("Invalid metric value type "+typeof t);a.description={metric:r,path:n,method:s,type:i},Eg.set(e,a)}function gt(e,t,r,n,s){if(!NH)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let a=Eg.get(i);a?tse(e,a):rse(i,e,t,r,n,s),pg||nse()}function Kr(e,t,r,n,s){gt(!!e,t,r,n,s)}function th(e){CH.push(e)}function nse(){pg=performance.now(),setTimeout(async()=>{let e=performance.now()-pg;pg=0;let t=[],r={time:Date.now(),period:e,threadId:hl.threadId,metrics:t};for(let[s,i]of Eg){if(i.values){let a=i.values.subarray(0,i.values.index);a.sort();let c=a.length,l=0,u=[],d;for(let f of PH){let m=Math.floor(c*f),h=a[m-1];if(m>l){let p=m-l;if(h===d){let _=u[u.length-1];typeof _=="number"?u[u.length-1]={value:_,count:1+p}:_.count+=p}else u.push(p>1?{value:h,count:p}:h),d=h;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 MH()}let n=process.memoryUsage();t.push({metric:"memory",threadId:hl.threadId,byThread:!0,...n});for(let s of CH)s(t);Eg=new Map,hl.parentPort?hl.parentPort.postMessage({type:OH,report:r}):xH({report:r})},wH).unref()}async function JI(){let e=ve.hostname;Vr.trace?.("recordHostname server.hostname:",e);let t=YI(e);Vr.trace?.("recordHostname nodeId:",t);let r=mg();if(!await r.get(t)){let s={id:t,hostname:e};Vr.trace?.(`recordHostname storing hostname: ${JSON.stringify(s)}`),r.put(s.id,s)}}function Ku(e,t){let r=ve.hostname,n=KI.get(r);n?Vr.trace?.("storeMetric cached nodeId:",n):(n=YI(r),Vr.trace?.("storeMetric new nodeId:",n),KI.set(r,n));let s={id:[(0,QI.getNextMonotonicTime)(),n],...t};Vr.trace?.(`storing metric ${JSON.stringify(s)}`),e.put(s.id,s)}function LH(e,t){let r=e.userCPUTime+e.systemCPUTime;return Vr.trace?.(`calculateCPUUtilization cpuTime: ${r} period: ${t}`),Math.round(r/t*100)/100}function DH(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 sse(e,t,r){let n=0;for(let[s,i]of Object.entries(r)){let a=`${t}.${s}`,c=i.getSize(),l={metric:Co.TABLE_SIZE,database:t,table:s,size:c};Vr.trace?.(`table ${a} size metric: ${JSON.stringify(l)}`),Ku(e,l),n+=c}return n}function pH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getAuditSize();if(!i)return;let a=IH.statSync(s.primaryStore.env.path).size,c=sse(e,r,n),l=a-c,u={metric:Co.DATABASE_SIZE,database:r,size:a,used:c,free:l,audit:i};Ku(e,u),Vr.trace?.(`database ${r} size metric: ${JSON.stringify(u)}`)}catch(s){Vr.warn?.("Error getting DB size metrics",s)}}function EH(e,t){for(let[r,n]of Object.entries(t))try{let[s]=Object.values(n),i=s?.getStorageStats();if(!i)return;let a={metric:Co.STORAGE_VOLUME,database:r,...i};Ku(e,a),Vr.trace?.(`db ${r} storage volume metrics: ${JSON.stringify(a)}`)}catch(s){Vr.warn?.("Error getting DB volume metrics",s)}}async function ise(e,t=6e4){let r=XI(),n=vH(),s=new Promise(R=>{let I=performance.now();setImmediate(()=>{let P=performance.now();P-I>5e3&&Vr.warn?.("Unusually high event queue latency on the main thread of "+Math.round(P-I)+"ms"),I=performance.now()}),n.primaryStore.prefetch([1],()=>{let P=performance.now();P-I>5e3&&Vr.warn?.("Unusually high task queue latency on the main thread of "+Math.round(P-I)+"ms"),R(P-I)})}),i;for(let R of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(R.value?.time){i=R.value.time;break}if(Date.now()-t<i)return;let a,c=new Map,l=new Map,u=[],d;for(let{key:R,value:I}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!I)continue;if(a){if(R>a+t)break}else a=R;d=R;let{metrics:P,threadId:Y}=I;for(let te of P||[]){let{path:x,method:$,type:j,metric:V,count:le,total:re,distribution:se,threads:_e,...Ne}=te;le||(le=1);let Fe=V+(x?"-"+x:"");$!==void 0&&(Fe+="-"+$),j!==void 0&&(Fe+="-"+j);let He=c.get(Fe);if(He){if(He.threads){let pt=He.threads[Y];if(pt)He=pt;else{He.threads[Y]={...Ne};continue}}He.count||(He.count=1);let _r=He.count;for(let pt in Ne){let gr=Ne[pt];typeof gr=="number"&&(He[pt]=(He[pt]*_r+gr*le)/(_r+le))}He.count+=le,re>=0&&(He.total+=re,He.ratio=He.total/He.count)}else He={period:t,...te},delete He.distribution,c.set(Fe,He),He.byThread&&(He.threads=[],He.threads[Y]={...Ne},u.push(He));if(se){se=se.map(pt=>typeof pt=="number"?{value:pt,count:1}:pt);let _r=l.get(Fe);_r?_r.push(...se):l.set(Fe,se)}}await MH()}for(let R of u){let{path:I,method:P,type:Y,metric:te,count:x,total:$,distribution:j,threads:V,...le}=R;V=V.filter(re=>re);for(let re in le){if(typeof R[re]!="number")continue;let se=0;for(let _e of V){let Ne=_e[re];typeof Ne=="number"&&(se+=Ne)}R[re]=se}R.count=V.length,delete R.threads,delete R.byThread}for(let[R,I]of l){let P=c.get(R);I.sort((pt,gr)=>pt.value>gr.value?1:-1);let Y=P.count-1,te=[],x=0,$=0,j;for(let pt of PH){let gr=Y*pt;for(;x<gr;)j=I[$++],x+=j.count,$===1&&x--;let wr=I[$>1?$-2:0];j||(j=I[0]),te.push(j.value-(j.value-wr.value)*(x-gr)/j.count)}let[V,le,re,se,_e,Ne,Fe,He,_r]=te;Object.assign(P,{p1:V,p10:le,p25:re,median:se,p75:_e,p90:Ne,p95:Fe,p99:He,p999:_r})}let f;for(let[,R]of c)R.time=d,Ku(n,R),f=!0;let m=Date.now(),{idle:h,active:p}=performance.eventLoopUtilization();if(f||p*10>h){let R={metric:Co.MAIN_THREAD_UTILIZATION,idle:h-_H,active:p-gH,taskQueueLatency:await s,time:m,...process.memoryUsage()};Ku(n,R)}_H=h,gH=p;let _=process.resourceUsage();_.time=m,_.userCPUTime=_.userCPUTime/1e3,_.systemCPUTime=_.systemCPUTime/1e3,Vr.trace?.(`process.resourceUsage: ${JSON.stringify(_)}`);let g=DH(hg,_);Vr.trace?.(`diffed resourceUsage: ${JSON.stringify(g)}`),g.time=m,g.period=hg.time?m-hg.time:t,g.cpuUtilization=LH(g,g.period);let y={metric:Co.RESOURCE_USAGE,...g};Ku(n,y),hg=_;let T=it();pH(n,T),pH(n,{system:T.system}),EH(n,T),EH(n,{system:T.system})}async function SH(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function XI(){return TH||(TH=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function vH(){return RH||(RH=et({table:"hdb_analytics",database:"system",audit:!0,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function cse(){UH=!0;let e=(0,eh.get)(U.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await ise(wH,e),await SH(XI(),ose),await SH(vH(),ase)},Math.min(e/2,2147483647)).unref()}function xH(e,t){let r=e.report;r.threadId=t?.threadId||hl.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(yH+=n.mean*n.count);r.totalBytesProcessed=yH,t&&(r.metrics.push({metric:Co.UTILIZATION,...t.performance.eventLoopUtilization(AH.get(t))}),AH.set(t,t.performance.eventLoopUtilization())),r.id=(0,QI.getNextMonotonicTime)(),XI().primaryStore.put(r.id,r),UH||cse(),lse&&(BH=dse(r))}async function dse(e){if(await BH,!Ma){let r=(0,Zm.dirname)((0,_g.getLogFilePath)());try{Ma=await(0,jI.open)((0,Zm.join)(r,"analytics.log"),"r+")}catch{Ma=await(0,jI.open)((0,Zm.join)(r,"analytics.log"),"w+")}}let t=(await Ma.stat()).size;if(t>use){let r=Buffer.alloc(t);await Ma.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Ma.write(r,{position:0}),await Ma.truncate(r.length),t=r.length}await Ma.write(JSON.stringify(e)+`
14
+ `,t)}var hl,bH,_g,Zm,jI,QI,eh,IH,Vr,Eg,NH,pg,wH,OH,CH,PH,_H,gH,hg,MH,ose,ase,TH,RH,UH,yH,AH,lse,BH,Ma,use,Hi=fe(()=>{hl=require("worker_threads"),bH=w(st());Le();_g=w(z()),Zm=require("path"),jI=require("fs/promises"),QI=w(An()),eh=w(ce());k();Pr();IH=w(require("node:fs"));WI();zI();Vr=(0,_g.forComponent)("analytics").conditional;(0,eh.initSync)();Eg=new Map,NH=(0,eh.get)(U.ANALYTICS_AGGREGATEPERIOD)>-1;o(ese,"setAnalyticsEnabled");o(tse,"recordExistingAction");o(rse,"recordNewAction");o(gt,"recordAction");ve.recordAnalytics=gt;o(Kr,"recordActionBinary");pg=0,wH=1e3,OH="analytics-report",CH=[];o(th,"addAnalyticsListener");PH=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];o(nse,"sendAnalytics");o(JI,"recordHostname");o(Ku,"storeMetric");o(LH,"calculateCPUUtilization");o(DH,"diffResourceUsage");o(sse,"storeTableSizeMetrics");o(pH,"storeDBSizeMetrics");o(EH,"storeVolumeMetrics");o(ise,"aggregation");_H=0,gH=0,hg={userCPUTime:0,systemCPUTime:0},MH=o(()=>new Promise(setImmediate),"rest");o(SH,"cleanup");ose=36e5,ase=31536e6;o(XI,"getRawAnalyticsTable");o(vH,"getAnalyticsTable");(0,bH.setChildListenerByType)(OH,xH);o(cse,"startScheduledTasks");yH=0,AH=new Map,lse=!1;o(xH,"recordAnalytics");use=1e6;o(dse,"logAnalytics")});function rh(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 FH(e,t){(typeof e.set!="function"||typeof e.has!="function")&&(e=new Ns(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 Ns,nh=fe(()=>{Ns=class extends Map{static{o(this,"Headers")}constructor(t){if(t)if(t[Symbol.iterator])super(t);else{super();for(let r in t)this.set(r,t[r])}else super()}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let a=i[1];if(n)r=(typeof a=="string"?a:a.join(", "))+", "+r;else if(typeof a=="string")r=[a,r];else{a.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};o(rh,"appendHeader");o(FH,"mergeHeaders")});var jH={};Ce(jH,{EVICTED:()=>Aa,INVALIDATED:()=>wn,coerceType:()=>Tg,makeTable:()=>yg,setServerUtilities:()=>tN});function yg(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:a,databaseName:c,auditStore:l,schemaDefined:u,dbisDB:d,sealed:f,splitSegments:m,replicate:h}=e,{expirationMS:p,evictionMS:_,audit:g,trackDeletes:y}=e;_??=0;let{attributes:T}=e;T||(T=[]);let R=BA(i,n,l),I,P,Y={},te=Promise.resolve(),x,$,j;for(let q of T)(q.assignCreatedTime||q.name==="__createdtime__")&&(x=q),(q.assignUpdatedTime||q.name==="__updatedtime__")&&($=q),q.expiresAt&&(j=q),q.isPrimaryKey&&(Y=q);let V,le=[],re=[],se=1,_e=2,Ne={},Fe={},He=864e5,_r=0,pt,gr,wr,ou=!1,au,Ft,Nf,wf=El.get(U.REPLICATION_DATABASES);if(Array.isArray(wf)){for(let q of wf)if(q.name===c&&q.replicateTo>=0){Nf=q.replicateTo;break}}let hE=i.getRange({start:!1,end:!1}).constructor,Ty=10,pE=6;g&&Nc(),am(i.env.path,q=>{if(P)return da(q)});class cu extends sl{static{o(this,"Updatable")}getUpdatedTime(){return Ra.get(this.getRecord())?.version}getExpiresAt(){return Ra.get(this.getRecord())?.expiresAt}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.set(E,new Hm(S));else throw new Error("Can not add or subtract a non-numeric value")}subtractFrom(E,S){return this.addTo(E,-S)}}class Me extends Dr{#e;#t;#r;#n;#s;#i;static name=s;static primaryStore=i;static auditStore=l;static primaryKey=t;static tableName=s;static tableId=n;static indices=r;static audit=g;static databasePath=a;static databaseName=c;static attributes=T;static replicate=h;static sealed=f;static splitSegments=m??!0;static createdTimeProperty=x;static updatedTimeProperty=$;static propertyResolvers;static userResolvers={};static sources=[];static getResidencyById;static get expirationMS(){return p}static dbisDB=d;static schemaDefined=u;static sourcedFrom(E,S){if(S&&(this.sourceOptions=S,(S.expiration||S.eviction||S.scanInterval)&&this.setTTLExpiration(S)),S?.intermediateSource)E.intermediateSource=!0,this.sources.unshift(E);else{if(this.sources.some(O=>!O.intermediateSource)){if(this.sources.some(O=>O.name===E.name))return;throw new Error("Can not have multiple canonical (non-intermediate) sources")}this.sources.push(E)}P=P||E.get&&(!E.get.reliesOnPrototype||E.prototype.get),I=I||E.load;let A=o(O=>{let D=this.sources;if(D=D.filter(F=>F.intermediateSource&&F[O]&&(!F[O].reliesOnPrototype||F.prototype[O])),D.length>0)if(D.length===1){let F=D[0];return(L,H,W)=>{if(L?.source!==F)return F[O](H,W,L)}}else return(F,L,H)=>{let W=[];for(let ee of D){if(F?.source===ee)break;W.push(ee[O](L,H,F))}return Promise.all(W)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1];N.intermediateSource&&(N={});let b=o(O=>{if(N[O]&&(!N[O].reliesOnPrototype||N.prototype[O]))return(D,F,L)=>{if(!D?.source)return N[O](F,L,D)}},"getApplyToCanonicalSource");Ne={put:b("put"),patch:b("patch"),delete:b("delete"),publish:b("publish")},Fe={put:A("put"),patch:A("patch"),delete:A("delete"),publish:A("publish"),invalidate:A("invalidate")};let C=N.shouldRevalidateEvents;return(async()=>{let O=!1,D,F=o(async(L,H)=>{let W=L.value,ee=L.table?Ge[c][L.table]:Me;if(c===vf&&(L.table===uu.ROLE_TABLE_NAME||L.table===uu.USER_TABLE_NAME)&&(O=!0),L.id===void 0&&(L.id=W[ee.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));L.source=E;let oe={residencyId:fa(L.residencyList),isNotification:!0,ensureLoaded:!1,nodeId:L.nodeId},B=L.id,ue=await ee.getResource(B,H,oe);switch(L.finished&&await L.finished,L.type){case"put":return C?ue._writeInvalidate(B,W,oe):ue._writeUpdate(B,W,!0,oe);case"patch":return C?ue._writeInvalidate(B,W,oe):ue._writeUpdate(B,W,!1,oe);case"delete":return ue._writeDelete(B,oe);case"publish":case"message":return ue._writePublish(B,W,oe);case"invalidate":return ue._writeInvalidate(B,W,oe);case"relocate":return ue._writeRelocate(B,oe);default:xe.default.error?.("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=E.subscribe;L&&y==null&&(y=!0);let H={crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0},W=E.subscribeOnThisThread?E.subscribeOnThisThread((0,pl.getWorkerIndex)(),H):(0,pl.getWorkerIndex)()===0,ee=L&&W&&await E.subscribe?.(H);if(ee){let oe;for await(let B of ee)try{if(!(B.type==="transaction"?B.writes[0]:B)){xe.default.error?.("Bad subscription event",B);continue}if(B.source=E,B.type==="end_txn"){if(oe?.resolve(),B.localTime&&D!==B.localTime){if(B.remoteNodeIds?.length>0){let ge=[Symbol.for("seq"),B.remoteNodeIds[0]],X=d.get(ge),de=X?.nodes;de||(de=[]);for(let he of B.remoteNodeIds.slice(1)){let Ae=de.find(Oe=>Oe.id===he);de=de.filter(Oe=>Oe.id!==he||Oe===Ae),Ae||(Ae={id:he,seqId:0},de.push(Ae)),Ae.seqId=Math.max(X?.seqId??1,B.localTime),he===oe?.nodeId&&(Ae.lastTxnTime=B.timestamp)}let ne=Math.max(X?.seqId??1,B.localTime);xe.default.trace?.("Received txn",c,new Date(ne),new Date(B.localTime),B.remoteNodeIds),d.put(ge,{seqId:ne,nodes:de})}D=B.localTime}B.onCommit&&oe?.committed.then(B.onCommit);continue}if(oe)if(B.beginTxn)oe.resolve();else{oe.write_promises.push(F(B,oe));continue}!B.timestamp&&B.version&&(B.timestamp=B.version);let ae=vt(B,()=>{if(B.type==="transaction"){let ge=[];for(let X of B.writes)try{ge.push(F(X,B))}catch(de){throw de.message+=" writing "+JSON.stringify(X)+" of event "+JSON.stringify(B),de}return Promise.all(ge)}else if(B.type==="define_schema"){let ge=this.attributes.slice(0),X=!1;for(let de of B.attributes)ge.find(ne=>ne.name===de.name)||(ge.push(de),X=!0);X&&(et({table:s,database:c,attributes:ge,origin:"cluster"}),ih.signalSchemaChange(new oh.SchemaEventMsg(process.pid,G.CREATE_TABLE,c,s)))}else return B.beginTxn?(oe=B,oe.write_promises=[F(B,B)],new Promise(ge=>{oe.resolve=()=>ge(Promise.all(oe.write_promises))})):F(B,B)});oe&&(oe.committed=ae),O&&ae&&!ae?.waitingForUserChange&&(ae.then(()=>ih.signalUserChange(new oh.UserEventMsg(process.pid))),ae.waitingForUserChange=!0),B.onCommit&&(ae?ae.then(B.onCommit):B.onCommit())}catch(ue){xe.default.error?.("error in subscription handler",ue)}}}catch(L){xe.default.error?.(L)}})(),this}static get isCaching(){return P}static get shouldRevalidateEvents(){return this.prototype.get!==Me.prototype.get}static getResource(E,S,A){let N=super.getResource(E,S,A);if(E!=null&&this.loadAsInstance!==!1){Or(E);try{if(N.getRecord?.())return N;if(typeof E=="object"&&E&&!Array.isArray(E))throw new Error(`Invalid id ${JSON.stringify(E)}`);let b=!A?.async||i.cache?.get?.(E),C=Cr(S),O=C.getReadTxn();if(O?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Tc(E,S,{transaction:O,ensureLoaded:A?.ensureLoaded},b,D=>{if(D?Me._updateResource(N,D):N.#e=null,S.onlyIfCached){if(!N.doesExist())throw new lt.ServerError("Entry is not cached",504)}else if(A?.ensureLoaded){let F=yc(E,D,S,N);if(F)return C?.disregardReadTxn(),N.#i=!0,S.loadedFromSource=!0,oi(F,L=>(Me._updateResource(N,L),N))}return N})}catch(b){throw b.message.includes("Unable to serialize object")&&(b.message+=": "+JSON.stringify(E)),b}}return N}static _updateResource(E,S){E.#n=S,E.#e=S?.value??null,E.#r=S?.version}ensureLoaded(){let E=yc(this.getId(),this.#n,this.getContext());if(E)return this.#i=!0,this.getContext().loadedFromSource=!0,oi(E,S=>{this.#n=S,this.#e=S.value,this.#r=S.version})}static getNewId(){let E=Y?.type;if(E==="String"||E==="ID")return super.getNewId();if(!Ft){let b=i.getEntry(Symbol.for("id_allocation")),C=b?.value,O;if(C&&C.nodeName===server.hostname&&(!yse(i)||C.pid===process.pid)){let D=C.start,F=C.end;O=D;for(let L of i.getKeys({start:F,end:D,limit:1,reverse:!0}))O=L}else C=N(b?.version??null),O=C.start;Ft=new BigInt64Array([BigInt(O)+1n]),Ft=new BigInt64Array(i.getUserSharedBuffer("id",Ft.buffer)),Ft.maxSafeId=C.end}let S=Number(Atomics.add(Ft,0,1n)),A=E==="Int"?512:1048576;if(S+A>=Ft.maxSafeId){let b=o(C=>{Ft.maxSafeId=S+(E==="Int"?1023:4194303);let O=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,D=C?void 0:i.useReadTransaction(),F=Number(Ft[0]);for(let W of i.getKeys({start:F+1,end:O,limit:1,transaction:D}))O=W;D?.done();let{value:L,version:H}=i.getEntry(Symbol.for("id_allocation"));if(Ft.maxSafeId<O){if(L.end>Ft.maxSafeId-100)return;xe.default.info?.("New id allocation",S,Ft.maxSafeId,H),i.put(Symbol.for("id_allocation"),{start:L.start,end:Ft.maxSafeId,nodeName:server.hostname,pid:process.pid},Date.now(),H)}else{xe.default.warn?.(`Id conflict detected, starting new id allocation range, attempting to allocate to ${Ft.maxSafeId}, but id of ${O} detected`);let W=N(H);W.alreadyUpdated||Atomics.store(Ft,0,BigInt(W.start+1)),Ft.maxSafeId=W.end}},"updateEnd");S+A===Ft.maxSafeId?setImmediate(b):S+100>=Ft.maxSafeId&&(xe.default.warn?.(`Synchronous id allocation required on table ${s}${E=="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`),i.transactionSync(()=>b(!0)))}return S;function N(b){let C=(E==="Int"?Math.pow(2,31):Math.pow(2,49))-1,O=C/4,D,F,L=!1,H,W;do{H=Math.floor(Math.random()*C),W={start:H,end:H+(E==="Int"?1024:4194304),nodeName:server.hostname,pid:process.pid},D=0;for(let ee of i.getKeys({start:H,limit:1,reverse:!0}))D=ee;F=C;for(let ee of i.getKeys({start:H+1,end:C,limit:1}))F=ee;O*=.875,O<1e3&&!L&&(L=!0,xe.default.error?.(`Id allocation in table ${s} is very dense, limited safe range of numbers to allocate ids in${E==="Int"?", it is highly recommended that you use Long or Float as the type for auto-incremented primary keys":""}`,H,D,F,O))}while(!(O<F-H&&(O<H-D||D===0)));return i.transactionSync(()=>{let ee=i.getEntry(Symbol.for("id_allocation"));return(ee?.version??null)==b?(xe.default.info?.("Allocated new id range",W),i.put(Symbol.for("id_allocation"),W,Date.now()),W):(xe.default.debug?.("Looks like ids were already allocated"),{alreadyUpdated:!0,...ee.value})})}}static setTTLExpiration(E){if(typeof E=="number")p=E*1e3,_||(_=0);else if(E&&typeof E=="object")p=E.expiration*1e3,_=(E.eviction||0)*1e3,He=E.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(p<0)throw new Error("Expiration can not be negative");He=He||(p+_)/4,da()}static getResidencyRecord(E){return d.get([Symbol.for("residency_by_id"),E])}static setResidency(E){Me.getResidency=E&&((S,A)=>{try{return E(S,A)}catch(N){throw N.message+=` in residency function for table ${s}`,N}})}static setResidencyById(E){Me.getResidencyById=E&&(S=>{try{return E(S)}catch(A){throw A.message+=` in residency function for table ${s}`,A}})}static getResidency(E,S){if(Me.getResidencyById)return Me.getResidencyById(E[t]);let A=Nf;if(S.replicateTo!=null){if(Array.isArray(S.replicateTo))return S.replicateTo.includes(server.hostname)?S.replicateTo:[server.hostname,...S.replicateTo];S.replicateTo>=0&&(A=S.replicateTo)}if(A>=0&&server.nodes){let N=[server.hostname];if(S.previousResidency)N.push(...S.previousResidency.slice(0,A));else{let b=server.nodes.map(D=>D.name),C=Math.floor(b.length*Math.random());N.push(...b.slice(C,C+A));let O=C+A-b.length;O>0&&N.push(...b.slice(0,O))}return N}}static enableAuditing(E=!0){g=E,E&&Nc(),Me.audit=E}static coerceId(E){return E===""?null:Tg(E,Y)}static async dropTable(){delete Ge[c][s];for(let E of i.getRange({versions:!0,snapshot:!1,lazy:!0}))E.metadataFlags&Nn&&E.value&&Sa(E.value);if(c===a){for(let E of T)d.remove(Me.tableName+"/"+E.name),r[E.name]?.drop();d.remove(Me.tableName+"/"),i.drop(),await d.committed}else console.log("legacy dropTable"),await i.close(),eN.default.unlinkSync(i.env.path);ih.signalSchemaChange(new oh.SchemaEventMsg(process.pid,G.DROP_TABLE,c,s))}get(E){let S=this.constructor;if(typeof E=="string"&&S.loadAsInstance!==!1)return this.getProperty(E);if(Cf(E))return this.search(E);if(E&&E.id===void 0&&!E.toString()){let A={records:"./",name:s,database:c,auditSize:l?.getStats().entryCount,attributes:T,recordCount:void 0,estimatedRecordRange:void 0};return this.getContext()?.includeExpensiveRecordCountEstimates?Me.getRecordCount().then(N=>(A.recordCount=N.recordCount,A.estimatedRecordRange=N.estimatedRange,A)):A}if(E!==void 0&&S.loadAsInstance===!1){let A=this.getContext(),N=Cr(A),b=N.getReadTxn();if(b?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");let C=Sr(E);Or(C);let O=!0;return E.checkPermission&&(O=this.allowRead(A.user,E)),oi(O,D=>{if(!D)throw new lt.AccessViolation(A.user);let F=!0;return Tc(C,A,{transaction:b,ensureLoaded:F},!1,L=>{if(A.onlyIfCached){if(!L?.value)throw new lt.ServerError("Entry is not cached",504)}else if(F){let H=yc(C,L,A);if(H)return N?.disregardReadTxn(),A.loadedFromSource=!0,H.then(W=>W?.value)}return L?.value})})}if(E?.property)return this.getProperty(E.property);if(this.doesExist()||E?.ensureLoaded===!1||this.getContext()?.returnNonexistent)return this}allowRead(E,S){let A=Rc(E,S);if(A?.read){if(A.isSuperUser)return!0;let N=A.attribute_permissions,b=S?.select;if(N?.length>0||ou&&b){if(S||(S={}),b){let C=N?.length>0&&ZI(N,"read");S.select=b.map(O=>{let D=O.name||O;if(!C||C[D]){let F=wr[D]?.definition?.tableClass;if(F){if(O.name||(O={name:O}),!O.checkPermission&&S.checkPermission&&(O.checkPermission=S.checkPermission),!F.prototype.allowRead.call(null,E,O))return!1;if(!O.select)return O.name}return O}}).filter(Boolean)}else S.select=N.filter(C=>C.read&&!wr[C.attribute_name]).map(C=>C.attribute_name);return S}else return!0}}allowUpdate(E,S,A){let N=Rc(E,A);if(N?.update){let b=N.attribute_permissions;if(b?.length>0){let C=ZI(b,"update");for(let O in S)if(!C[O])return!1;for(let O of b){let D=O.attribute_name;!O.update&&!(D in S)&&(S[D]=this.getProperty(D))}}return Ic(this.getContext())}}allowCreate(E,S,A){if(this.isCollection){let N=Rc(E,A);if(N?.insert){let b=N.attribute_permissions;if(b?.length>0){let C=ZI(b,"insert");for(let O in S)if(!C[O])return!1;return Ic(this.getContext())}else return Ic(this.getContext())}}else return this.allowUpdate(E,{})}allowDelete(E,S){return Rc(E,S)?.delete&&Ic(this.getContext())}update(E,S){let A,N=typeof S=="boolean"||S===void 0&&(E==null||typeof E=="object"&&!(E instanceof URLSearchParams)),b=!1;N?(b=S,S=E,A=this.getId()):A=Sr(E);let C=this.getContext();if(!Cr(C))throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;if(typeof S=="object"&&S)if(b)Object.isFrozen(S)&&(S={...S}),this.#e={},this.#t=S;else if(N){let D=this.#t;D&&(S=Object.assign(D,S)),this.#t=S}else{let D=!0;if(E==null)throw new TypeError("Can not put a record without a target");return E.checkPermission&&(D=this.allowUpdate(C.user,S,E)),oi(D,F=>{if(!F)throw new lt.AccessViolation(C.user);return oi(i.get(Sr(E)),L=>{let H=new cu(L);return H._setChanges(S),this._writeUpdate(A,H.getChanges(),!1),H})})}return this._writeUpdate(A,this.#t,b),this}addTo(E,S){if(typeof S=="number"||typeof S=="bigint")this.#s===kH?this.set(E,(+this.getProperty(E)||0)+S):(this.#s||this.update(),this.set(E,new Hm(S)));else throw new Error("Can not add a non-numeric value")}subtractFrom(E,S){if(typeof S=="number")return this.addTo(E,-S);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this.#n}getRecord(){return this.#e}getChanges(){return this.#t}_setChanges(E){this.#t=E}setRecord(E){this.#e=E}invalidate(E){let S=!0,A=this.getContext();return E?.checkPermission&&(S=this.allowDelete(A.user,E,A)),oi(S,N=>{if(!N)throw new lt.AccessViolation(A.user);this._writeInvalidate(E?Sr(E):this.getId())})}_writeInvalidate(E,S,A){let N=this.getContext();Or(E),Cr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Ne.invalidate?.bind(this,N,E),beforeIntermediate:Fe.invalidate?.bind(this,N,E),commit:o((C,O)=>{if(!(bc(C,O,A?.nodeId)<=0)){S??=null;for(let D in r)S||(S={}),S[D]===void 0&&(S[D]=this.getProperty(D));xe.default.trace?.(`Invalidating entry in ${s} id: ${E}, timestamp: ${new Date(C).toISOString()}`),R(E,S,O,C,wn,g,{user:N?.user,residencyId:A?.residencyId,nodeId:A?.nodeId},"invalidate")}},"commit")})}_writeRelocate(E,S){let A=this.getContext();Or(E),Cr(this.getContext()).addWrite({key:E,store:i,invalidated:!0,entry:this.#n,before:Ne.relocate?.bind(this,A,E),beforeIntermediate:Fe.relocate?.bind(this,A,E),commit:o((b,C)=>{if(bc(b,C,S?.nodeId)<=0)return;let O=Me.getResidencyRecord(S.residencyId),D=0,F=null,L=C?.value;if(O&&!O.includes(server.hostname)){for(let H in r)F||(F={}),F[H]=L(H);D=wn}else F=L;xe.default.trace?.(`Relocating entry id: ${E}, timestamp: ${new Date(b).toISOString()}`),R(E,F,C,b,D,g,{user:A.user,residencyId:S.residencyId,nodeId:S.nodeId,expiresAt:S.expiresAt},"relocate",!1,null)},"commit")})}static _recordRelocate(E,S){let A={previousResidency:this.getResidencyRecord(E.residencyId),isRelocation:!0},N=wc(this.getResidency(S.value,A)),b;if(N){if(!N.includes(server.hostname))return!1;b=fa(N)}let O=R(E.key,S.value,E,E.version,0,!0,{residencyId:b,expiresAt:S.expiresAt},"relocate",!1,null);return!0}static evict(E,S,A){let N=this.Source,b;if(!((P||g)&&(!S||(b=i.getEntry(E),!b||!S)||b.version!==A))){if(P){if(i.hasLock(E,b.version))return;let C;for(let O in r)C||(C={}),C[O]=S[O];if(C)return R(E,C,b,A,Aa,null,null,null,!0)}if(i.ifVersion(E,A,()=>{oo(E,S,null)}),g)return R(E,null,b,A,Aa,null,null,null,!0);zc(i,b??i.getEntry(E),A)}}lock(){throw new Error("Not yet implemented")}static operation(E,S){return E.table||=s,E.schema||=c,zH.operation(E,S)}put(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!0);else{let A=!0;if(E==null)throw new TypeError("Can not put a record without a target");let N=this.getContext();return E.checkPermission&&(A=this.allowUpdate(N.user,S,E)),oi(A,b=>{if(!b)throw new lt.AccessViolation(N.user);if(Array.isArray(S))for(let C of S){let O=C[t];this._writeUpdate(O,C,!0)}else{let C=Sr(E);this._writeUpdate(C,S,!0)}})}}create(E,S){let A=!0,N=this.getContext();if(!S&&!(E instanceof URLSearchParams)&&(S=E,E=void 0),!S||typeof S!="object"||Array.isArray(S))throw new TypeError("Can not create a record without an object");return E?.checkPermission&&(A=this.allowCreate(N.user,S,E)),oi(A,b=>{if(!b)throw new lt.AccessViolation(N.user);let C=Sr(E)??S[t];if(C===void 0)C=this.constructor.getNewId();else if(i.get(C))throw new lt.ClientError("Record already exists",409);return this._writeUpdate(C,S,!0),S})}patch(E,S){if(S===void 0||S instanceof URLSearchParams)this.update(E,!1);else{let A=this.update(E,S);if(A?.then)return A.then(()=>{})}}_writeUpdate(E,S,A,N){let b=this.getContext(),C=Cr(b);Or(E);let O=this.#n??i.getEntry(E);this.#s=A?kH:gse;let D={key:E,store:i,entry:O,nodeName:b?.nodeName,validate:o(F=>{S||(S=this.#t),A||S&&Y_(this.#t===S?this:S)?b?.source||(C.checkOverloaded(),this.validate(S,!A),$&&(S[$.name]=$.type==="Date"?new Date(F):$.type==="String"?new Date(F).toISOString():F),A&&(t&&S[t]!==E&&(S[t]=E),x&&(O?.value?S[x.name]=O?.value[x.name]:S[x.name]=x.type==="Date"?new Date(F):x.type==="String"?new Date(F).toISOString():F),S=Ca(S))):C.removeWrite(D)},"validate"),before:A?Ne.put?()=>Ne.put(b,E,S):null:Ne.patch?()=>Ne.patch(b,E,S):Ne.put?()=>Ne.put(b,E,Ca(this)):null,beforeIntermediate:A?Fe.put?()=>Fe.put(b,E,S):null:Fe.patch?()=>Fe.patch(b,E,S):Fe.put?()=>Fe.put(b,E,Ca(this)):null,commit:o((F,L,H)=>{if(H){if(b&&L?.version>(b.lastModified||0)&&(b.lastModified=L.version),this.#n=L,L?.value&&L.value.getRecord)throw new Error("Can not assign a record to a record, check for circular references");A||(this.#e=L?.value??null)}this.#t=void 0,this.#r=F;let W=L?.value,ee=S;this.#s=0;let oe=!1,B=bc(F,L,N?.nodeId),ue;if(B<=0){if(g){let ne=L.localTime,he=L.version;xe.default.trace?.("Applying CRDT update to record with id: ",E,"txn time",new Date(F),"applying later update from:",new Date(he),"local recorded time",new Date(ne));let Ae=[];for(;ne>F||he>=F&&ne>0;){let Oe=l.get(ne);if(!Oe)break;let ze=Ut(Oe);if(he=ze.version,he>=F){if(he===F){if(B=bc(F,{version:he,localTime:ne},N?.nodeId),B===0)return;if(B>0)continue}if(ze.type==="patch")Ae.push(ze),ue=S;else if(ze.type==="put"||ze.type==="delete")return}ne=ze.previousLocalTime}if(!ne){xe.default.debug?.("No further audit history, must drop update",E,"existing version preserved",L);return}Ae.sort((Oe,ze)=>Oe.version-ze.version);for(let Oe of Ae){let ze=Oe.getValue(i);if(xe.default.debug?.("Rebuilding update with future patch:",new Date(Oe.version),ze,Oe),ee=GE(ee,ze,A),!ee)return}}else{if(A)return;ee=GE(ee,W,A),xe.default.debug?.("Rebuilding update without audit:",ee)}xe.default.trace?.("Rebuilt record to save:",ee," is full update:",A)}let ae;if(A?ae=ee:this.constructor.loadAsInstance===!1?ae=Ca(W,ee):(this.#e=W,ae=Ca(this,ee)),this.#e=ae,ae&&ae.getRecord)throw new Error("Can not assign a record to a record, check for circular references");let ge;if(N?.residencyId!=null)ge=N.residencyId;else{O?.residencyId&&(b.previousResidency=Me.getResidencyRecord(O.residencyId));let ne=wc(Me.getResidency(ae,b));if(ne&&!ne.includes(server.hostname))if(ue??=ae,oe=!0,Me.getResidencyById)ae=void 0;else{ae=null;for(let he in r)ae||(ae={}),ae[he]=ue[he]}ge=fa(ne)}A||(ue=S);let X=b?.expiresAt??(p?p+Date.now():-1);xe.default.trace?.(`Saving record with id: ${E}, timestamp: ${new Date(F).toISOString()}${X?", expires at: "+new Date(X).toISOString():""}${L?", replaces entry from: "+new Date(L.version).toISOString():", new entry"}`,(()=>{try{return JSON.stringify(ae).slice(0,100)}catch{return""}})()),oo(E,W,ae);let de=A?"put":"patch";R(E,ae,L,F,oe?wn:0,g,{omitLocalRecord:oe,user:b?.user,residencyId:ge,expiresAt:X,nodeId:N?.nodeId,originatingOperation:b?.originatingOperation},de,!1,ue),b.expiresAt&&da()},"commit")};C.addWrite(D)}async delete(E){if(Cf(E)){E.select=["$id"];for await(let S of this.search(E))this._writeDelete(S.$id);return!0}if(E){let S=!0,A=this.getContext();return E.checkPermission&&(S=this.allowDelete(A.user,E,A)),oi(S,N=>{if(!N)throw new lt.AccessViolation(A.user);let b=Sr(E);return this._writeDelete(b),!0})}return this._writeDelete(this.getId()),!!this.#e}_writeDelete(E,S){let A=Cr(this.getContext());Or(E);let N=this.getContext();return A.addWrite({key:E,store:i,entry:this.#n,nodeName:N?.nodeName,before:Ne.delete?.bind(this,N,E),beforeIntermediate:Fe.delete?.bind(this,N,E),commit:o((b,C,O)=>{let D=C?.value;O&&(N&&C?.version>(N.lastModified||0)&&(N.lastModified=C.version),Me._updateResource(this,C)),!(bc(b,C,S?.nodeId)<=0)&&(oo(this.getId(),D),xe.default.trace?.(`Deleting record with id: ${E}, txn timestamp: ${new Date(b).toISOString()}`),g||y?(R(E,null,C,b,0,g,{user:N?.user,nodeId:S?.nodeId},"delete"),g||da()):zc(i,C))},"commit")}),!0}search(E){let S=this.getContext(),A=Cr(S);if(!E)throw new Error("No query provided");if(E.parseError)throw E.parseError;if(E.checkPermission&&!this.allowRead(S.user,E))throw new lt.AccessViolation(S.user);let N=E.conditions;N?N.length===void 0&&(N=N[Symbol.iterator]?Array.from(N):[N]):N=Array.isArray(E)?E:E[Symbol.iterator]?Array.from(E):[];let b=E.id??this.getId();b&&(N=[{attribute:null,comparator:Array.isArray(b)?"prefix":"starts_with",value:b}].concat(N));let C,O={};function D(ne,he){let Ae;switch(he){case"and":case void 0:if(ne.length<1)throw new Error('An "and" operator requires at least one condition');Ae=!0;break;case"or":if(ne.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+he)}for(let Oe of ne){if(Oe.conditions){Oe.conditions=D(Oe.conditions,Oe.operator);continue}let ze=Oe[0]??Oe.attribute,kr=ze==null?Y:Ci(T,ze);if(kr)(kr.type||HA[Oe.comparator])&&(Oe[1]===void 0?Oe.value=L(Oe.value,kr):Oe[1]=L(Oe[1],kr));else if(ze!=null)throw(0,lt.handleHDBError)(new Error,`${ze} is not a defined attribute`,404);if(Oe.chainedConditions)if(Oe.chainedConditions.length===1&&(!Oe.operator||Oe.operator=="and")){let ye=Oe.chainedConditions[0],We,Xe;if(ye.comparator==="gt"||ye.comparator==="greater_than"||ye.comparator==="ge"||ye.comparator==="greater_than_equal"?(We=Oe,Xe=ye):(We=ye,Xe=Oe),We.comparator!=="lt"&&We.comparator!=="less_than"&&We.comparator!=="le"&&We.comparator!=="less_than_equal")throw new Error("Invalid chained condition, only less than and greater than conditions can be chained together");let jt=Xe.comparator==="ge"||Xe.comparator==="greater_than_equal",Dt=We.comparator==="le"||We.comparator==="less_than_equal";Oe.comparator=(jt?"ge":"gt")+(Dt?"le":"lt"),Oe.value=[Xe.value,We.value]}else throw new Error("Multiple chained conditions are not currently supported")}return ne}o(D,"prepareConditions");function F(ne,he){if(E.enforceExecutionOrder)return ne;for(let Ae of ne)Ae.conditions&&(Ae.conditions=F(Ae.conditions,Ae.operator));return ne.length>1&&he!=="or"?fse(ne,S_(Me)):ne}o(F,"orderConditions");function L(ne,he){return Array.isArray(ne)?ne.map(Ae=>Tg(Ae,he)):Tg(ne,he)}o(L,"coerceTypedValues");let H=E.operator;(N.length>0||H)&&(N=D(N,H));let W=typeof E.sort=="object"&&E.sort,ee;if(W&&H!=="or"){let ne=W.attribute;if(ne==null)throw new lt.ClientError("Sort requires an attribute");if(C=N.find(he=>Nu(he.attribute)===Nu(ne)),!C){let he=Ci(T,ne);if(!he)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not a defined attribute`,404);if(he.indexed)C={...W,comparator:"sort"},N.push(C);else if(N.length===0&&!E.allowFullScan)throw(0,lt.handleHDBError)(new Error,`${Array.isArray(ne)?ne.join("."):ne} is not indexed and not combined with any other conditions`,404)}C&&(C.descending=!!W.descending)}N=F(N,H),W&&(C&&N[0]===C?W.next&&(ee={dbOrderedAttribute:W.attribute,attribute:W.next.attribute,descending:W.next.descending,next:W.next.next}):(C&&N.splice(N.indexOf(C),1),ee=W));let oe=E.select;if(N.length===0&&(N=[{attribute:t,comparator:"greater_than",value:!0}]),E.explain)return{conditions:N,operator:H,postOrdering:ee,selectApplied:!!oe};let B=A.useReadTxn(),ue=kA(N,H,Me,B,E,S,(ne,he)=>Pf(ne,oe,S,B,he),O),ae=E.ensureLoaded!==!1;ee||(ue=de(ue));let ge=Me.transformEntryForSelect(oe,S,B,O,ae,!0),X=Me.transformToOrderedSelect(ue,oe,ee,S,B,ge);function de(ne){return E.offset||E.limit!==void 0?ne.slice(E.offset,E.limit!==void 0?(E.offset||0)+E.limit:void 0):ne}return o(de,"applyOffset"),ee&&(X=de(X)),X.onDone=()=>{X.onDone=null,A.doneReadTxn()},X.selectApplied=!0,X.getColumns=()=>{if(oe){let ne=[];for(let he of oe)he==="*"?ne.push(...T.map(Ae=>Ae.name)):ne.push(he.name||he);return ne}return T.filter(ne=>!ne.computed&&!ne.relationship).map(ne=>ne.name)},X}static transformToOrderedSelect(E,S,A,N,b,C){let O=new hE;if(A){E=Pf(E,S,N,b,null);let D;O.iterate=function(){let L,H=E[Symbol.asyncIterator]?E[Symbol.asyncIterator]():E[Symbol.iterator](),W,ee=A.dbOrderedAttribute,oe,B,ue=!0;function ae(X){let de=X.next&&ae(X.next),ne=X.descending;return N.sort=X,(he,Ae)=>{let Oe=Ac(he,X.attribute,N),ze=Ac(Ae,X.attribute,N),kr=ne?(0,_l.compareKeys)(ze,Oe):(0,_l.compareKeys)(Oe,ze);return kr===0?de?.(he,Ae)||0:kr}}o(ae,"createComparator");let ge=ae(A);return{async next(){let X;if(L)if(X=L.next(),X.done){if(W)return O.onDone&&O.onDone(),X}else return{value:await C.call(this,X.value)};D=[],oe&&D.push(oe);do if(X=await H.next(),X.done){if(W=!0,D.length)break;return O.onDone&&O.onDone(),X}else{let de=X.value;if(de?.then&&(de=await de),ee){let ne=Ac(de,ee,N);if(ue)ue=!1,B=ne;else if(ne!==B){B=ne,oe=de;break}}D.push(de)}while(!0);return A.isGrouped,D.sort(ge),L=D[Symbol.iterator](),X=L.next(),X.done?(O.onDone&&O.onDone(),X):{value:await C.call(this,X.value)}},return(){O.onDone&&O.onDone(),H.return()},throw(){O.onDone&&O.onDone(),H.throw()}}};let F=o(L=>{if(typeof S=="object"&&Array.isArray(L.attribute))for(let H=0;H<S.length;H++){let W=S[H],ee;if(W.name===L.attribute[0]){for(ee=W.sort||(W.sort={});ee.next;)ee=ee.next;ee.attribute=L.attribute.slice(1),ee.descending=L.descending}else W===L.attribute[0]&&(S[H]=ee={name:W,sort:{attribute:L.attribute.slice(1),descending:L.descending}})}L.next&&F(L.next)},"applySortingOnSelect");F(A)}else O.iterate=(E[Symbol.asyncIterator]||E[Symbol.iterator]).bind(E),O=O.map(function(D){try{let F=C.call(this,D);return typeof F?.catch=="function"?F.catch(L=>{throw L.partialObject={[t]:D.key},L}):F}catch(F){throw F.partialObject={[t]:D.key},F}});return O}static transformEntryForSelect(E,S,A,N,b,C){let O;b&&P&&!(typeof E=="string"?[E]:E)?.every(L=>{let H;return typeof L=="object"?H=L.name:H=L,r[H]||H===t})&&(O=!0);let D,F=o(function(L){let H;if(S?.transaction?.stale&&(S.transaction.stale=!1),L!=null){if(H=L.deref?L.deref():L.value,!H&&(L.key===void 0||L.deref)||L.metadataFlags&wn){if(L.metadataFlags&wn&&S.replicateFrom===!1&&C&&L.residencyId)return Ua.SKIP;if(L=Tc(L.key??L,S,{transaction:A,lazy:E?.length<4,ensureLoaded:b},this?.isSync,W=>W),L?.then)return L.then(F.bind(this));H=L?.value}if(O&&L?.metadataFlags&(wn|Aa)||L?.expiresAt!=null&&L?.expiresAt<Date.now()){if(S.onlyIfCached)return{[t]:L.key,message:"This entry has expired"};let W=yc(L.key??L,L,S);if(W?.then)return W.then(F)}}if(H==null)return C?Ua.SKIP:H;if(E&&!(E[0]==="*"&&E.length===1)){let W,ee=o((B,ue)=>{let ae;typeof B=="object"?ae=B.name:ae=B;let ge=wr?.[ae],X;if(ge){let de=N?.[ae];if(de)if(de.hasMappings){let he=ge.from?H[ge.from]:Nu(L.key);X=de.get(he),X||(X=[])}else X=de.fromRecord?.(H);else X=ge(H,S,L,!0);let ne=o(he=>{if(ge.directReturn)return ue(he,ae);if(he&&typeof he=="object"){let Ae=ge.definition?.tableClass||Me;D||(D={});let Oe=D[ae]||(D[ae]=Ae.transformEntryForSelect(ae===B?null:B.select||(Array.isArray(B)?B:null),S,A,de,b));if(Array.isArray(he)){let ze=[],kr=Ae.transformToOrderedSelect(he,B.select,typeof B.sort=="object"&&B.sort,S,A,Oe)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),ye=o(Xe=>{for(;!Xe.done;){if(Xe?.then)return Xe.then(ye);ze.push(Xe.value),Xe=kr.next()}ue(ze,ae)},"nextValue"),We=ye(kr.next());We&&(W||(W=[]),W.push(We));return}else if(he=Oe.call(this,he),he?.then){W||(W=[]),W.push(he.then(ze=>ue(ze,ae)));return}}ue(he,ae)},"handleResolvedValue");X?.then?(W||(W=[]),W.push(X.then(ne))):ne(X);return}else X=H[ae],X&&typeof X=="object"&&ae!==B&&(X=Me.transformEntryForSelect(B.select||B,S,A,null)({value:X}));ue(X,ae)},"selectAttribute"),oe;if(typeof E=="string")ee(E,B=>{oe=B});else if(Array.isArray(E))if(E.asArray)oe=[],E.forEach((B,ue)=>{B==="*"?E[ue]=H:ee(B,ae=>oe[ue]=ae)});else{oe={};let B=E.forceNulls;for(let ue of E)if(ue==="*")for(let ae in H)oe[ae]=H[ae];else ee(ue,(ae,ge)=>{ae===void 0&&B&&(ae=null),oe[ge]=ae})}else throw new lt.ClientError("Invalid select"+E);return W?Promise.all(W).then(()=>oe):oe}return H},"transform");return F}async subscribe(E){if(!l)throw new Error("Can not subscribe to a table without an audit log");g||et({table:s,database:c,schemaDefined:u,attributes:T,audit:!0}),E||(E={});let S=!E.rawEvents,A=[],N=this,b=YA(Me,this.getId()??null,function(O,D,F,L){try{let H=D.getValue?.(i,S),W=D.type;if(!H&&W==="patch"&&S){let oe=i.getEntry(O);oe?.version===D.version?H=oe.value:H=D.getValue?.(i,!0,F),W="put"}let ee={id:O,localTime:F,value:H,version:D.version,type:W,beginTxn:L};A?A.push(ee):this.send(ee)}catch(H){xe.default.error?.(H)}},E.startTime||0,E),C=(async()=>{this.isCollection&&(b.includeDescendants=!0,E.onlyChildren&&(b.onlyChildren=!0)),E.supportsTransactions&&(b.supportsTransactions=!0);let O=this.getId(),D=E.previousCount;D>1e3&&(D=1e3);let F=E.startTime;if(this.isCollection){if(F){if(D)throw new lt.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:L,value:H}of l.getRange({start:F,exclusiveStart:!0,snapshot:!1})){let W=Ut(H);if(W.tableId!==n)continue;let ee=W.recordId;if(O==null||VH(O,ee)){let oe=W.getValue(i,S,L);if(b.send({id:ee,localTime:L,value:oe,version:W.version,type:W.type}),b.queue?.length>qH&&await b.waitForDrain()===!1)return}b.startTime=L}}else if(D){let L=[];for(let{key:H,value:W}of l.getRange({start:"z",end:!1,reverse:!0}))try{let ee=Ut(W);if(ee.tableId!==n)continue;let oe=ee.recordId;if(O==null||VH(O,oe)){let B=ee.getValue(i,S,H);if(L.push({id:oe,localTime:H,value:B,version:ee.version,type:ee.type}),--D<=0)break}}catch(ee){xe.default.error("Error getting history entry",H,ee)}for(let H=L.length;H>0;)b.send(L[--H]);L[0]&&(b.startTime=L[0].localTime)}else if(!E.omitCurrent){for(let{key:L,value:H,version:W,localTime:ee}of i.getRange({start:O??!1,end:O==null?void 0:[O,_l.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(H&&(b.send({id:L,localTime:ee,value:H,version:W,type:"put"}),b.queue?.length>qH&&await b.waitForDrain()===!1))return}}else{D&&!F&&(F=0);let L=this.#n?.localTime;if(L===xA&&(i.cache?.delete(O),this.#n=i.getEntry(O),xe.default.trace?.("re-retrieved record",L,this.#n?.localTime),L=this.#n?.localTime),xe.default.trace?.("Subscription from",F,"from",O,L),F<L){let H=[],W=L;do{let ee=l.get(W);if(ee){E.omitCurrent=!0;let oe=Ut(ee),B=oe.getValue(i,S,W);S&&(oe.type="put"),H.push({id:O,value:B,localTime:W,...oe}),W=oe.previousLocalTime}else break;D&&D--}while(W>F&&D!==0);for(let ee=H.length;ee>0;)b.send(H[--ee]);b.startTime=L}!E.omitCurrent&&this.doesExist()&&b.send({id:O,localTime:L,value:this.#e,version:this.#r,type:"put"})}for(let L of A)b.send(L);A=null})();return E.listener&&b.on("data",E.listener),b}static subscribeOnThisThread(E,S){return E===0||S?.crossThreads===!1}doesExist(){return!!(this.#e||this.#s)}publish(E,S,A){if(S===void 0||S instanceof URLSearchParams)this._writePublish(this.getId(),E,S);else{let N=!0,b=this.getContext();return E.checkPermission&&(N=this.allowCreate(b.user,E,b)),oi(N,C=>{if(!C)throw new lt.AccessViolation(b.user);let O=Sr(E);this._writePublish(O,S,A)})}}_writePublish(E,S,A){let N=Cr(this.getContext());E??=null,E!==null&&Or(E);let b=this.getContext();N.addWrite({key:E,store:i,entry:this.#n,nodeName:b?.nodeName,validate:o(()=>{b?.source||(N.checkOverloaded(),this.validate(S))},"validate"),before:Ne.publish?.bind(this,b,E,S),beforeIntermediate:Fe.publish?.bind(this,b,E,S),commit:o((C,O,D)=>{O===void 0&&y&&!g&&da(),xe.default.trace?.(`Publishing message to id: ${E}, timestamp: ${new Date(C).toISOString()}`),R(E,O?.value??null,O,O?.version||C,0,!0,{user:b?.user,residencyId:A?.residencyId,expiresAt:b?.expiresAt,nodeId:A?.nodeId},"message",!1,S)},"commit")})}validate(E,S){let A,N=o((b,C,O)=>{if(C.type&&b!=null)if(S&&b.__op__&&(b=b.value),C.properties){typeof b!="object"&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be an object${C.type?" ("+C.type+")":""}`);let D=C.properties;for(let F=0,L=D.length;F<L;F++){let H=D[F];if(H.relationship||H.computed){E.hasOwnProperty(H.name)&&(A||(A=[])).push(`Computed property ${O}.${H.name} may not be directly assigned a value`);continue}let W=N(b[H.name],H,O+"."+H.name);W&&(b[H.name]=W)}if(C.sealed&&b!=null&&typeof b=="object")for(let F in b)D.find(L=>L.name===F)||(A||(A=[])).push(`Property ${F} is not allowed within object in property ${O}`)}else switch(C.type){case"Int":(typeof b!="number"||b>>0!==b)&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(D=>typeof D=="string")||(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a string`);break;case"Boolean":typeof b!="boolean"&&(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a Date`)}break;case"BigInt":if(typeof b!="bigint"){if(typeof b=="string"||typeof b=="number")return BigInt(b);(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a bigint`)}break;case"Bytes":if(!(b instanceof Uint8Array)){if(typeof b=="string")return Buffer.from(b);(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a Buffer or Uint8Array`)}break;case"Blob":if(!(b instanceof Ss)){if(typeof b=="string"&&(b=Buffer.from(b)),b instanceof Buffer)return createBlob(b,{type:"text/plain"});(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be a Blob`)}break;case"array":if(Array.isArray(b)){if(C.elements)for(let D=0,F=b.length;D<F;D++){let L=b[D],H=N(L,C.elements,O+"[*]");H&&(b[D]=H)}}else(A||(A=[])).push(`Value ${ws(b)} in property ${O} must be an Array`);break}C.nullable===!1&&b==null&&(A||(A=[])).push(`Property ${O} is required (and not does not allow null values)`)},"validateValue");for(let b=0,C=T.length;b<C;b++){let O=T[b];if(O.relationship||O.computed){Object.hasOwn(E,O.name)&&(A||(A=[])).push(`Computed property ${O.name} may not be directly assigned a value`);continue}if(!S||O.name in E){let D=N(E[O.name],O,O.name);D!==void 0&&(E[O.name]=D)}}if(f)for(let b in E)T.find(C=>C.name===b)||(A||(A=[])).push(`Property ${b} is not allowed`);if(A)throw new lt.ClientError(A.join(". "))}getUpdatedTime(){return this.#r}wasLoadedFromSource(){return P?!!this.#i:void 0}static async addAttributes(E){let S=T.slice(0);for(let A of E){if(!A.name)throw new lt.ClientError("Attribute name is required");if(A.name.match(/[`/]/))throw new lt.ClientError("Attribute names cannot include backticks or forward slashes");mse(A.name),S.push(A)}return et({table:s,database:c,schemaDefined:u,attributes:S}),Me.indexingOperation}static async removeAttributes(E){let S=T.filter(A=>!E.includes(A.name));return et({table:s,database:c,schemaDefined:u,attributes:S}),Me.indexingOperation}static getSize(){let E=i.getStats();return(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getAuditSize(){let E=l?.getStats();return E&&(E.treeBranchPageCount+E.treeLeafPageCount+E.overflowPages)*E.pageSize}static getStorageStats(){let E=i.env.path,S=eN.default.statfsSync?.(E)??{};return{available:S.bavail*S.bsize,free:S.bfree*S.bsize,size:S.blocks*S.bsize}}static async getRecordCount(E){let S=i.getStats().entryCount,A=1e3/2,N=performance.now(),b=Math.floor(S/2),C=E?.exactCount,O=0,D=0,F;for(let{value:L}of i.getRange({start:!0,lazy:!0,snapshot:!1}))if(L!=null&&O++,D++,await va(),!C&&D<b&&performance.now()-N>A){F=D;break}if(F){let L=O;O=0;for(let{value:X}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:F,snapshot:!1}))X!=null&&O++,await va();let H=F*2,W=(O+L)/H,ee=Math.pow((O-L+1)/F/2,2)+W*(1-W)/H,oe=Math.max(Math.sqrt(ee)*S,1),B=Math.round(W*S),ue=Math.max(B-1.96*oe,O+L),ae=Math.min(B+1.96*oe,S),ge=Math.pow(10,Math.round(Math.log10(oe)));return ge>B&&(ge=ge/10),O=Math.round(B/ge)*ge,{recordCount:O,estimatedRange:[Math.round(ue),Math.round(ae)]}}return{recordCount:O}}static updatedAttributes(){wr=this.propertyResolvers={$id:o((E,S,A)=>({value:A.key}),"$id"),$updatedtime:o((E,S,A)=>A.version,"$updatedtime"),$updatedTime:o((E,S,A)=>A.version,"$updatedTime"),$expiresAt:o((E,S,A)=>A.expiresAt,"$expiresAt"),$record:o((E,S,A)=>A?{value:E}:E,"$record"),$distance:o((E,S,A)=>A&&(A.distance??S?.vectorDistances?.get(A)),"$distance")};for(let E of this.attributes){E.isPrimaryKey&&(Y=E),E.resolve=null;let S=E.relationship,A=E.computed;if(S)if(E.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),A&&console.error("A relationship property is already computed and can not be combined with a computed function (the relationship will be given precedence)"),ou=!0,S.to)E.elements?.definition?(wr[E.name]=E.resolve=(N,b,C,O)=>{let D=N[S.from?S.from:t],F=E.elements.definition.tableClass;return O?Iu({attribute:S.to,value:D},Cr(b).getReadTxn(),!1,F,!1).map(L=>L&&L.key!==void 0?L:F.primaryStore.getEntry(L,{transaction:Cr(b).getReadTxn()})).asArray:F.search([{attribute:S.to,value:D}],b).asArray},E.set=()=>{},E.resolve.definition=E.elements.definition,E.resolve.to=S.to,S.from&&(E.resolve.from=S.from)):console.error(`The one-to-many/many-to-many relationship property "${E.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(S.from){let N=E.definition||E.elements?.definition;N?(wr[E.name]=E.resolve=(b,C,O,D)=>{let F=b[S.from];if(F!==void 0){if(E.elements){let L,H=F?.map(W=>{let ee=N.tableClass.primaryStore[D?"getEntry":"get"](W,{transaction:Cr(C).getReadTxn()});return ee?.then&&(L=!0),ee});return S.filterMissing?L?Promise.all(H).then(W=>W.filter(KH)):H.filter(KH):L?Promise.all(H):H}return N.tableClass.primaryStore[D?"getEntry":"get"](F,{transaction:Cr(C).getReadTxn()})}},E.set=(b,C)=>{if(Array.isArray(C)){let O=C.map(D=>D.getId?.()||D[N.tableClass.primaryKey]);b[S.from]=O}else{let O=C.getId?.()||C[N.tableClass.primaryKey];b[S.from]=O}},E.resolve.definition=E.definition||E.elements?.definition,E.resolve.from=S.from):console.error(`The relationship property "${E.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${E.name}" in table "${s}" must use either "from" or "to" arguments`);else if(A)typeof A.from=="function"&&this.setComputedAttribute(E.name,A.from),wr[E.name]=E.resolve=(N,b,C)=>{let O=typeof A.from=="string"?N[A.from]:N,D=this.userResolvers[E.name];if(D)return D(O,b,C);xe.default.warn(`Computed attribute "${E.name}" does not have a function assigned to it. Please use setComputedAttribute('${E.name}', resolver) to assign a resolver function.`),this.userResolvers[E.name]=()=>{}},E.resolve.directReturn=!0;else if(r[E.name]?.customIndex?.propertyResolver){let N=r[E.name].customIndex;wr[E.name]=(b,C,O)=>{let D=b[E.name];return N.propertyResolver(D,C,O)},wr[E.name].directReturn=!0}}km(this,this),km(cu,this,!0);for(let E of T){let S=E.name;E.resolve&&Object.defineProperty(i.encoder.structPrototype,S,{get(){return E.resolve(this,Ou.getStore())},set(A){return E.set(this,A)},configurable:!0})}}static setComputedAttribute(E,S){let A=Ci(T,E);if(!A){console.error(`The attribute "${E}" does not exist in the table "${s}"`);return}if(!A.computed){console.error(`The attribute "${E}" is not defined as computed in the table "${s}"`);return}this.userResolvers[E]=S}static async deleteHistory(E=0,S=!1){let A;for(let{key:N,value:b}of l.getRange({start:0,end:E}))await va(),Ut(b).tableId===n&&(A=u_(l,N,b));if(S)for(let N of i.getRange({start:0,versions:!0})){let{key:b,value:C,localTime:O}=N;await va(),C===null&&O<E&&(A=zc(i,N))}await A}static async*getHistory(E=0,S=1/0){for(let{key:A,value:N}of l.getRange({start:E||1,end:S})){await va();let b=Ut(N);b.tableId===n&&(yield{id:b.recordId,localTime:A,version:b.version,type:b.type,value:b.getValue(i,!0,A),user:b.user,operation:b.originatingOperation})}}static async getHistoryOfRecord(E){let S=[];if(E==null)throw new Error("An id is required");let A=i.getEntry(E);if(!A)return S;let N=A.localTime;if(!N)throw new Error("The entry does not have a local audit time");let b=0;do{await va();let C=l.get(N);if(C){let O=Ut(C);S.push({id:O.recordId,localTime:N,version:O.version,type:O.type,value:O.getValue(i,!0,N),user:O.user}),N=O.previousLocalTime}else break}while(b<1e3&&N);return S.reverse()}static cleanup(){V?.remove()}}Me.updatedAttributes();let Of=Me.prototype;return p&&Me.setTTLExpiration(p/1e3),j&&EE(),Me;function oo(q,E,S){let A;for(let N in r){let b=r[N],C=b.isIndexing,O=wr[N],D=S&&(O?O(S):S[N]),F=E&&(O?O(E):E[N]);if(D===F&&!C)continue;if(b.customIndex){b.customIndex.index(q,D,F);continue}A=!0;let L=b.indexNulls,H=(0,sh.getIndexedValues)(D,L),W=(0,sh.getIndexedValues)(F,L);if(W?.length>0){let ee=new Set(W);if(H=H?H.filter(oe=>{if(ee.has(oe))ee.delete(oe);else return!0}):[],W=Array.from(ee),(W.length>0||H.length>0)&&HH){let oe=W.concat(H).map(B=>({key:B,value:q}));b.prefetch(oe,$H)}for(let oe=0,B=W.length;oe<B;oe++)b.remove(W[oe],q)}else H?.length>0&&HH&&b.prefetch(H.map(ee=>({key:ee,value:q})),$H);if(H)for(let ee=0,oe=H.length;ee<oe;ee++)b.put(H[ee],q)}return A}o(oo,"updateIndices");function Or(q){switch(typeof q){case"number":return!0;case"string":if(q.length<659)return!0;if(q.length>GH)throw new Error("Primary key size is too large: "+q.length);break;case"object":if(q===null)throw new Error("Invalid primary key of null");break;case"bigint":if(q<2n**64n&&q>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof q)}if((0,_l.writeKey)(q,Sse,0)>GH)throw new Error("Primary key size is too large: "+q.length);return!0}o(Or,"checkValidId");function Sr(q){return typeof q=="object"&&q?q.id:q}o(Sr,"requestTargetToId");function Cf(q){return typeof q=="object"&&q&&q.isCollection}o(Cf,"isSearchTarget");function Es(q){}o(Es,"isRequestTarget");function Tc(q,E,S,A,N){if(Me.getResidencyById&&S.ensureLoaded&&E?.replicateFrom!==!1){let C=wc(Me.getResidencyById(q));if(C&&!C.includes(server.hostname)&&I)return I({key:q,residency:C}).then(N)}let b=o(()=>{if(E?.transaction?.stale&&(E.transaction.stale=!1),S.transaction?.isDone)return N(null,q);let C=i.getEntry(q,S);return C?.residencyId&&C.metadataFlags&wn&&I&&S.ensureLoaded&&E?.replicateFrom!==!1?I(C).then(O=>N(O,q),O=>(xe.default.error?.("Error loading remote record",q,C,S,O),N(null,q))):(C&&E&&(C?.version>(E.lastModified||0)&&(E.lastModified=C.version),C?.localTime&&!E.lastRefreshed&&(E.lastRefreshed=C.localTime)),N(C,q))},"whenPrefetched");return A?b():se>0?(se--,b()):new Promise((C,O)=>{se===0?(se--,i.prefetch([q],()=>{D(),F()})):(le.push(q),re.push(F),le.length>pE&&(se--,D()));function D(){if(le.length>0){let L=re;i.prefetch(le,()=>{se===-1?D():se++;for(let H of L)H()}),le=[],re=[],_e>2&&_e--}else se=_e,_e<Ty&&_e++}o(D,"prefetch");function F(){try{C(b())}catch(L){O(L)}}o(F,"load")})}o(Tc,"loadLocalRecord");function Rc(q,E){let S=E?.checkPermission;if(typeof S!="object"){if(!q?.role)return;S=q.role.permission}if(S.super_user)return Tse;let A=S[c],N,b=A?.tables;if(b)return b[s];if(c==="data"&&(N=S[s])&&!N.tables)return N}o(Rc,"getTablePermissions");function yc(q,E,S,A){if(P){let N=!1;if(S.noCache?N=!0:(E?(!E.value||E.metadataFlags&(wn|Aa)||E.expiresAt!=null&&E.expiresAt<Date.now())&&(N=!0):N=!0,Kr(!N,"cache-hit",s)),N){let b=lu(q,E,S).then(C=>(C?.value&&C?.value.getRecord?.()&&xe.default.error?.("Can not assign a record that is already a resource"),S&&(C?.version>(S.lastModified||0)&&(S.lastModified=C.version),S.lastRefreshed=Date.now()),C));if(S?.onlyIfCached||E?.value&&A?.allowStaleWhileRevalidate?.(E,q)){if(b.catch(C=>xe.default.warn?.(C)),S?.onlyIfCached&&!A.doesExist())throw new lt.ServerError("Entry is not cached",504);return}else return b}}else if(E?.value&&E.expiresAt!=null&&E.expiresAt<Date.now())return Me.evict(E.key,E.value,E.version),E.value=null,{then(N){return N(E)}}}o(yc,"ensureLoadedFromSource");function Cr(q){let E=q?.transaction;if(E){if(!E.lmdbDb)return E.lmdbDb=i,E;do{if(E.lmdbDb?.path===i.path)return E;let S=E.next;if(!S)return E=E.next=new lo,E.lmdbDb=i,E;E=S}while(!0)}else return new HE}o(Cr,"txnForContext");function Ac(q,E,S){if(!q)return;let A=(q.deref?q.deref():q.value)??i.getEntry(q.key)?.value;if(typeof E=="object"){let b=wr,C=A;for(let O=0,D=E.length;O<D;O++){let F=E[O],L=b?.[F];C=L&&C?L(C,S,q):C?.[F],q=null,b=L?.definition?.tableClass?.propertyResolvers}return C}let N=wr[E];return N?N(A,S,q):A[E]}o(Ac,"getAttributeValue");function Pf(q,E,S,A,N){let b=N?.length,C={transaction:A,lazy:b>0||typeof E=="string"||E?.length<4,alwaysPrefetch:!0},O;function D(F,L){let H=F?.value;if(!H)return Ua.SKIP;for(let W=0;W<b;W++)if(!O?.includes(W)&&!N[W](H,F))return Ua.SKIP;return L!==void 0&&(F.key=L),F}if(o(D,"processEntry"),b>0||!q.hasEntries){let F=q.map(L=>{if(O=null,typeof L=="object"&&L?.key!==void 0)return b>0?D(L):L;if(L==null)return Ua.SKIP;for(let H=0;H<b;H++){let ee=N[H].idFilter;if(ee){if(!ee(L))return Ua.SKIP;O||(O=[]),O.push(H)}}return Tc(L,S,C,!1,D)});return Array.isArray(q)&&(F=F.filter(L=>L!==Ua.SKIP)),F.hasEntries=!0,F}return q}o(Pf,"transformToEntries");function bc(q,E,S=server.replication?.getThisNodeId(l)){if(q<=E?.version){if(E?.version===q&&S!==void 0){let A=server.replication?.exportIdMapping(l),N=E.localTime,b=N&&l.get(N);if(b){let C,O,D=Ut(b);for(let F in A)A[F]===S&&(C=F),A[F]===D.nodeId&&(O=F);if(C>O)return 1;if(C===O)return 0}}return-1}return 1}o(bc,"precedesExistingVersion");async function lu(q,E,S){let A=E?.metadataFlags,N=E?.version,b,C;if(!i.attemptLock(q,N,()=>{clearTimeout(C);let L=i.getEntry(q);!L||!L.value||L.metadataFlags&(wn|Aa)?b(lu(q,i.getEntry(q),S)):b(L)}))return new Promise(L=>{b=L,C=setTimeout(()=>{i.unlock(q,N)},_se)});let O=E?.value,D={requestContext:S,replacingRecord:O,replacingEntry:E,replacingVersion:N,noCacheStore:!1,source:null,resourceCache:S?.resourceCache,transaction:void 0,expiresAt:void 0,lastModified:void 0},F=S?.responseHeaders;return new Promise((L,H)=>{let W;oi(vt(D,async ee=>{let oe=performance.now(),B,ue,ae;try{for(let ne of Me.sources)if(ne.get&&(!ne.get.reliesOnPrototype||ne.prototype.get)){if(ne.available?.(E)===!1)continue;if(D.source=ne,B=await ne.get(q,D),B)break}ae=A&wn;let X=D.lastModified||ae&&N;ue=ae||X>N||!O,X||(X=(0,sh.getNextMonotonicTime)());let de=performance.now()-oe;if(gt(de,"cache-resolution",s,null,"success"),F&&rh(F,"Server-Timing",`cache-resolve;dur=${de.toFixed(2)}`,!0),ee.timestamp=X,p&&D.expiresAt==null&&(D.expiresAt=Date.now()+p),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=O,X=N;else throw new lt.ServerError(B.body||"Error from source",B.status);else B=B.body;typeof B.toJSON=="function"&&(B=B.toJSON()),t&&B[t]!==q&&(B[t]=q)}W=!0,L({key:q,version:X,value:B})}catch(X){X.message+=` while resolving record ${q} for ${s}`,O&&((X.code==="ECONNRESET"||X.code==="ECONNREFUSED"||X.code==="EAI_AGAIN")&&!S?.mustRevalidate||S?.staleIfError&&(X.statusCode===500||X.statusCode===502||X.statusCode===503||X.statusCode===504))?(L({key:q,version:N,value:O}),xe.default.trace?.(X.message,"(returned stale record)")):H(X);let de=performance.now()-oe;gt(de,"cache-resolution",s,null,"fail"),F&&rh(F,"Server-Timing",`cache-resolve;dur=${de.toFixed(2)}`,!0),D.transaction.abort();return}if(S?.noCacheStore||D.noCacheStore){D.transaction.abort();return}Cr(D).addWrite({key:q,store:i,entry:E,nodeName:"source",commit:o((X,de)=>{if(de?.version!==N)return;let ne=oo(q,O,B);if(B){Fe.put?.(D,q,B),de&&(S.previousResidency=Me.getResidencyRecord(de.residencyId));let he,Ae=!1,Oe,ze=wc(Me.getResidency(B,S));if(ze){if(!ze.includes(server.hostname))if(he=B,Ae=!0,Me.getResidencyById)B=void 0;else{B=null;for(let kr in r)B||(B={}),B[kr]=he[kr]}Oe=fa(ze)}xe.default.trace?.(`Writing resolved record from source with id: ${q}, timestamp: ${new Date(X).toISOString()}`),R(q,B,de,X,Ae?wn:0,g&&(ue||Ae)||null,{user:D?.user,expiresAt:D.expiresAt,residencyId:Oe},"put",!!ae,he)}else de&&(Fe.delete?.(D,q),xe.default.trace?.(`Deleting resolved record from source with id: ${q}, timestamp: ${new Date(X).toISOString()}`),g||y?R(q,null,de,X,0,g&&ue||null,{user:D?.user},"delete",!!ae):zc(i,de,N))},"commit")})}),()=>{i.unlock(q,N)},ee=>{i.unlock(q,N),W&&xe.default.error?.("Error committing cache update",ee)})})}o(lu,"getFromSource");function Ic(q){if(!q||q.user?.role?.permission?.super_user)return!0;if(q.replicateTo)throw new lt.ClientError("Can not specify replication parameters without super user permissions",403);if(q.replicatedConfirmation)throw new lt.ClientError("Can not specify replication confirmation without super user permissions",403);return!0}o(Ic,"checkContextPermissions");function da(q){let E=!1;if(q&&(q-_r>1&&(E=!0),_r=q),!(He===pt&&!E)&&(pt=He,(0,pl.getWorkerIndex)()===(0,pl.getWorkerCount)()-1))return gr&&clearTimeout(gr),He?new Promise(S=>{let A=new Date;A.setMonth(0),A.setDate(1),A.setHours(0),A.setMinutes(0),A.setSeconds(0);let N=He/(1+_r),b=E?Date.now():Math.ceil((Date.now()-A.getTime())/N)*N+A.getTime(),C=o(O=>{xe.default.trace?.(`Scheduled next cleanup scan at ${new Date(O)}`),gr=setTimeout(()=>te=te.then(async()=>{if(C(Math.max(O+He,Date.now())),i.rootStore.status!=="open"){clearTimeout(gr);return}let D=50,F=new Array(D),L=0,H=Math.pow(_r,8)*(El.get(U.STORAGE_RECLAMATION_EVICTIONFACTOR)??1e5),W=_/Math.pow(Math.max(_r,1),4);xe.default.info?.(`Starting cleanup scan for ${s}, evict threshold ${H}, adjusted eviction ${W}ms`);function ee(oe,B,ue,ae){let ge=oe+W-Date.now();if(ge<0)return!0;if(_r){let X=i.lastSize;return ue&Nn&&_u(ae,de=>{de.size&&(X+=de.size)}),xe.default.trace?.(`shouldEvict adjusted ${ge} ${X}, ${ge*(oe-B)/X} < ${H}`),ge*(oe-B)/X<H}return!1}o(ee,"shouldEvict");try{let oe=0;for(let B of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let{key:ue,value:ae,version:ge,expiresAt:X,metadataFlags:de}=B,ne;ae===null&&!g&&ge+Ese<Date.now()?ne=zc(i,B,ge):X!=null&&ee(X,ge,de,ae)&&(ne=Me.evict(ue,ae,ge),oe++),ne&&(await F[L],F[L]=ne.catch(he=>{xe.default.error?.("Cleanup error",he)}),++L>=D&&(L=0)),await va()}xe.default.info?.(`Finished cleanup scan for ${s}, evicted ${oe} entries`)}catch(oe){xe.default.warn?.(`Error in cleanup scan for ${s}:`,oe)}S(void 0),_r=0}),Math.min(O-Date.now(),2147483647)).unref()},"startNextTimer");C(b)}):void 0}o(da,"scheduleCleanup");function Nc(){V=l?.addDeleteRemovalCallback(n,i,(q,E)=>{i.remove(q,E)})}o(Nc,"addDeleteRemoval");function EE(){(0,pl.getWorkerIndex)()===0&&setInterval(async()=>{if(!au){au=!0;try{let q=j.name,E=r[q];if(!E)throw new Error(`expiresAt attribute ${j} must be indexed`);for(let S of E.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let A of E.getValues(S)){let N=i.getEntry(A);N?.value?N.value[q]<Date.now()&&Me.evict(A,N.value,N.version):i.ifVersion(A,N?.version,()=>E.remove(S,A))}await va()}}catch(q){xe.default.error?.("Error in evicting old records",q)}finally{au=!1}}},pse).unref()}o(EE,"runRecordExpirationEviction");function wc(q){if(q!=null){if(Array.isArray(q))return q;if(typeof q=="number"){if(q>=65536)throw new Error(`Shard id ${q} must be below 65536`);let E=server.shards?.get?.(q);if(E)return xe.default.trace?.(`Shard ${q} mapped to ${E.map(S=>S.name).join(", ")}`),E.map(S=>S.name);throw new Error(`Shard ${q} is not defined`)}throw new Error(`Shard or residency list ${q} is not a valid type, must be a shard number or residency list of node hostnames`)}}o(wc,"residencyFromFunction");function fa(q){if(q){let E=q.join(","),S=d.get([Symbol.for("residency_by_set"),E]);return S||(d.put([Symbol.for("residency_by_set"),E],S=Math.floor(Math.random()*2147418112)+65535),d.put([Symbol.for("residency_by_id"),S],q),S)}}o(fa,"getResidencyId")}function ZI(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 $H(){}function tN(e){zH=e}function Tg(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 Sg(parseInt(e.slice(1),36));if(e==="null")return null;if(!/^-?[0-9]+$/.test(e)&&!(e instanceof Date))throw new SyntaxError;return Sg(+e);case"Float":return e==="null"?null:Sg(+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;Rse.test(e)||(e+="Z");let n=new Date(e);return Sg(n.getTime()),n}return new Date(+e);case void 0:case"Any":return(0,Rg.autoCast)(e);default:return e}}catch(n){throw n.message=`Invalid value for attribute ${t.name}: "${e}", expecting ${r}`,n.statusCode=400,n}}function Sg(e){if(isNaN(e))throw new SyntaxError;return e}function VH(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 oi(e,t,r){return e?.then?e.then(t,r):t(e)}function KH(e){return e!=null}function ws(e){try{return JSON.stringify(e)}catch{return e}}function yse(e){let t=process.pid;return e.env.readerList().slice(1).some(r=>+r.match(/\d+/)?.[0]!=t)}var Ua,sh,YH,WH,El,lt,ih,oh,xe,_l,pl,Rg,eN,fse,mse,hse,zH,pse,Ese,HH,_se,kH,gse,wn,Aa,Sse,GH,qH,Tse,nLe,Rse,va,Sm=fe(()=>{k();Ua=require("lmdb"),sh=w(An()),YH=w(require("lodash")),WH=w(zf());ba();Qf();El=w(ce());WA();lt=w(Ee()),ih=w(bo()),oh=w(ti());Le();R_();xe=w(Ni());oI();Uc();_l=require("ordered-binary"),pl=w(st());uo();Rg=w(ie());Yc();Hi();qE();nh();eN=w(require("node:fs"));Ts();o_();({sortBy:fse}=YH.default),{validateAttribute:mse}=WH.default,hse=new Uint8Array(9);hse[8]=192;pse=6e4,Ese=864e5;El.initSync();HH=El.get(U.STORAGE_PREFETCHWRITES),_se=1e4,kH=1,gse=2,wn=1,Aa=8,Sse=Buffer.allocUnsafeSlow(8192),GH=1978,qH=100,Tse={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},nLe=(0,Rg.convertToMS)(El.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(yg,"makeTable");o(ZI,"attributesAsObject");o($H,"noop");o(tN,"setServerUtilities");Rse=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Tg,"coerceType");o(Sg,"rejectNaN");o(VH,"isDescendantId");va=o(()=>new Promise(setImmediate),"rest");o(oi,"when");o(KH,"exists");o(ws,"stringify");o(yse,"hasOtherProcesses")});function Ag(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Euclidean distance comparison requires an array");let r=0,n=Math.max(e.length,t.length);for(let s=0;s<n;s++){let i=e[s]||0,a=t[s]||0,c=i-a;r+=c*c}return r}function bg(e,t){if(!Array.isArray(e)||!Array.isArray(t))throw new Error("Cosine distance comparison requires an array");let r=0,n=0,s=0,i=Math.max(e.length,t.length);for(let a=0;a<i;a++){let c=e[a]||0,l=t[a]||0;r+=c*l,n+=c*c,s+=l*l}return n=Math.sqrt(n),s=Math.sqrt(s),1-r/(n*s||1)}var QH=fe(()=>{o(Ag,"euclideanDistance");o(bg,"cosineDistance")});var JH,XH,Wu,ki,Yu,Ase,bse,Ig,ZH=fe(()=>{QH();JH=require("msgpackr"),XH=w(Ni()),Wu=w(Ee()),ki=(0,XH.loggerWithTag)("HNSW"),Yu=Symbol.for("entryPoint"),Ase=Symbol.for("key"),bse=10,Ig=class{static{o(this,"HierarchicalNavigableSmallWorld")}static useObjectStore=!0;indexStore;M=16;efConstruction=100;efConstructionSearch=50;mL=1/Math.log(this.M);optimizeRouting=.5;nodesVisitedCount=0;idIncrementer;distance;constructor(t,r){this.indexStore=t,t&&(this.indexStore.encoder.useFloat32=JH.FLOAT32_OPTIONS.ALWAYS),this.distance=r?.distance==="euclidean"?Ag:bg,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"?[Ase,t]:t,i=this.indexStore.get(s);if(!i){if(!r)return;if(!this.idIncrementer){let f=0;for(let m of this.indexStore.getKeys({reverse:!0,limit:1,start:1/0,end:0}))typeof m=="number"&&(f=m);this.idIncrementer=new BigInt64Array([BigInt(f)+1n]),this.idIncrementer=new BigInt64Array(this.indexStore.getUserSharedBuffer("next-id",this.idIncrementer.buffer))}i=Number(Atomics.add(this.idIncrementer,0,1n)),this.indexStore.put(s,i)}let a=new Map,c,l=this.indexStore.get(Yu);if(n?c={...this.indexStore.get(i)}:c={},r){let f=l&&this.indexStore.get(l);if(f===void 0){let _=Math.floor(-Math.log(Math.random())*this.mL),g={vector:r,level:_,primaryKey:t};for(let y=0;y<=_;y++)g[y]=[];if(this.indexStore.put(i,g),typeof i!="number")throw new Error("Invalid nodeId: "+i);ki.debug?.("setting entry point to",i),this.indexStore.put(Yu,i);return}let m=c.level??Math.min(Math.floor(-Math.log(Math.random())*this.mL),bse),h=f.level;if(m>=h){if(typeof i!="number")throw new Error("Invalid nodeId: "+i);ki.debug?.("setting entry point to",i),this.indexStore.put(Yu,i)}for(;h>m;){let _=this.searchLayer(r,l,f,this.efConstruction,h);_.length>0&&(l=_[0].id,f=_[0].node),h--}let p=new Array(m+1);for(let _=0;_<=m;_++)p[_]=[];for(let _=Math.min(m,h);_>=0;_--){let g=this.searchLayer(r,l,f,this.efConstruction,_);g=g.slice(0,this.M<<1),g.length===0&&_===0&&ki.info?.("should not have zero connections for",l);let y=p[_];for(let T=0;T<g.length;T++){let{id:R,distance:I,node:P}=g[T];if(R===i)continue;let Y=[];if(this.optimizeRouting){let $=!1,j=P[_],V=1+this.optimizeRouting*(1+.5*T/this.M);for(let le=0;le<j.length;le++){let{id:re,distance:se}=j[le],_e=1+this.optimizeRouting*(1+.5*le/this.M);for(let Ne=0;Ne<y.length;Ne++){let{id:Fe,distance:He}=y[Ne];if(Fe===re){I*V>He+se?$=!0:se*_e>I+He&&(Y.push({fromId:Fe,toId:R}),Y.push({fromId:R,toId:Fe}));break}}if($)break}if($)continue}else if(T>=(_>0?this.M:this.M<<1))continue;y.push({id:R,distance:I});for(let{fromId:$,toId:j}of Y){let V=d($);V||(V=d($,this.indexStore.get($)));for(let le=0;le<V[_].length;le++)if(V[_][le].id===j){Object.isFrozen(V[_])&&(V[_]=V[_].slice()),V[_].splice(le,1);break}}let te=c[_],x=te?.find(({id:$})=>$===R);if(x){let $=te?.indexOf(x);te.copied||(te=[...te],te.copied=!0,c[_]=te),te.splice($,1)}else this.addConnection(R,d(R,P),i,_,I,d)}}this.indexStore.put(i,{vector:r,level:m,primaryKey:t,...p})}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:h,value:p}of this.indexStore.getRange({start:0,end:1/0}))if(p.level>m){if(l=h,p.level===f)break;m=p.level}}if(l===void 0)this.indexStore.remove(Yu);else{if(typeof l!="number")throw new Error("Invalid nodeId: "+l);ki.debug?.("setting entry point to",l),this.indexStore.put(Yu,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:h}of m){let p=d(h,this.indexStore.get(h));for(let _=0;_<=f;_++)p[_]=p[_]?.filter(({id:g})=>g!==i),p[_].length===0&&(ki.info?.("node was left orphaned, will reindex",h),u.set(p.primaryKey,p.vector))}}function d(f,m){let h=a.get(f);return!h&&m&&(h={...m},a.set(f,h)),h}o(d,"updateNode");for(let[f,m]of a)this.indexStore.put(f,m);for(let[f,m]of u)this.index(f,m,m);this.checkSymmetry(i,this.indexStore.get(i))}getEntryPoint(){let t=this.indexStore.get(Yu);if(t===void 0)return;let r=this.indexStore.get(t);return{id:t,...r}}searchLayer(t,r,n,s,i,a=this.distance){let c=new Set([r]),l=[{id:r,distance:this.distance(t,n.vector),node:n}],u=[...l];for(;l.length>0;){l.sort((h,p)=>h.distance-p.distance);let d=l.shift(),f=u[u.length-1].distance;if(d.distance>f)break;let m=d.node;for(let{id:h}of m[i]||[]){if(c.has(h)||h===void 0)continue;c.add(h);let p=this.indexStore.get(h);if(!p)continue;this.nodesVisitedCount++;let _=a(t,p.vector);if(_<f||u.length<s){let g={id:h,distance:_,node:p};l.push(g),u.push(g)}}u.sort((h,p)=>h.distance-p.distance),u.length>s&&u.splice(s,u.length-s)}return u.visited=c.size,u}search({target:t,value:r,descending:n,distance:s,comparator:i}){let a=0;switch(i){case"lt":case"le":a=r;case"sort":break;default:throw new Wu.ClientError(`Can not use "${i}" comparator with HNSW`)}if(n)throw new Wu.ClientError("Can not use descending sort order with HNSW");let c;if(s==="cosine")c=bg;else if(s==="euclidean")c=Ag;else{if(s)throw new Wu.ClientError("Unknown distance function");c=this.distance}if(!t)throw new Wu.ClientError("A target vector must be provided for an HNSW query");if(!Array.isArray(t))throw new Wu.ClientError("The target vector must be an array");let l=this.getEntryPoint();if(!l)return[];let u=l.id,d=[];for(let f=l.level;f>=0;f--)if(d=this.searchLayer(t,u,l,this.efConstructionSearch,f,c),d.length>0){let m=d[0];l=m.node,u=m.id}return a&&(d=d.filter(f=>f.distance<a)),d.map(f=>({key:f.node.primaryKey,distance:f.distance}))}checkSymmetry(t,r){if(!r)return;let n=0,s;for(;(s=r[n])&&s.length!==0;){for(let{id:i}of s){let a=this.indexStore.get(i);if(!a){ki.info?.("could not find neighbor node",a);continue}a[n]?.find(({id:l})=>l==t)||ki.info?.("asymmetry detected",a[n])}n++}}addConnection(t,r,n,s,i,a){r[s]||(r[s]=[]);let c=s===0?this.M<<1:this.M;if(this.optimizeRouting&&(c<<=2),r[s].length>=c+(c>>2)){ki.warn?.("maxConnections reached, removing some connections",c);let l=[...r[s]];l.sort((f,m)=>f.distance-m.distance);let u=l.slice(0,c),d=l.slice(c);r[s]=u;for(let f of d){let m=a(f.id)??this.indexStore.get(f.id);m&&m[s]&&(m=a(f.id,m),m[s]=m[s].filter(({id:h})=>h!==t),s===0&&m[s].length===0&&ki.info?.("should not remove last connection",t,n))}}r[s].find(({id:l})=>l===n)?ki.debug?.("already connected",t,n):r[s]=[...r[s],{id:n,distance:i}]}validateConnectivity(t=0){let r=this.getEntryPoint(),n=new Set,s=[r.id];n.add(r.id);let i=0;for(;s.length>0;){let a=s.shift(),c=this.indexStore.get(a);for(let l=t;l<=c.level;l++)for(let{id:u}of c[l]||[])i++,n.has(u)||(n.add(u),s.push(u))}return n.size!==this.totalNodes&&console.log("visited",n.size,"total",this.totalNodes),{isFullyConnected:n.size===this.totalNodes,averageConnections:i/n.size}}get totalNodes(){return Array.from(this.indexStore.getKeys({start:0,end:1/0})).length}estimateCountAsSort(){return Math.sqrt(this.indexStore.getStats().entryCount*this.efConstructionSearch)}propertyResolver(t,r,n){let s=r?.sort;if(s){let i=s.vectorDistances;if(i){let l=i.get(n);if(l)return l}else i=r.vectorDistances=s.vectorDistances=new Map;let a=this.distance;s.type&&(a=s.distance==="euclidean"?Ag:bg);let c=a(s.target,t);return i.set(n,c),c}return t}}});var rN,ek=fe(()=>{ZH();rN={HNSW:Ig}});var ft={};Ce(ft,{database:()=>Hu,databaseEnvs:()=>Po,databases:()=>Ge,dropDatabase:()=>dI,dropTableMeta:()=>Cse,getDatabases:()=>it,getDefaultCompression:()=>Lg,getTables:()=>Ise,onRemovedDB:()=>fh,onUpdatedTable:()=>gl,readMetaDb:()=>ah,resetDatabases:()=>Zu,table:()=>et,tables:()=>cn});function Ise(){return Cg||it(),cn||{}}function it(){if(Cg)return Ge;Cg=!0,Qu=new Map;let e=(0,qt.getHdbBasePath)()&&(0,xt.join)((0,qt.getHdbBasePath)(),Pc),t=(0,qt.get)(U.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,qt.get)(U.STORAGE_PATH)||e&&((0,Zn.existsSync)(e)?e:(0,xt.join)((0,qt.getHdbBasePath)(),yE)),!e)return;if((0,Zn.existsSync)(e))for(let n of(0,Zn.readdirSync)(e,{withFileTypes:!0})){let s=(0,xt.basename)(n.name,".mdb");n.isFile()&&(0,xt.extname)(n.name).toLowerCase()===".mdb"&&!t[s]?.path&&ah((0,xt.join)(e,n.name),null,s)}if((0,Zn.existsSync)((0,ju.getBaseSchemaPath)())){for(let n of(0,Zn.readdirSync)((0,ju.getBaseSchemaPath)(),{withFileTypes:!0}))if(!n.isFile()){let s=(0,xt.join)((0,ju.getBaseSchemaPath)(),n.name),i=(0,xt.join)((0,ju.getTransactionAuditStoreBasePath)(),n.name);for(let a of(0,Zn.readdirSync)(s,{withFileTypes:!0}))if(a.isFile()&&(0,xt.extname)(a.name).toLowerCase()===".mdb"){let c=(0,xt.join)(i,a.name);ah((0,xt.join)(s,a.name),(0,xt.basename)(a.name,".mdb"),n.name,c,!0)}}}if(t)for(let n in t){let s=t[n],i=s.path;if((0,Zn.existsSync)(i))for(let c of(0,Zn.readdirSync)(i,{withFileTypes:!0}))c.isFile()&&(0,xt.extname)(c.name).toLowerCase()===".mdb"&&ah((0,xt.join)(i,c.name),(0,xt.basename)(c.name,".mdb"),n);let a=s.tables;if(a)for(let c in a){let l=a[c],u=(0,xt.join)(l.path,(0,xt.basename)(c+".mdb"));(0,Zn.existsSync)(u)&&ah(u,c,n,null,!0)}}for(let n in Ge){let s=Qu.get(n);if(s){let i=Ge[n];n.includes("delete")&&yr.trace(`defined tables ${Array.from(s.keys())}`);for(let a in i)s.has(a)||(yr.trace(`delete table class ${a}`),delete i[a])}else if(delete Ge[n],n==="data"){for(let i in cn)delete cn[i];delete cn[Pg]}}let r=["hdb_temp","hdb_certificate","hdb_raw_analytics","hdb_session_will","hdb_job","hdb_license","hdb_info"];if((0,qt.get)(U.ANALYTICS_REPLICATE)===!1?r.push("hdb_analytics"):(Ge.system?.hdb_analytics?.enableAuditing(),Ge.system?.hdb_analytics_hostname?.enableAuditing()),Ge.system)for(let n of r)Ge.system[n]&&(Ge.system[n].replicate=!1);return Qu=null,Ge}function Zu(){Cg=!1;for(let[,e]of Po)e.needsDeletion=!0;it();for(let[e,t]of Po)if(t.needsDeletion&&!e.endsWith("system.mdb")){t.close(),Po.delete(e);let r=Ge[t.databaseName];for(let n in r)if(r[n].primaryStore.path===e){delete Ge[t.databaseName],lh.forEach(i=>i(t.databaseName));break}}return Ge}function ah(e,t,r=iN,n,s){let i=new nN.default(e,!1);try{let a=Po.get(e);a?a.needsDeletion=!1:(a=(0,Ju.open)(i),Po.set(e,a));let c=new Xu.default(!1),l=a.dbisDb||(a.dbisDb=a.openDB(Ng.INTERNAL_DBIS_NAME,c)),u=a.auditStore;u||(n?(0,Zn.existsSync)(n)&&(i.path=n,u=(0,Ju.open)(i),u.isLegacy=!0):u=l_(a));let d=ik(r),f=d[Pg],m=new Map;for(let{key:h,value:p}of l.getRange({start:!1})){let[_,g]=h.toString().split("/");g===""?g=p.name:g||(g=_,_=t,p.name||(p.name=g,p.indexed=!p.is_hash_attribute)),f?.add(_);let y=m.get(_);y||m.set(_,y={attributes:[]}),(g==null||p.is_hash_attribute)&&(y.primary=p),g!=null&&y.attributes.push(p),Object.defineProperty(p,"key",{value:h,configurable:!0})}for(let[h,p]of m){let{attributes:_,primary:g}=p;if(!g){for(let se of _)if(se.is_hash_attribute||se.isPrimaryKey){g=se;break}if(!g){yr.warn(`Unable to find a primary key attribute on table ${h}, with attributes: ${JSON.stringify(_)}`);continue}}let y=d[h],T={},R=[],I,P,Y=typeof g.audit=="boolean"?g.audit:(0,qt.get)(U.LOGGING_AUDITLOG),te=g.trackDeletes,x=g.expiration,$=g.eviction,j=g.sealed,V=g.splitSegments,le=g.replicate;if(y)T=y.indices,R=y.attributes,y.schemaVersion++;else{I=g.tableId,I?I>=(l.get(zu)||0)&&(l.putSync(zu,I+1),yr.info(`Updating next table id (it was out of sync) to ${I+1} for ${h}`)):(g.tableId=I=l.get(zu),I||(I=1),yr.debug("Table {tableName} missing an id, assigning {tableId}"),l.putSync(zu,I+1),l.putSync(g.key,g));let se=new Xu.default(!g.is_hash_attribute,g.is_hash_attribute);if(se.compression=g.compression,se.compression){let _e=(0,qt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||sk;se.compression.threshold=_e}P=__(a.openDB(g.key,se),a),a.databaseName=r,P.tableId=I}let re;for(let se of _){se.attribute=se.name;try{if(!se.is_hash_attribute&&(se.indexed||se.attribute&&!se.name)){if(!T[se.name]){let Ne=ak(se.key,a,se);T[se.name]=Ne,T[se.name].indexNulls=se.indexNulls}let _e=R.find(Ne=>Ne.name===se.name);_e?R.splice(R.indexOf(_e),1,se):R.push(se),re=!0}}catch(_e){yr.error("Error trying to update attribute",se,R,T,_e)}}for(let se of R)if(!_.find(Ne=>Ne.name===se.name)){if(se.is_hash_attribute){yr.error("Unable to remove existing primary key attribute",se);continue}se.indexed&&(R.splice(R.indexOf(se),1),re=!0)}if(y)re&&(y.schemaVersion++,y.updatedAttributes());else{y=ok(d,h,yg({primaryStore:P,auditStore:u,audit:Y,sealed:j,splitSegments:V,replicate:le,expirationMS:x&&x*1e3,evictionMS:$&&$*1e3,trackDeletes:te,tableName:h,tableId:I,primaryKey:g.name,databasePath:s?r+"/"+h:r,databaseName:r,indices:T,attributes:_,schemaDefined:g.schemaDefined,dbisDB:l})),y.schemaVersion=1;for(let se of ch)se(y)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function ik(e){let t=Ge[e];if(t||(e==="data"?t=Ge[e]=cn:e==="system"?Object.defineProperty(Ge,"system",{value:t=Object.create(null),configurable:!0}):t=Ge[e]=Object.create(null)),Qu&&!Qu.has(e)){let r=new Set;t[Pg]=r,Qu.set(e,r)}return t}function ok(e,t,r){return e[t]=r,r}function Hu({database:e,table:t}){e||(e=iN),it();let r=ik(e),n=(0,xt.join)((0,qt.getHdbBasePath)(),Pc),s=(0,qt.get)(U.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,qt.get)(U.STORAGE_PATH)||((0,Zn.existsSync)(n)?n:(0,xt.join)((0,qt.getHdbBasePath)(),yE));let a=(0,xt.join)(n,(i?t:e)+".mdb"),c=Po.get(a);if(!c||c.status==="closed"){let l=new nN.default(a,!1);c=(0,Ju.open)(l),Po.set(a,c)}return c.auditStore||(c.auditStore=l_(c)),c}async function dI(e){if(!Ge[e])throw new Error("Schema does not exist");let t=Ge[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Po.delete(r.path),r.status==="open"&&(await r.close(),await uh.remove(r.path));if(r||(r=Hu({database:e,table:null}),r.status==="open"&&(await r.close(),await uh.remove(r.path))),e==="data"){for(let n in cn)delete cn[n];delete cn[Pg]}delete Ge[e],lh.forEach(n=>n(e)),await _A(r)}function ak(e,t,r){let n=r.is_hash_attribute||r.indexed.type&&rN[r.indexed.type]?.useObjectStore,s=new Xu.default(!n,n),i=t.openDB(e,s);if(r.indexed.type){let a=rN[r.indexed.type];a?i.customIndex=new a(i,r.indexed):yr.error(`The indexing type '${r.indexed.type}' is unknown`)}return i}function et(e){let{table:t,database:r,expiration:n,eviction:s,scanInterval:i,attributes:a,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,schemaDefined:m,origin:h}=e;r||(r=iN);let p=Hu({database:r,table:t}),_=Ge[r];yr.trace(`Defining ${t} in ${r}`);let g=_?.[t];if(p.status==="closed")throw new Error(`Can not use a closed data store for ${t}`);let y,T,R;m==null&&(m=!0);let I=new Xu.default(!1);for(let V of a)V.attribute&&!V.name?(V.name=V.attribute,V.indexed=!0):V.attribute=V.name,V.expiresAt&&(V.indexed=!0);let P,Y;if(g){if(y=g.primaryKey,g.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${t} class`);u==null&&(u=g.splitSegments),g.attributes.splice(0,g.attributes.length,...a)}else{let V=p.auditStore;T=a.find(_e=>_e.isPrimaryKey)||{},y=T.name,T.is_hash_attribute=T.isPrimaryKey=!0,T.schemaDefined=m,T.compression=Lg(),f&&(T.trackDeletes=!0),c=T.audit=typeof c=="boolean"?c:(0,qt.get)(U.LOGGING_AUDITLOG),n&&(T.expiration=n),s&&(T.eviction=s),u??=!1,T.splitSegments=u,typeof l=="boolean"&&(T.sealed=l),typeof d=="boolean"&&(T.replicate=d),h&&(T.origins?T.origins.includes(h)||T.origins.push(h):T.origins=[h]),yr.trace(`${t} table loading, opening primary store`);let le=new Xu.default(!1,!0);le.compression=T.compression;let re=t+"/";if(R=p.dbisDb=p.openDB(Ng.INTERNAL_DBIS_NAME,I),j(),R.get(re))return Y&&Y(),Zu(),et(e);let se=__(p.openDB(re,le),p);p.databaseName=r,se.tableId=R.get(zu),yr.trace(`Assigning new table id ${se.tableId} for ${t}`),se.tableId||(se.tableId=1),R.put(zu,se.tableId+1),T.tableId=se.tableId,g=ok(_,t,yg({primaryStore:se,auditStore:V,audit:c,sealed:l,splitSegments:u,replicate:d,trackDeletes:f,expirationMS:n&&n*1e3,evictionMS:s&&s*1e3,primaryKey:y,tableName:t,tableId:se.tableId,databasePath:r,databaseName:r,indices:{},attributes:a,schemaDefined:m,dbisDB:R})),g.schemaVersion=1,P=!0,R.put(re,T)}let te=g.indices;R=R||(p.dbisDb=p.openDB(Ng.INTERNAL_DBIS_NAME,I)),g.dbisDB=R;let x=[];for(let{key:V,value:le}of R.getRange({start:!0})){let[re,se]=V.toString().split("/");if(se===""&&(se=le.name),se){if(re!==t)continue}else continue;let _e=a.find(Fe=>Fe.name===se),Ne=!_e?.indexed&&le.indexed&&!le.isPrimaryKey;if((!_e||Ne)&&(j(),P=!0,_e||R.remove(V),Ne)){let Fe=g.indices[re];Fe&&x.push(Fe)}}let $=[];try{for(let V of a||[]){if((V.relationship||V.computed)&&(P=!0,V.relationship))continue;let le=t+"/"+(V.name||"");Object.defineProperty(V,"key",{value:le,configurable:!0});let re=R.get(le);if(V.isPrimaryKey){if(re=re||R.get(le=t+"/")||{},c!==void 0&&c!==g.audit||l!==void 0&&l!==g.sealed||d!==void 0&&d!==g.replicate||(+n||void 0)!==(+re.expiration||void 0)||(+s||void 0)!==(+re.eviction||void 0)||V.type!==re.type){let _e={...re};typeof c=="boolean"&&(c&&g.enableAuditing(c),_e.audit=c),n&&(_e.expiration=+n),s&&(_e.eviction=+s),l!==void 0&&(_e.sealed=l),d!==void 0&&(_e.replicate=d),V.type&&(_e.type=V.type),P=!0,j(),R.put(le,_e)}continue}re?.attribute&&!re.name&&(re.indexed=!0);let se=!re||re.type!==V.type||JSON.stringify(re.indexed)!==JSON.stringify(V.indexed)||re.nullable!==V.nullable||re.version!==V.version||JSON.stringify(re.properties)!==JSON.stringify(V.properties)||JSON.stringify(re.elements)!==JSON.stringify(V.elements);if(V.indexed){let _e=ak(le,p,V);(se||re.indexingPID&&re.indexingPID!==process.pid||re.restartNumber<dh.workerData?.restartNumber)&&(P=!0,j(),re=R.get(le),(se||re.indexingPID&&re.indexingPID!==process.pid||re.restartNumber<dh.workerData?.restartNumber)&&(P=!0,V.indexNulls===void 0&&(V.indexNulls=!0),g.primaryStore.getStats().entryCount>0&&(V.lastIndexedKey=re?.lastIndexedKey??void 0,V.indexingPID=process.pid,_e.isIndexing=!0,Object.defineProperty(V,"dbi",{value:_e}),$.push(V))),R.put(le,V)),re?.indexNulls&&V.indexNulls===void 0&&(V.indexNulls=!0),_e.indexNulls=V.indexNulls,te[V.name]=_e}else se&&(P=!0,j(),R.put(le,V))}}finally{Y&&Y()}if(P&&(g.schemaVersion++,g.updatedAttributes()),yr.trace(`${t} table loading, running index`),$.length>0||x.length>0?g.indexingOperation=Ose(g,$,x):P&&wg.signalSchemaChange(new Og.SchemaEventMsg(process.pid,"schema-change",g.databaseName,g.tableName)),g.origin=h,P)for(let V of ch)V(g,h!=="cluster");return(n||s||i)&&g.setTTLExpiration({expiration:n,eviction:s,scanInterval:i}),yr.trace(`${t} table loaded`),g;function j(){Y||p.transactionSync(()=>({then(V){Y=V}}))}o(j,"startTxn")}async function Ose(e,t,r){try{yr.info(`Indexing ${e.tableName} attributes`,t);let n=e.schemaVersion;await wg.signalSchemaChange(new Og.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,a={},c=0,l=t.length;if(await new Promise(u=>setImmediate(u)),l>0){let u;for(let f of t)(0,Ju.compareKeys)(f.lastIndexedKey,u)<0&&(u=f.lastIndexedKey),f.lastIndexedKey==null&&f.dbi.clearAsync();let d=0;for(let{key:f,value:m,version:h}of e.primaryStore.getRange({start:u,lazy:l<4,versions:!0,snapshot:!1}))if(m){if(d++,s=e.primaryStore.ifVersion(f,h,()=>{for(let p=0;p<l;p++){let _=t[p],g=_.name,y=_.dbi;try{let T=_.resolve,R=m&&(T?T(m):m[g]);if(y.customIndex){y.customIndex.index(f,R);continue}let I=(0,tk.getIndexedValues)(R);if(I)for(let P=0,Y=I.length;P<Y;P++)y.put(I[P],f)}catch(T){a[g]||(a[g]=!0,yr.error(`Error indexing attribute ${g}`,T))}}}),s.then(()=>d--,p=>{d--,yr.error(p)}),dh.workerData&&dh.workerData.restartNumber!==nk.restartNumber&&(i=!0),++c%100===0||i){for(let p of t)p.lastIndexedKey=f,e.dbisDB.put(p.key,p);if(i)return}d>Nse?await s:d>wse&&await new Promise(p=>setImmediate(p))}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 wg.signalSchemaChange(new Og.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName)),yr.info(`Finished indexing ${e.tableName} attributes`,t)}catch(n){yr.error("Error in indexing",n)}}function Cse({table:e,database:t}){let r=Hu({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 gl(e){return ch.push(e),{remove(){let t=ch.indexOf(e);t>-1&&ch.splice(t,1)}}}function fh(e){return lh.push(e),{remove(){let t=lh.indexOf(e);t>-1&&lh.splice(t,1)}}}function Lg(){let e=(0,qt.get)(U.STORAGE_COMPRESSION),t=(0,qt.get)(U.STORAGE_COMPRESSION_DICTIONARY),r=(0,qt.get)(U.STORAGE_COMPRESSION_THRESHOLD)||sk,n={startingOffset:32};return t&&(n.dictionary=uh.readFileSync(t)),r&&(n.threshold=r),e&&n}var qt,Ng,Ju,xt,Zn,ju,Xu,nN,uh,sN,tk,wg,Og,dh,rk,nk,yr,iN,Pg,sk,cn,Ge,zu,ch,lh,Cg,Po,Qu,Nse,wse,Le=fe(()=>{qt=w(ce()),Ng=w(kt()),Ju=require("lmdb"),xt=require("path"),Zn=require("fs"),ju=w(At());Sm();Xu=w(Tm()),nN=w(Rm());k();uh=w(require("fs-extra")),sN=w(Ws()),tk=w(An()),wg=w(bo()),Og=w(ti()),dh=require("worker_threads"),rk=w(z()),nk=w(st());uo();Yc();Ts();ek();yr=(0,rk.forComponent)("storage"),iN="data",Pg=Symbol("defined-tables"),sk=((0,qt.get)(U.STORAGE_PAGESIZE)||4096)-60;(0,qt.initSync)();cn=Object.create(null),Ge=Object.create(null);(0,sN._assignPackageExport)("databases",Ge);(0,sN._assignPackageExport)("tables",cn);zu=Symbol.for("next-table-id"),ch=[],lh=[],Po=new Map;o(Ise,"getTables");o(it,"getDatabases");o(Zu,"resetDatabases");o(ah,"readMetaDb");o(ik,"ensureDB");o(ok,"setTable");o(Hu,"database");o(dI,"dropDatabase");o(ak,"openIndex");o(et,"table");Nse=1e3,wse=10;o(Ose,"runIndexing");o(Cse,"dropTableMeta");o(gl,"onUpdatedTable");o(fh,"onRemovedDB");o(Lg,"getDefaultCompression")});var cN={};Ce(cN,{loadGQLSchema:()=>Dse,start:()=>aN,startOnMainThread:()=>Lse});function aN({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:a,Source:c,Kind:l,NamedTypeNode:u,StringValueNode:d}=await import("graphql"),f=a(new c(r.toString(),s)),m=new Map,h=[],p;for(let y of f.definitions)switch(y.kind){case l.OBJECT_TYPE_DEFINITION:let Y=function(x){if(x.kind==="NonNullType"){let V=Y(x.type);return V.nullable=!1,V}if(x.kind==="ListType")return{type:"array",elements:Y(x.type)};let j={type:x.name?.value};return Object.defineProperty(j,"location",{value:x.loc.startToken}),j};o(Y,"getProperty");let T=y.name.value,R=[],I={table:null,database:null,properties:R};m.set(T,I);for(let x of y.directives){if(x.name.value==="table"){for(let j of x.arguments)I[j.name.value]=j.value.value;I.schema&&(I.database=I.schema),I.table||(I.table=T),I.audit&&(I.audit=I.audit!=="false"),I.attributes=I.properties,h.push(I)}if(x.name.value==="sealed"&&(I.sealed=!0),x.name.value==="splitSegments"&&(I.splitSegments=!0),x.name.value==="replicate"&&(I.replicate=!0),x.name.value==="export"){I.export=!0;for(let j of x.arguments)typeof I.export!="object"&&(I.export={}),I.export[j.name.value]=j.value.value}}let P=!1,te={};for(let x of y.fields){let $=Y(x.type);$.name=x.name.value,R.push($),te[$.name]=void 0;for(let j of x.directives){let V=j.name.value;if(V==="primaryKey")P?console.warn("Can not define two attributes as a primary key at",j.loc):($.isPrimaryKey=!0,P=!0);else if(V==="indexed"){let le={};for(let re of j.arguments||[])le[re.name.value]=re.value.value;$.indexed=le}else if(V==="computed"){for(let le of j.arguments||[])if(le.name.value==="from"){let re=le.value.value;$.computed={from:g(re,le,te)},$.version==null&&($.version=re)}else le.name.value==="version"&&($.version=le.value.value);$.computed=$.computed||!0}else if(V==="relationship"){let le={};for(let re of j.arguments)le[re.name.value]=re.value.value;$.relationship=le}else if(V==="createdTime")$.assignCreatedTime=!0;else if(V==="updatedTime")$.assignUpdatedTime=!0;else if(V==="expiresAt")$.expiresAt=!0;else if(V==="allow"){let le=$.authorizedRoles=[];for(let re of j.arguments)re.name.value==="role"&&le.push(re.value.value)}else server.knownGraphQLDirectives.includes(V)&&console.warn(`@${V} is an unknown directive, at`,j.loc)}}I.type=T,T==="Query"&&(p=I)}function _(y){let T=m.get(y.type);T?(Object.defineProperty(y,"properties",{value:T.properties}),Object.defineProperty(y,"definition",{value:T})):y.type==="array"?_(y.elements):Pse.includes(y.type)||(0,lk.getWorkerIndex)()===0&&console.error(`The type ${y.type} is unknown at line ${y.location.line}, column ${y.location.column}, in ${s}`)}o(_,"connectPropertyType");for(let y of m.values())for(let T of y.properties)_(T);for(let y of h)y.tableClass=e(y),y.export&&(y.export.name===""?i.set((0,oN.dirname)(n),y.tableClass):i.set((0,oN.dirname)(n)+"/"+(y.export.name||y.type),y.tableClass,y.export));function g(y,T,R){return new ck.Script(`function computed(attributes) { return function(record) { with(attributes) { with (record) { return ${y}; } } } } computed;`,{filename:s,lineOffset:T.loc.startToken.line-1,columnOffset:T.loc.startToken.column}).runInThisContext()(R)}o(g,"createComputedFrom")}}var oN,ck,lk,Pse,Lse,Dse,uk=fe(()=>{oN=require("path"),ck=require("node:vm");Le();lk=w(st()),Pse=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt","Blob"];server.knownGraphQLDirectives&&(server.knownGraphQLDirectives=["table","sealed","export","primaryKey","indexed","computed","relationship","createdTime","updatedTime","expiresAt","allow"]);o(aN,"start");Lse=aN,Dse=aN({ensureTable:et}).handleFile});var uN={};Ce(uN,{start:()=>Gse});function Mse(e){if(e.kind!==Be.Kind.OPERATION_DEFINITION&&e.kind!==Be.Kind.FRAGMENT_DEFINITION)throw new Ur(`Unexpected non-executable definition type ${e.kind}.`)}function dk(e){if(typeof e!="object"||e===null)throw new Gi("Request body must be an object.");if(!("query"in e))throw new Gi("Request body must contain a `query` field.");if(typeof e.query!="string")throw new Gi("Request body `query` field must be a string.");if("variables"in e&&(typeof e.variables!="object"||e.variables===null))throw new Gi("Request body `variables` field must be an object.");if("operationName"in e&&typeof e.operationName!="string")throw new Gi("Request body `operationName` field must be a string.")}function lN(e){return parseInt(e.value,10)}function mk(e){return parseFloat(e.value)}function hk(e,t,r){let n=r.get(e.name.value);return pk(n)?Ek(n,t):{attribute:t,value:n}}function pk(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Ek(e,t){return t=typeof t=="string"?[t]:t,Object.entries(e).flatMap(([r,n])=>(t=[...t,r],pk(n)?Ek(n,t):{attribute:t,value:n}))}function vse(e,t,r){switch(t=[...t,e.name.value],e.value.kind){case Be.Kind.NULL:return{attribute:t,value:null};case Be.Kind.INT:return{attribute:t,value:lN(e.value)};case Be.Kind.FLOAT:return{attribute:t,value:mk(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:t,value:e.value.value};case Be.Kind.VARIABLE:return hk(e.value,t,r);case Be.Kind.OBJECT:return _k(e.value,t,r);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Ur(`Value type, ${e.value.kind}, is not supported.`)}}function _k(e,t,r){return e.fields.flatMap(n=>vse(n,t,r))}function Use(e,t){switch(e.value.kind){case Be.Kind.NULL:return{attribute:e.name.value,value:null};case Be.Kind.INT:return{attribute:e.name.value,value:lN(e.value)};case Be.Kind.FLOAT:return{attribute:e.name.value,value:mk(e.value)};case Be.Kind.BOOLEAN:case Be.Kind.STRING:return{attribute:e.name.value,value:e.value.value};case Be.Kind.VARIABLE:return hk(e.value,e.name.value,t);case Be.Kind.OBJECT:return _k(e.value,[e.name.value],t);case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Ur(`Argument type, ${e.value.kind}, is not supported.`)}}function xse(e,t){return e.flatMap(r=>Use(r,t))}function Dg(e,t){return e.selections.flatMap(r=>{switch(r.kind){case Be.Kind.FIELD:return r;case Be.Kind.FRAGMENT_SPREAD:{let n=r.name.value,s=t.get(n);if(s==null)throw new Ur(`Fragment \`${n}\` not found.`);return Dg(s.selectionSet,t)}case Be.Kind.INLINE_FRAGMENT:return Dg(r.selectionSet,t)}})}function gk(e,t){return Dg(e,t).map(r=>r.selectionSet?.selections.length>0?{name:r.name.value,select:gk(r.selectionSet,t)}:r.name.value)}async function Bse(e,t,r,n){let s=As.getMatch(e.name.value,"graphql");if(s===void 0)throw new Ur(`Resource \`${e.name.value}\` not found.`);let i=s.Resource,a={select:gk(e.selectionSet,r),conditions:xse(e.arguments,t)},c=[];n.authorize=!0;for await(let l of i.search(a,n))c.push(l);return[e.name.value,c]}function Sk(e){switch(e.kind){case Be.Kind.NULL:return null;case Be.Kind.INT:return lN(e);case Be.Kind.FLOAT:return parseFloat(e.value);case Be.Kind.STRING:case Be.Kind.BOOLEAN:return e.value;case Be.Kind.OBJECT:return e.fields.reduce((t,r)=>({[r.name.value]:Sk(r.value),...t}),{});case Be.Kind.LIST:case Be.Kind.ENUM:default:throw new Ur(`Value type, ${e.kind}, is not supported.`)}}function Fse(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=Sk(n.defaultValue)),n.type.kind===Be.Kind.NON_NULL_TYPE&&!(s in t)&&i===void 0)throw new Ur(`Variable $${s} is required, but not provided.`);r.set(n.variable.name.value,i??null)}return r}async function Hse(e,t,r,n){if(e.operation===Be.OperationTypeNode.SUBSCRIPTION)throw new Ur("Subscriptions are not supported.");if(e.operation===Be.OperationTypeNode.MUTATION)throw new Ur("Mutations are not supported yet.");let s=Fse(e.variableDefinitions,t),i=await Promise.all(Dg(e.selectionSet,r).map(c=>Bse(c,s,r,n))),a={data:{}};for(let[c,l]of i)a.data[c]=l;return a}async function fk({query:e,variables:t={},operationName:r},n){let s=Be.parse(e),i=new Map,a=new Map;for(let u of s.definitions)if(Mse(u),u.kind===Be.Kind.FRAGMENT_DEFINITION)a.set(u.name.value,u);else{if(u.name===void 0&&s.definitions.length>1)throw new Ur("Unnamed operations are only allowed when there is a single operation in the document.");let d=u.name?.value??"Unnamed Query";if(i.has(d))throw new Ur(`Duplicate operation definition: ${d}`);i.set(d,u)}let c;if(r==null)if(i.size===1)c=i.entries().next().value[1];else throw new Ur("Operation name is required when there are multiple operations in the document.");else if(c=i.get(r),c==null)throw new Ur(`Operation \`${r}\` not found.`);let l=await Hse(c,t,a,n);return{status:200,headers:{"Content-Type":"application/graphql-response+json; charset=utf-8"},body:JSON.stringify(l)}}async function kse(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 dk(r),fk(r,e)}case"POST":{let r=await ho(e.headers.get("content-type"),!0)(e._nodeRequest);return dk(r),fk(r,e)}default:throw new Gi("Method Not Allowed",405,{Allow:"GET, POST"})}}function Gse(e){e.server.http(async(t,r)=>{if(!t.url.startsWith("/graphql"))return r(t);try{return await kse(t)}catch(n){logger.error(n);let s=t.headers.get("accept")??"application/graphql-response+json";switch(s){case"application/json":{if(n instanceof Gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:200,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/json"}};if(n instanceof Ur)return{status:200,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/json"}};break}default:logger.info(`Unsupported accept header, ${s}, defaulting to application/graphql-response+json`);case"application/graphql-response+json":{if(n instanceof Gi)return{status:n.statusCode,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json",...n.headers}};if(n instanceof Be.GraphQLError)return{status:400,body:JSON.stringify({errors:[n]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Ur)return{status:400,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};if(n instanceof Error)return{status:500,body:JSON.stringify({errors:[{message:n.message}]}),headers:{"Content-Type":"application/graphql-response+json"}};break}}throw n}},{port:e.port,securePort:e.securePort})}var Be,Ur,Gi,Tk=fe(()=>{Be=w(require("graphql"));po();Pu();o(Mse,"assertExecutableDefinitionNode");o(dk,"assertRequestParams");o(lN,"processIntValueNode");o(mk,"processFloatValueNode");o(hk,"processVariableNode");o(pk,"isObject");o(Ek,"transformObjectIntoQueryCondition");o(vse,"processObjectFieldNode");o(_k,"processObjectValueNode");o(Use,"processArgumentNode");o(xse,"buildConditionsQuery");o(Dg,"fillInFragments");o(gk,"buildSelectQuery");o(Bse,"processFieldNode");o(Sk,"processConstValueNode");o(Fse,"resolveVariables");o(Hse,"executeOperation");o(fk,"resolver");Ur=class extends Error{static{o(this,"GraphQLQueryingError")}},Gi=class extends Error{static{o(this,"HTTPError")}statusCode;headers;constructor(t,r=400,n={}){super(t),this.statusCode=r,this.headers=n}};o(kse,"graphqlQueryingHandler");o(Gse,"start")});var Nk=M((NLe,Ik)=>{var ed=require("validate.js"),yk=at(),td=(k(),v(K)),{handleHDBError:qse,hdbErrors:$se}=Ee(),{HDB_ERROR_MSGS:Xt,HTTP_STATUS_CODES:Vse}=$se,dN=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Kse={STRUCTURE_USER:"structure_user"},Rk=Object.values(td.ROLE_TYPES_ENUM),Yse="attribute_permissions",Wse="attribute_name",{PERMS_CRUD_ENUM:rd}=td,zse=[Yse,...Object.values(rd)],Ak=[rd.READ,rd.INSERT,rd.UPDATE],jse=[Wse,...Ak];function Qse(e){let t=dN();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,bk(e,t)}o(Qse,"addRoleValidation");function Jse(e){let t=dN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,bk(e,t)}o(Jse,"alterRoleValidation");function Xse(e){let t=dN();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,yk.validateObject(e,t)}o(Xse,"dropRoleValidation");var Zse=["operation","role","id","permission","hdb_user","access"];function bk(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let a=0,c=n.length;a<c;a++)Zse.includes(n[a])||s.push(n[a]);s.length>0&&cr(Xt.INVALID_ROLE_JSON_KEYS(s),r);let i=yk.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{cr(a,r)}),e.permission){let a=eie(e);a&&cr(a,r),Rk.forEach(c=>{e.permission[c]&&!ed.isBoolean(e.permission[c])&&cr(Xt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(Rk.indexOf(a)<0){if(a===Kse.STRUCTURE_USER){let l=e.permission[a];if(typeof l=="boolean")continue;if(Array.isArray(l)){for(let u=0,d=l.length;u<d;u++){let f=l[u];global.hdb_schema[f]||cr(Xt.SCHEMA_NOT_FOUND(f),r)}continue}cr(Xt.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){cr(Xt.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let l in c.tables){let u=c.tables[l];if(!l||!global.hdb_schema[a][l]){cr(Xt.TABLE_NOT_FOUND(a,l),r);continue}if(Object.keys(u).forEach(d=>{zse.includes(d)||cr(Xt.INVALID_PERM_KEY(d),r,a,l)}),Object.values(rd).forEach(d=>{ed.isDefined(u[d])?ed.isBoolean(u[d])||cr(Xt.TABLE_PERM_NOT_BOOLEAN(d),r,a,l):cr(Xt.TABLE_PERM_MISSING(d),r,a,l)}),u.attribute_permissions===void 0){cr(Xt.ATTR_PERMS_ARRAY_MISSING,r,a,l);continue}else if(!(Array.isArray(u.attribute_permissions)||u.attribute_permissions===null)){cr(Xt.ATTR_PERMS_NOT_ARRAY,r,a,l);continue}if(u.attribute_permissions){let d=global.hdb_schema[a][l].attributes.map(({attribute:m})=>m),f={read:!1,insert:!1,update:!1};for(let m in u.attribute_permissions){let h=u.attribute_permissions[m];if(Object.keys(h).forEach(_=>{!jse.includes(_)&&_!==rd.DELETE&&cr(Xt.INVALID_ATTR_PERM_KEY(_),r,a,l)}),!ed.isDefined(h.attribute_name)){cr(Xt.ATTR_PERM_MISSING_NAME,r,a,l);continue}let p=h.attribute_name;if(!d.includes(p)){cr(Xt.INVALID_ATTRIBUTE_IN_PERMS(p),r,a,l);continue}Ak.forEach(_=>{ed.isDefined(h[_])?ed.isBoolean(h[_])||cr(Xt.ATTR_PERM_NOT_BOOLEAN(_,p),r,a,l):cr(Xt.ATTR_PERM_MISSING(_,p),r,a,l)}),!f.read&&h.read===!0&&(f.read=!0),!f.insert&&h.insert===!0&&(f.insert=!0),!f.update&&h.update===!0&&(f.update=!0)}if(u.read===!1&&f.read===!0||u.insert===!1&&f.insert===!0||u.update===!1&&f.update===!0){let m=`${a}.${l}`;cr(Xt.MISMATCHED_TABLE_ATTR_PERMS(m),r,a,l)}}}}return tie(r)}o(bk,"customValidate");Ik.exports={addRoleValidation:Qse,alterRoleValidation:Jse,dropRoleValidation:Xse};function eie(e){let{operation:t,permission:r}=e;if(t===td.OPERATIONS_ENUM.ADD_ROLE||t===td.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 Xt.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?td.ROLE_TYPES_ENUM.SUPER_USER:td.ROLE_TYPES_ENUM.CLUSTER_USER;return Xt.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(eie,"validateNoSUPerms");function tie(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:Xt.ROLE_PERMS_ERROR,...e};return qse(new Error,n,Vse.BAD_REQUEST)}else return null}o(tie,"generateRolePermResponse");function cr(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}o(cr,"addPermError")});var hh=M((CLe,Pk)=>{"use strict";var wk=Mn(),Ok=on(),rie=dl(),mN=Nk(),hN=bo(),OLe=require("uuid").v4,nie=require("util"),Mg=(k(),v(K)),sie=ie(),pN=Ok.searchByValue,iie=Ok.searchByHash,oie=nie.promisify(rie.delete),aie=ri(),cie=Bu(),{hdbErrors:lie,handleHDBError:Sl}=Ee(),{HDB_ERROR_MSGS:Ck,HTTP_STATUS_CODES:mh}=lie,{UserEventMsg:EN}=ti();Pk.exports={addRole:uie,alterRole:die,dropRole:fie,listRoles:mie};function fN(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}o(fN,"scrubRoleDetails");async function uie(e){let t=mN.addRoleValidation(e);if(t)throw t;e=fN(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},n;try{n=Array.from(await pN(r)||[])}catch(i){throw Sl(i)}if(n&&n.length>0)throw Sl(new Error,Ck.ROLE_ALREADY_EXISTS(e.role),mh.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 wk.insert(s),hN.signalUserChange(new EN(process.pid)),e=fN(e),e}o(uie,"addRole");async function die(e){let t=mN.alterRoleValidation(e);if(t)throw t;e=fN(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await wk.update(r)}catch(s){throw Sl(s)}if(n&&n?.message==="updated 0 of 1 records")throw Sl(new Error,"Invalid role id",mh.BAD_REQUEST,void 0,void 0,!0);return await hN.signalUserChange(new EN(process.pid)),e}o(die,"alterRole");async function fie(e){let t=mN.dropRoleValidation(e);if(t)throw Sl(new Error,t,mh.BAD_REQUEST,void 0,void 0,!0);let r=new cie(Mg.SYSTEM_SCHEMA_NAME,Mg.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await iie(r));if(n.length===0)throw Sl(new Error,Ck.ROLE_NOT_FOUND,mh.NOT_FOUND,void 0,void 0,!0);let s=new aie(Mg.SYSTEM_SCHEMA_NAME,Mg.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await pN(s)),a=!1;if(sie.isEmptyOrZeroLength(i)===!1){for(let l=0;l<i.length;l++)if(i[l].active===!0){a=!0;break}}if(a===!0)throw Sl(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,mh.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await oie(c),hN.signalUserChange(new EN(process.pid)),`${n[0].role} successfully deleted`}o(fie,"dropRole");async function mie(){return pN({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(mie,"listRoles")});var _N={};Ce(_N,{start:()=>Mk,startOnMainThread:()=>Eie});function Mk({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r){let n=(0,Lk.parseDocument)(r.toString(),{simpleKeys:!0}).toJSON();for(let s in n){let i=n[s];i.permission||(i={permission:i},i.permission.access&&(i.access=i.permission.access,delete i.permission.access));for(let a in i.permission){if(hie.includes(a))continue;let c=i.permission[a];c.tables||(i.permission[a]=c={tables:c});for(let l in c.tables){let u=c.tables[l];if(u.read=!!u.read,u.insert=!!u.insert,u.update=!!u.update,u.delete=!!u.delete,u.attributes){let d=[];for(let f in u.attributes){let m=u.attributes[f];m.attribute_name=f,d.push(m)}u.attribute_permissions=d,delete u.attributes}if(u.attribute_permissions){if(!Array.isArray(u.attribute_permissions))throw new Error("attribute_permissions must be an array if defined");for(let d of u.attribute_permissions)d.read=!!d.read,d.insert=!!d.insert,d.update=!!d.update}else u.attribute_permissions=null}}i.role=i.id=s,await pie(i)}}}async function pie(e){let t=it().system.hdb_role;for await(let r of t.search([{attribute:"role",value:e.role}])){let{__createdtime__:n,__updatedtime__:s,...i}=r;return(0,Dk.isEqual)(i,e)?void 0:(e.id=r.id,(0,vg.alterRole)(e))}return(0,vg.addRole)(e)}var vg,Lk,Dk,hie,Eie,vk=fe(()=>{Le();vg=w(hh()),Lk=require("yaml"),Dk=require("lodash"),hie=["super_user","cluster_user","structure_user"];o(Mk,"start");o(pie,"ensureRole");Eie=Mk});async function Ug(e){let t=(0,Bk.pathToFileURL)(e).toString();if(_ie)return ph||(ph=gie(Tie)),(await(await ph).import(t)).namespace;try{return await import(t)}catch(r){try{(await import("internal/util")).default.decorateErrorStack(r)}catch{}throw r}}async function gie(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ph=new Compartment({console,Math,Date,fetch:Sie,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,xk.extname)(r)||(r+=".js"),r)},importHook:o(async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){s.Resource=Dr,s.tables=cn,s.databases=Ge}};let n=await(0,Uk.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)},"importHook")}),ph}function Sie(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 Tie(){return{Resource:Dr,tables:cn}}var Uk,xk,Bk,_ie,ph,gN=fe(()=>{ba();Le();Uk=require("fs/promises"),xk=require("path"),Bk=require("url"),_ie=!1;o(Ug,"secureImport");o(gie,"getCompartment");o(Sie,"secureOnlyFetch");o(Tie,"getGlobalVars")});var SN={};Ce(SN,{handleApplication:()=>Rie,suppressHandleApplicationWarning:()=>yie});function Fk(e){return typeof e=="function"&&("get"in e||"put"in e||"post"in e||"delete"in e)}async function Rie(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}Ug(t.absolutePath).then(r=>{let n=(0,xg.dirname)(t.urlPath);Fk(r.default)&&(e.resources.set(n,r.default),e.logger.debug(`Registered root resource: ${n}`)),Hk(e,r,n)}).catch(r=>{e.logger.error(`Failed to load resource module ${t.absolutePath}: ${r}`),e.requestRestart()})})}function Hk(e,t,r){for(let n in t){let s=t[n],i=(0,xg.join)(r,n);Fk(s)?(e.resources.set(i,s),e.logger.debug(`Registered resource: ${i}`)):typeof s=="object"&&Hk(e,s,i)}}var xg,yie,kk=fe(()=>{gN();xg=require("path");o(Fk,"isResource");o(Rie,"handleApplication");o(Hk,"recurseForResources");yie=!0});var RN={};Ce(RN,{start:()=>Aie});function Aie({resources:e}){e.set("login",TN),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var TN,Gk=fe(()=>{ba();o(Aie,"start");TN=class extends Dr{static{o(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:a}=r;return{data:await n.login(s,i)}}}});function Yk(e){let t={openapi:bie,info:{title:"HarperDB HTTP REST interface",version:Kk.packageJson.version},paths:{},components:{schemas:{},securitySchemes:{basicAuth:{type:"http",scheme:"basic"},bearerAuth:{type:"http",scheme:"bearer",bearerFormat:"JWT"}}}},r=[{basicAuth:[],bearerAuth:[]}];for(let[,n]of e){if(!n.path||n.Resource.isError)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:a,primaryKey:c,prototype:l}=n.Resource;if(c=c??"id",!c)continue;let u={},d=[];if(a)for(let{type:R,name:I,elements:P,relationship:Y,definition:te}of a){if(Y)R==="array"?u[I]={type:"array",items:{$ref:xa+P.type}}:u[I]={$ref:xa+R};else{let x=te??P?.definition;if(x){if(!t.components.schemas[x.type]){let $={};x.properties.forEach(j=>{$[j.name]=new IN(yN[j.type],j.type)}),t.components.schemas[x.type]=new Vk($)}R==="array"?u[I]={type:"array",items:{$ref:xa+x.type}}:u[I]={$ref:xa+x.type}}else R==="array"?P.type==="Any"||P.type=="ID"?u[I]={type:"array",items:{format:P.type}}:u[I]={type:"array",items:new IN(yN[P.type],P.type)}:R==="Any"||R=="ID"?u[I]={format:R}:u[I]=new IN(yN[R],R)}d.push(new NN(I,"query",u[I]))}let f=Object.keys(u),m=new NN(c,"path",{format:"ID"});m.required=!0,m.description="primary key of record";let h=new NN("property","path",{enum:f});h.required=!0,t.components.schemas[i]=new Vk(u);let p=l.post!==Resource.prototype.post||l.update,_=typeof l.put=="function",g=typeof l.get=="function",y=typeof l.delete=="function",T="/"+s+"/";p&&(t.paths[T]={},t.paths[T].post=new Iie(i,r,"create a new record auto-assigning a primary key")),g&&(t.paths[T]||(t.paths[T]={}),t.paths[T].get=new AN(d,r,{200:new bN({$ref:xa+i})},"search for records by the specified property name and value pairs")),y&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new $k(d,r,"delete all the records that match the provided query",{204:new qk})),T="/"+s+"/{"+c+"}",g&&(t.paths[T]={},t.paths[T].get=new AN([m],r,{200:new bN({$ref:xa+i})},"retrieve a record by its primary key")),_&&(t.paths[T]||(t.paths[T]={}),t.paths[T].put=new Nie([m],r,i,"create or update the record with the URL path that maps to the record's primary key")),y&&(t.paths[T]||(t.paths[T]={}),t.paths[T].delete=new $k([m],r,"delete a record with the given primary key",{204:new qk})),g&&h.schema.enum.length>0&&(T="/"+s+"/{"+c+"}.{property}",t.paths[T]={},t.paths[T].get=new AN([m,h],r,{200:new bN({enum:f})},"used to retrieve the specified property of the specified record"))}return t}function Iie(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:xa+e}}}},this.security=t,this.responses={200:{description:wN,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function AN(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function bN(e){this.description=wN,this.content={"application/json":{schema:e}}}function qk(){this.description="successfully processed request, no content returned to client"}function Nie(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:xa+r}}}},this.responses={200:{description:wN}}}function $k(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function Vk(e){this.type="object",this.properties=e}function IN(e,t){this.type=e,this.format=t}function NN(e,t,r){this.name=e,this.in=t,this.schema=r}var Kk,bie,yN,xa,wN,Wk=fe(()=>{Kk=w(Rt()),bie="3.0.3",yN={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},xa="#/components/schemas/",wN="successful operation";o(Yk,"generateJsonApi");o(Iie,"Post");o(AN,"Get");o(bN,"Response200");o(qk,"Response204");o(Nie,"Put");o($k,"Delete");o(Vk,"ResourceSchema");o(IN,"Type");o(NN,"Parameter")});var jk={};Ce(jk,{Request:()=>Ba,createReuseportFd:()=>Bg});var zk,Ba,ON,CN,Bg,Eh=fe(()=>{zk=require("os"),Ba=class{static{o(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new CN(t.headers)}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this._nodeRequest.socket.encrypted?"https":"http"}get ip(){return this._nodeRequest.socket.remoteAddress}get authorized(){return this._nodeRequest.socket.authorized}get peerCertificate(){return this._nodeRequest.socket.getPeerCertificate()}get mtlsConfig(){return this._nodeRequest.socket.server.mtlsConfig}get body(){return this.#e||(this.#e=new ON(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get httpVersion(){return this._nodeRequest.httpVersion}get isAborted(){return!1}sendEarlyHints(t,r={}){r.link=t,this._nodeResponse.writeEarlyHints(r)}},ON=class{static{o(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},CN=class{constructor(t){this.asObject=t}static{o(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}delete(t){delete this.asObject[t.toLowerCase()]}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,zk.platform)()!="win32"&&(Bg=require("node-unix-socket").createReuseportFd)});var Hg={};Ce(Hg,{parseHeaderValue:()=>LN,start:()=>Cie});async function Oie(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream",s=n?"CONNECT":e.method;e.search&&T_(e);let i=new Ns;try{e.responseHeaders=i;let a=e.url.slice(1),c,l;if(a!==Qk){let g=Fg.getMatch(a,n?"sse":"rest");if(!g)return t(e);e.handlerPath=g.path,c=new Js(g.relativeURL),c.async=!0,l=g.Resource}if(l?.isCaching){let g=r["cache-control"];if(g){let y=LN(g);for(let T of y)switch(T.name){case"max-age":e.expiresAt=T.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=LN(u).map(y=>(y.next?.name==="confirm"&&y.next.value>=0&&(e.replicatedConfirmation=+y.next.value),y.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 vt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=ho(r["content-type"],!0)(e.body,e.headers)}catch(g){throw new nd.ClientError(g,400)}if(e.authorize=!0,a===Qk&&s==="GET"){if(e?.user?.role?.permission?.super_user)return Yk(Fg);throw new nd.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 nd.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new nd.ServerError(`Method ${s} is not recognized`,501)}}),m=200,h;if(f==null)m=s==="GET"||s==="HEAD"?404:204,PN.lastModified&&e.lastModified&&i.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f.status>0&&f.headers){let g=FH(f.headers,i);return f.headers!==g&&(f.headers=g),f.data!==void 0&&(f.body=rm(f.data,e,f)),f}else if(h=e.lastModified){wie[0]=h;let g=String.fromCharCode(34,(Yr[0]&63)+62,(Yr[0]>>6)+(Yr[1]<<2&63)+62,(Yr[1]>>4)+(Yr[2]<<4&63)+62,(Yr[2]>>2)+62,(Yr[3]&63)+62,(Yr[3]>>6)+(Yr[4]<<2&63)+62,(Yr[4]>>4)+(Yr[5]<<4&63)+62,(Yr[5]>>2)+62,(Yr[6]&63)+62,(Yr[6]>>6)+(Yr[7]<<2&63)+62,34),y=r["if-none-match"];y&&g==y?(f?.onDone&&f.onDone(),m=304,f=void 0):i.setIfNone("ETag",g),PN.lastModified&&i.setIfNone("Last-Modified",new Date(h).toUTCString())}e.createdResource&&(m=201),e.newLocation&&i.setIfNone("Location",e.newLocation);let p={status:m,headers:i,body:void 0},_=e.loadedFromSource??f?.wasLoadedFromSource?.();return _!==void 0&&(p.wasCacheMiss=_,!_&&h&&i.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||h))/1e3))),f!==void 0&&(p.body=rm(f,e,p),s==="HEAD"&&(p.body=void 0)),p}catch(a){a.statusCode?a.statusCode===500?ai.warn(a):ai.info(a):ai.error(a),a.statusCode===405&&(a.method&&(a.message+=` to handle HTTP method ${a.method.toUpperCase()||""}`),a.allow&&(a.allow.push("trace","head","options"),i.setIfNone("Allow",a.allow.map(l=>l.toUpperCase()).join(", "))));let c={status:a.statusCode||500,headers:i,body:void 0};return c.body=rm(a.contentType?a:Zk(a),e,c),c}}function Cie(e){PN=e,!Jk&&(Jk=!0,e.includeExpensiveRecordCountEstimates&&(Ba.prototype.includeExpensiveRecordCountEstimates=!0),Fg=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Oie(t,r)},e),e.webSocket!==!1&&e.server.ws(async(t,r,n)=>{_h++;let s=new $n;Xk||(Xk=!0,th(l=>{_h>0&&l.push({metric:"ws-connections",connections:_h,byThread:!0})}));let i;t.on("error",l=>{i=!0,ai.warn(l)});let a;t.on("message",o(function(u){a||(a=ho(r.requestedContentType??r.headers.asObject["content-type"],!1));let d=a(u);gt(u.length,"bytes-received",r.handlerPath,"message","ws"),s.push(d)},"message"));let c;t.on("close",()=>{_h--,Kr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let l=r.url.slice(1),u=Fg.getMatch(l,"ws");if(Kr(!!u,"connection","ws","connect"),u){r.handlerPath=u.path,gt(p=>({count:p.count,total:_h}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let d=new Js(u.relativeURL);d.checkPermission=r.user?.role?.permission??{};let f=u.Resource;c=(await vt(r,()=>f.connect(d,s,r)))[Symbol.asyncIterator]();let h;for(;!(h=await c.next()).done;){let p=await ga(h.value,r);t.send(p),gt(p.length,"bytes-sent",r.handlerPath,"message","ws"),t._socket.writableNeedDrain&&await new Promise(_=>t._socket.once("drain",_))}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(l){l.statusCode?l.statusCode===500?ai.warn(l):ai.info(l):ai.error(l),t.close(Pie[l.statusCode]||1011,Zk(l))}t.close()},e))}function LN(e){return e.trim().split(",").map(t=>{let r,n=t.trim().split(";"),s;for(;s=n.pop();)if(s.includes("=")){let[i,a]=s.trim().split("=");i=i.trim(),a&&(a=a.trim()),r={name:i.toLowerCase(),value:a,next:r}}else r={name:s.toLowerCase(),next:r};return r})}var ai,nd,Zk,Yr,wie,PN,Qk,Jk,Fg,Xk,_h,Pie,eG=fe(()=>{po();Hi();ai=w(z()),nd=w(Ee());R_();pu();Uc();nh();Wk();Eh();y_();({errorToString:Zk}=ai),Yr=new Uint8Array(8),wie=new Float64Array(Yr.buffer,0,1),PN={},Qk="openapi";o(Oie,"http");_h=0;o(Cie,"start");Pie={401:3e3,403:3003};o(LN,"parseHeaderValue")});var DN=M((tDe,rG)=>{var{recordAction:kg,recordActionBinary:tG}=(Hi(),v(gg)),Lie=require("fastify-plugin"),Die=200;rG.exports=Lie(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let a=s.elapsedTime,c=performance.now(),l=s.request.routeOptions,u,d,f;l.config?.isOperation?(u=n.body?.operation,d="operation"):(u=l.url,d="fastify-route",f=l.method),kg(a,"duration",u,f,d),tG(s.raw.statusCode<400,"success",u,f,d),tG(1,"response_"+s.raw.statusCode,u,f,d);let m=Die;i?.pipe?(i.on("data",g=>{m+=g.length}),i.on("end",()=>{kg(performance.now()-c,"transfer",u,f,d),kg(m,"bytes-sent",u,f,d)})):(m+=i?.length||0,kg(m,"bytes-sent",u,f,d));let h=a.toFixed(3),p=s.getHeader("Server-Timing"),_=`db;dur=${h}`;s.header("Server-Timing",p?`${p}, ${_}`:_)}),r()},{name:"hdb-request-time"})});var sG=M((rDe,nG)=>{var Mie=at(),vie={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};nG.exports=function(e){return Mie.validateObject(e,vie)}});var Gg=M((nDe,iG)=>{"use strict";var Uie=(k(),v(K)).OPERATIONS_ENUM,MN=class{static{o(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=Uie.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iG.exports=MN});var Th={};Ce(Th,{createTokens:()=>xN,getJWTRSAKeys:()=>Yg,refreshOperationToken:()=>BN,validateOperationToken:()=>FN,validateRefreshToken:()=>Wg});async function Yg(){if(qg)return qg;try{let e=gh.default.join(Sh.default.getHdbBasePath(),Ly),t=await $g.default.readFile(gh.default.join(e,Uf.JWT_PASSPHRASE_NAME),"utf8"),r=await $g.default.readFile(gh.default.join(e,Uf.JWT_PRIVATE_KEY_NAME),"utf8");return qg={publicKey:await $g.default.readFile(gh.default.join(e,Uf.JWT_PUBLIC_KEY_NAME),"utf8"),privateKey:r,passphrase:t},qg}catch(e){throw Kg.default.error(e),new ci.ClientError(id.NO_ENCRYPTION_KEYS,sd.INTERNAL_SERVER_ERROR)}}async function xN(e){let t=(0,vN.validateBySchema)(e,qi.default.object({username:qi.default.string().optional(),password:qi.default.string().optional(),role:qi.default.string().optional(),expires_in:qi.default.alternatives(qi.default.string(),qi.default.number()).optional()}));if(t)throw new ci.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,UN.findAndValidateUser)(e.username,e.password,f)}catch(f){throw Kg.default.error(f),new ci.ClientError(id.INVALID_CREDENTIALS,sd.UNAUTHORIZED)}if(!r)throw new ci.ClientError(id.INVALID_CREDENTIALS,sd.UNAUTHORIZED);let n=!1,s=!1;r.role?.permission&&(n=r.role.permission.super_user===!0,s=r.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s};e.role&&(i.role=e.role);let a=await Yg(),c=await od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:e.expires_in??uG,algorithm:Vg,subject:ad.OPERATION}),l=await od.default.sign(i,{key:a.privateKey,passphrase:a.passphrase},{expiresIn:xie,algorithm:Vg,subject:ad.REFRESH}),u=PI(l,Mr.SHA256);if((await(0,oG.update)(new aG.default(vf,uu.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]))).skipped_hashes.length>0)throw new ci.ClientError(id.REFRESH_TOKEN_SAVE_FAILED,sd.INTERNAL_SERVER_ERROR);return cG.default.signalUserChange(new lG.UserEventMsg(process.pid)),{operation_token:c,refresh_token:l}}async function BN(e){let t=(0,vN.validateBySchema)(e,qi.default.object({refresh_token:qi.default.string().required()}).required());if(t)throw new ci.ClientError(t.message);let{refresh_token:r}=e;await Wg(r);let n=await Yg(),s=await od.default.decode(r);return{operation_token:await od.default.sign({username:s.username,super_user:s.super_user,cluster_user:s.cluster_user},{key:n.privateKey,passphrase:n.passphrase},{expiresIn:uG,algorithm:Vg,subject:ad.OPERATION})}}async function FN(e){return dG(e,ad.OPERATION)}async function Wg(e){return dG(e,ad.REFRESH)}async function dG(e,t){try{let r=await Yg(),n=await od.default.verify(e,r.publicKey,{algorithms:Vg,subject:t});if(n.role)throw new Error("Invalid token");let s=await(0,UN.findAndValidateUser)(n.username,void 0,!1);if(t===ad.REFRESH&&!LI(s.refresh_token,e))throw new Error("Invalid token");return s}catch(r){throw Kg.default.warn(r),r?.name==="TokenExpiredError"?new ci.ClientError(id.TOKEN_EXPIRED,sd.FORBIDDEN):new ci.ClientError(id.INVALID_TOKEN,sd.UNAUTHORIZED)}}var od,$g,gh,qi,vN,ci,Kg,UN,oG,aG,cG,lG,Sh,sd,id,uG,xie,Vg,ad,qg,cd=fe(()=>{od=w(require("jsonwebtoken")),$g=w(require("fs-extra")),gh=w(require("node:path")),qi=w(require("joi")),vN=w(at());k();ci=w(Ee()),Kg=w(z());cg();UN=w(Jn()),oG=w(Mn()),aG=w(Gg()),cG=w(bo()),lG=w(ti()),Sh=w(ce()),{HTTP_STATUS_CODES:sd,AUTHENTICATION_ERROR_MSGS:id}=ci.hdbErrors;Sh.default.initSync();uG=Sh.default.get(U.AUTHENTICATION_OPERATIONTOKENTIMEOUT)||"1d",xie=Sh.default.get(U.AUTHENTICATION_REFRESHTOKENTIMEOUT)||"30d",Vg="RS256",ad={OPERATION:"operation",REFRESH:"refresh"};o(Yg,"getJWTRSAKeys");o(xN,"createTokens");o(BN,"refreshOperationToken");o(FN,"validateOperationToken");o(Wg,"validateRefreshToken");o(dG,"validateToken")});var HN=M((cDe,hG)=>{"use strict";var Bie=sG(),ld=require("passport"),Fie=require("passport-local").Strategy,Hie=require("passport-http").BasicStrategy,kie=require("util"),Gie=Jn(),mG=kie.callbackify(Gie.findAndValidateUser),aDe=tn(),qie=(k(),v(K)),fG=(cd(),v(Th));ld.use(new Fie(function(e,t,r){mG(e,t,r)}));ld.use(new Hie(function(e,t,r){mG(e,t,r)}));ld.serializeUser(function(e,t){t(null,e)});ld.deserializeUser(function(e,t){t(null,e)});function $ie(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");n=a[0],s=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),n){case"Basic":ld.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===qie.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?fG.validateRefreshToken(s).then(a=>{e.body.refresh_token=s,r(null,a)}).catch(a=>{r(a)}):fG.validateOperationToken(s).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:ld.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o($ie,"authorize");function Vie(e,t){let r=Bie(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,n)}o(Vie,"checkPermissions");hG.exports={authorize:$ie,checkPermissions:Vie}});var zg=M((uDe,pG)=>{"use strict";var Kie=jn();pG.exports={writeTransaction:Yie};function Yie(e,t,r){return Kie.writeTransaction(e,t,r)}o(Yie,"writeTransaction")});var SG=M((mDe,gG)=>{"use strict";var Wie=on(),zie=ei(),EG=z(),jie=Mn(),fDe=zg(),Qie=require("clone"),GN=require("alasql"),Jie=J_(),_G=require("util"),Xie=_G.promisify(zie.getTableSchema),Zie=_G.promisify(Wie.search),eoe=(k(),v(K)),kN=ie();Jie(GN);gG.exports={update:roe};var toe="There was a problem performing this update. Please check the logs and try again.";async function roe({statement:e,hdb_user:t}){let r=await Xie(e.table.databaseid,e.table.tableid),n=noe(e.columns);kN.backtickASTSchemaItems(e);let{table:s,where:i}=e,a=Qie(s),c=kN.isEmpty(i)?"":` WHERE ${i.toString()}`,l=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,u=GN.parse(l).statements[0],d=await Zie(u),f=soe(n,d);return ioe(a,f,t)}o(roe,"update");function noe(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=GN.compile(`SELECT ${r.expression.toString()} AS [${eoe.FUNC_VAL}] FROM ?`)}),t}catch(t){throw EG.error(t),new Error(toe)}}o(noe,"createUpdateRecord");function soe(e,t){return kN.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(soe,"buildUpdateRecords");async function ioe(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await jie.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){EG.error(`Error delete new_attributes from update response: ${i}`)}return s}o(ioe,"updateRecords")});var RG=M((_De,TG)=>{var ooe=require("alasql"),aoe=on(),coe=z(),loe=jn(),$N=require("util"),qN=ie(),uoe=(k(),v(K)),doe=ei(),pDe=zg(),EDe=Mn(),foe="record",moe="successfully deleted",hoe=$N.callbackify(goe),poe=$N.promisify(aoe.search),Eoe=$N.promisify(doe.getTableSchema);TG.exports={convertDelete:hoe};function _oe(e){return`${e.deleted_hashes.length} ${foe}${e.deleted_hashes.length===1?"":"s"} ${moe}`}o(_oe,"generateReturnMessage");async function goe({statement:e,hdb_user:t}){let r=await Eoe(e.table.databaseid,e.table.tableid);qN.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=qN.isEmpty(s)?"":` WHERE ${s.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=ooe.parse(a).statements[0],l={operation:uoe.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{l.records=await poe(c);let u=await loe.deleteRecords(l);return qN.isEmptyOrZeroLength(u.message)&&(u.message=_oe(u)),delete u.txn_time,u}catch(u){throw coe.error(u),u.hdb_code?u.message:u}}o(goe,"convertDelete")});var NG=M((SDe,IG)=>{"use strict";var Soe=Pa(),{hdbErrors:yG}=Ee(),{getDatabases:AG}=(Le(),v(ft));IG.exports={checkSchemaExists:bG,checkSchemaTableExists:Toe,schemaDescribe:Soe};async function bG(e){if(!AG()[e])return yG.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(bG,"checkSchemaExists");async function Toe(e,t){let r=await bG(e);if(r)return r;if(!AG()[e][t])return yG.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(Toe,"checkSchemaTableExists")});var zN=M((bDe,FG)=>{"use strict";var{decode:Roe}=require("msgpackr"),{isMainThread:RDe,parentPort:yDe,threadId:ADe}=require("worker_threads"),Jg=lr(),ud=It(),YN=(k(),v(K)),ln=z(),KN=ce(),yoe=(k(),v(K)),{onMessageByType:Aoe}=st(),PG=xi(),{recordAction:wG,recordActionBinary:boe}=(Hi(),v(gg)),{publishToStream:Ioe}=Jg,{ConsumerEvents:OG}=require("nats"),Noe=on(),{promisify:woe}=require("util"),{decodeBlobsWithWrites:Ooe}=(Ts(),v(gA)),LG=woe(setTimeout),Xg=1e4,Zg,Qg,Coe,Poe,DG,Rh=new Map,dd=new Map;FG.exports={initialize:MG,ingestConsumer:WN,setSubscription:Loe,setIgnoreOrigin:voe,getDatabaseSubscriptions:Moe,updateConsumer:vG};async function MG(){Aoe(YN.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await vG(n)}),DG=!0,ln.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Jg.getNATSReferences();Zg=e,Qg=e.info.server_name,Coe=t,Poe=r}o(MG,"initialize");async function vG(e){if(e.status==="start"){let{js:t,jsm:r}=await UG(e.node_domain_name);WN(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Rh.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?.(),Rh.set(e.stream_name+e.node_domain_name,"close")),dd.get(e.node_domain_name)==="failed"&&dd.set(e.node_domain_name,"close")}}o(vG,"updateConsumer");var eS=new Map;function Loe(e,t,r){let n=eS.get(e);n||eS.set(e,n=new Map),n.set(t,r),DG||MG().then(Doe)}o(Loe,"setSubscription");async function Doe(){let e=await Noe.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+ud.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions||[])if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await UG(r),!n))break;let{schema:a,table:c}=i,l=PG.createNatsTableStreamName(a,c);WN(l,n,s,r)}}}o(Doe,"accessConsumers");async function UG(e){let t,r,n=1;for(;!r;)try{t=await Zg.jetstream({domain:e}),r=await Zg.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(dd.get(e)==="close")break;dd.set(e,"failed"),n%10===1&&ln.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Xg?n++*100:Xg;await LG(i)}return{js:t,jsm:r}}o(UG,"connectToRemoteJS");function Moe(){return eS}o(Moe,"getDatabaseSubscriptions");var xG;function voe(e){xG=e}o(voe,"setIgnoreOrigin");var BG=100,CG=new Array(BG),jg=0;async function WN(e,t,r,n){let{connection:s}=await Jg.getNATSReferences();Zg=s,Qg=s.info.server_name;let i,a=1;for(;!i;)try{i=await t.consumers.get(e,Qg),ln.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(u){if(dd.get(n)==="close")break;a%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 Jg.createConsumer(r,e,Qg,new Date(Date.now()).toISOString()));let d=a++*100<Xg?a++*100:Xg;await LG(d)}let c=!1,l;for(;!c;){if(Rh.get(e+n)==="close"||dd.get(n)==="close"){Rh.delete(e+n),c=!0;continue}l=await i.consume({max_messages:KN.get(YN.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Rh.set(e+n,l);let u=!1;(async()=>{for await(let d of await l.status())if(d.type===OG.ConsumerDeleted&&(await l.close(),c=!0),d.type===OG.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 CG[jg],CG[jg]=Uoe(d).catch(f=>{ln.error(f)}),++jg>=BG&&(jg=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)}}}o(WN,"ingestConsumer");async function Uoe(e){let t;await Ooe(()=>{t=Roe(e.data)}),wG(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=KN.get(YN.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(ud.MSG_HEADERS.TRANSACTED_NODES)&&r.values(ud.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(ud.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!xG),boe(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(ud.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:a,schema:c,next:l,table:u,records:d,hash_values:f,__origin:m,expiresAt:h}=t;ln.trace("processing message:",a,c,u,(d?"records: "+d.map(P=>P?.id):"")+(f?"ids: "+f:""),"with sequence:",e.seq),ln.trace(`messageProcessor nats msg id: ${e.headers.get(ud.MSG_HEADERS.NATS_MSG_ID)}`);let p;d||(d=f);let _=new Promise(P=>p=P),{timestamp:g,user:y,node_name:T}=m||{},R=eS.get(c)?.get(u);if(!R)throw new Error(`Missing table for replication message: ${u}`);if(a==="define_schema")t.type=a,t.onCommit=p,R.send(t);else if(d.length===1&&!l)R.send({type:VN(a),value:d[0],id:f?.[0],expiresAt:h,timestamp:g,table:u,onCommit:p,user:y,nodeName:T});else{let P=d.map((Y,te)=>({type:VN(a),value:Y,expiresAt:h,id:f?.[te],table:u}));for(;l;)P.push({type:VN(l.operation),value:l.record,expiresAt:l.expiresAt,id:l.id,table:l.table}),l=l.next;R.send({type:"transaction",writes:P,table:u,timestamp:g,onCommit:p,user:y,nodeName:T})}KN.get(yoe.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Ioe(e.subject.split(".").slice(0,-1).join("."),PG.createNatsTableStreamName(c,u),e.headers,e.data),await _;let I=Date.now()-g;g&&wG(I,"replication-latency",e.subject,a,"ingest")}catch(a){ln.error(a)}e.ack()}o(Uoe,"messageProcessor");function VN(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(VN,"convertOperation")});var lr=M((LDe,tq)=>{"use strict";var xr=ce();xr.initSync();var xoe=require("fs-extra"),Boe=require("semver"),bh=require("path"),{monotonicFactory:Foe}=require("ulidx"),kG=Foe(),Hoe=require("util"),GG=require("child_process"),koe=Hoe.promisify(GG.exec),Goe=GG.spawn,Wr=It(),Qe=(k(),v(K)),{packageJson:qoe,PACKAGE_ROOT:$oe}=Rt(),tS=ie(),li=z(),rS=xi(),Voe=zg(),yh=yt(),{broadcast:Koe,onMessageByType:Yoe,getWorkerIndex:Woe}=st(),{isMainThread:qG}=require("worker_threads"),{Encoder:zoe,decode:XN}=require("msgpackr"),$G=new zoe,{isEmpty:Al}=tS,VG=Jn(),NDe=48*36e11;qG&&Yoe(Qe.ITC_EVENT_TYPES.RESTART,()=>{un=void 0,yl=void 0});var{connect:joe,StorageType:Qoe,RetentionPolicy:Joe,AckPolicy:ZN,DeliverPolicy:ew,DiscardPolicy:Xoe,NatsConnection:wDe,JetStreamManager:ODe,JetStreamClient:CDe,StringCodec:PDe,JSONCodec:Zoe,createInbox:tw,headers:eae,ErrorCode:HG}=require("nats"),{recordAction:tae}=(Hi(),v(gg)),{encodeBlobsAsBuffers:rae}=(Ts(),v(gA)),KG=Zoe(),nae="clustering",sae=qoe.engines[Wr.NATS_SERVER_NAME],iae=bh.join($oe,"dependencies"),JN=bh.join(iae,`${process.platform}-${process.arch}`,Wr.NATS_BINARY_NAME),jN,QN,Ah,Tl,Rl;tq.exports={runCommand:YG,checkNATSServerInstalled:oae,createConnection:rw,getConnection:Ih,getJetStreamManager:Nh,getJetStream:zG,getNATSReferences:$i,getServerList:cae,createLocalStream:nw,listStreams:jG,deleteLocalStream:lae,getServerConfig:fd,listRemoteStreams:uae,viewStream:dae,viewStreamIterator:fae,publishToStream:mae,request:Eae,reloadNATS:sw,reloadNATSHub:_ae,reloadNATSLeaf:gae,extractServerName:pae,requestErrorHandler:Sae,createLocalTableStream:ZG,createTableStreams:yae,purgeTableStream:eq,purgeSchemaTableStreams:Aae,getStreamInfo:bae,updateLocalStreams:Nae,closeConnection:aae,getJsmServerName:nS,addNatsMsgHeader:QG,clearClientCache:WG,updateRemoteConsumer:Tae,createConsumer:JG,updateConsumerIterator:Rae};async function YG(e,t=void 0){let{stdout:r,stderr:n}=await koe(e,{cwd:t});if(n)throw new Error(n.replace(`
15
15
  `,""));return r.replace(`
16
- `,"")}o(qG,"runCommand");async function tae(){try{await Loe.access(QN)}catch{return!1}let e=await qG(`${QN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Doe.eq(t,Zoe)}o(tae,"checkNATSServerInstalled");async function tw(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await kG.getClusterUser();if(yl(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}li.trace("create nats connection called");let i=await Voe({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),li.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&li.error("Error with Nats client connection, connection closed",a),i===un&&$G()}),i}o(tw,"createConnection");function $G(){un=void 0,Sl=void 0,Tl=void 0,Rl=void 0}o($G,"clearClientCache");async function rae(){un&&(await un.drain(),un=void 0,Sl=void 0,Tl=void 0,Rl=void 0)}o(rae,"closeConnection");var un,Rl;async function Ih(){return Rl||(Rl=tw(xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),un=await Rl),un||Rl}o(Ih,"getConnection");async function Nh(){if(Sl)return Sl;yl(un)&&await Ih();let{domain:e}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(yl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Sl=await un.jetstreamManager({domain:e,timeout:6e4}),Sl}o(Nh,"getJetStreamManager");async function VG(){if(Tl)return Tl;yl(un)&&await Ih();let{domain:e}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(yl(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Tl=un.jetstream({domain:e,timeout:6e4}),Tl}o(VG,"getJetStream");async function $i(){let e=un||await Ih(),t=Sl||await Nh(),r=Tl||await VG();return{connection:e,jsm:t,js:r}}o($i,"getNATSReferences");async function nae(e){let t=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await kG.getClusterUser(),s=await tw(t,r,n),i=ew(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=GG.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 eS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(nae,"getServerList");async function rw(e,t){let{jsm:r}=await $i(),n=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Koe.File,retention:Yoe.Limits,subjects:t,discard:Woe.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(rw,"createLocalStream");async function KG(){let{jsm:e}=await $i(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(KG,"listStreams");async function sae(e){let{jsm:t}=await $i();await t.streams.delete(e)}o(sae,"deleteLocalStream");async function iae(e){let{connection:t}=await $i(),r=[],n=ew(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(GG.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(iae,"listRemoteStreams");async function oae(e,t=void 0,r=void 0){let{jsm:n,js:s}=await $i(),i=xG(),a={durable_name:i,ack_policy:XN.Explicit};t&&(a.deliver_policy=ZN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=JN(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Wr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(oae,"viewStream");async function*aae(e,t=void 0,r=void 0){let{jsm:n,js:s}=await $i(),i=xG(),a={durable_name:i,ack_policy:XN.Explicit};t&&(a.deliver_policy=ZN.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=JN(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(Wr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(aae,"viewStreamIterator");async function cae(e,t,r,n){li.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=YG(n,r);let{js:s}=await $i(),i=await rS(),a=`${e}.${i}`,c=await Joe(()=>n instanceof Uint8Array?n:HG.encode(n));try{li.trace(`publishToStream publishing to subject: ${a}`),Qoe(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return zG(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){li.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await rw(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(cae,"publishToStream");function YG(e,t){t===void 0&&(t=joe());let r=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Wr.MSG_HEADERS.ORIGIN)&&r&&t.append(Wr.MSG_HEADERS.ORIGIN,r),t}o(YG,"addNatsMsgHeader");function fd(e){e=e.toLowerCase();let t=bh.join(xr.get(Qe.CONFIG_PARAMS.ROOTPATH),Xoe);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return yl(jN)&&(jN={port:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wr.SERVER_SUFFIX.HUB,config_file:Wr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:bh.join(t,Wr.PID_FILES.HUB),hdbNatsPath:t}),jN;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return yl(zN)&&(zN={port:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wr.SERVER_SUFFIX.LEAF,config_file:Wr.NATS_CONFIG_FILES.LEAF_SERVER,domain:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wr.SERVER_SUFFIX.LEAF,pid_file_path:bh.join(t,Wr.PID_FILES.LEAF),hdbNatsPath:t}),zN;li.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(fd,"getServerConfig");async function WG(e,t,r,n){try{await e.consumers.add(t,{ack_policy:XN.Explicit,durable_name:r,deliver_policy:ZN.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(WG,"createConsumer");async function lae(e,t,r){await e.consumers.delete(t,r)}o(lae,"removeConsumer");function uae(e){return e.split(".")[1]}o(uae,"extractServerName");async function dae(e,t,r=6e4,n=ew()){if(!eS.isObject(t))throw new Error("data param must be an object");let s=HG.encode(t),{connection:i}=await $i(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return JN(c.data)}o(dae,"request");function nw(e){return new Promise(async(t,r)=>{let n=xoe(QN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(nw,"reloadNATS");async function fae(){let{pid_file_path:e}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await nw(e)}o(fae,"reloadNATSHub");async function mae(){let{pid_file_path:e}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await nw(e)}o(mae,"reloadNATSLeaf");function hae(e,t,r){let n;switch(e.code){case UG.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case UG.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(hae,"requestErrorHandler");async function pae(e,t){let r=t+Wr.SERVER_SUFFIX.LEAF,{connection:n}=await $i(),{jsm:s}=await Aae(r),{schema:i,table:a}=e,c=tS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await zG(async()=>{if(e.subscribe===!0)await WG(s,c,n.info.server_name,l);else try{await lae(s,c,n.info.server_name)}catch(u){li.trace(u)}})}o(pae,"updateRemoteConsumer");async function Eae(e,t,r,n){let s=tS.createNatsTableStreamName(e,t),i=r+Wr.SERVER_SUFFIX.LEAF,a={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!FG&&qoe()<xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=WN();await c(a)}await koe(a),n==="stop"&&await eS.asyncSetTimeout(1e3)}o(Eae,"updateConsumerIterator");function zG(e){return Hoe.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(zG,"exclusiveLock");async function jG(e,t){let r=tS.createNatsTableStreamName(e,t),n=await rS(),s=Tae(e,t,n);await rw(r,[s])}o(jG,"createLocalTableStream");async function _ae(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await jG(n,s)}}o(_ae,"createTableStreams");async function QG(e,t,r=void 0){if(xr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=tS.createNatsTableStreamName(e,t),{domain:s}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Ih()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")li.warn(n);else throw n}}o(QG,"purgeTableStream");async function gae(e,t){if(xr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await QG(e,t[r])}o(gae,"purgeSchemaTableStreams");async function Sae(e){return(await Nh()).streams.info(e)}o(Sae,"getStreamInfo");function Tae(e,t,r){return`${Wr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Tae,"createSubjectName");async function rS(){if(Ah)return Ah;if(Ah=(await Nh())?.nc?.info?.server_name,Ah===void 0)throw new Error("Unable to get jetstream manager server name");return Ah}o(rS,"getJsmServerName");async function Rae(){let e=await Nh(),t=await rS(),r=await KG();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=yae(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");li.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Rae,"updateLocalStreams");function yae(e){let{config:t}=e,r=!1,n=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(yae,"updateStreamLimits");async function Aae(e){let t,r;try{t=await un.jetstream({domain:e}),r=await un.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw li.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(Aae,"connectToRemoteJS")});function sw(e){let t=e.get(nS),r=t?(0,md.unpack)(t):null;r||(r={remoteNameToId:{}});let n=rt(),s=!1;r.nodeName=rt();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Oh(e)??1,nodes:[]})})}i[n]=0,e.putSync(nS,(0,md.pack)(r))}return r}function wh(e){return sw(e).remoteNameToId}function ZG(e,t){let r=sw(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(nS,(0,md.pack)(r)),s}function sS(e,t){let r=sw(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(nS,(0,md.pack)(r))}return XG.trace?.("The remote node name map",e,n,s),s}var XG,md,nS,iw=fe(()=>{XG=w(Ni());es();md=require("msgpackr"),nS=Symbol.for("remote-ids");o(sw,"getIdMappingRecord");o(wh,"exportIdMapping");o(ZG,"remoteToLocalNodeId");o(sS,"getIdOfRemoteNode")});var ow={};Ce(ow,{commitsAwaitingReplication:()=>pd,getHDBNodeTable:()=>$t,getReplicationSharedStatus:()=>Ed,iterateRoutes:()=>Ph,shouldReplicateToNode:()=>Ch,subscribeToNodeUpdates:()=>_d});function $t(){return eq||(eq=et({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Ed(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function _d(e){$t().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;sq.debug?.("adding node",n,"on node",rt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==rt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of $t().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Ch(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&$t().primaryStore.get(rt())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function bae(){_d(e=>{Ba({},(t,r)=>{let n=e.name,s=tq.get(n);if(s||tq.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Ed(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of pd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Ph(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=hd.default.get(U.REPLICATION_SECUREPORT)??(!hd.default.get(U.REPLICATION_PORT)&&hd.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||hd.default.get(U.REPLICATION_PORT)||hd.default.get(U.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){rq.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,shard:t.shard}}}var rq,nq,hd,sq,eq,tq,pd,Al=fe(()=>{Le();es();Qf();rq=require("worker_threads"),nq=w(Ee()),hd=w(ce());k();sq=w(Ni());server.nodes=[];o($t,"getHDBNodeTable");o(Ed,"getReplicationSharedStatus");o(_d,"subscribeToNodeUpdates");o(Ch,"shouldReplicateToNode");tq=new Map;sv((e,t,r)=>{if(r>server.nodes.length)throw new nq.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);pd||(pd=new Map,bae());let n=pd.get(e);return n||(n=[],pd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(bae,"startSubscriptionToReplications");o(Ph,"iterateRoutes")});var cq={};Ce(cq,{connectedToNode:()=>bl,disconnectedFromNode:()=>Td,ensureNode:()=>Do,requestClusterStatus:()=>aq,startOnMainThread:()=>cw});async function cw(e){let t=0,r=it();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){iS.set(i,Oh(l.auditStore));break}}}Vi.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=rt();function c(){let l=$t().primaryStore.get(a);if(l!==null){let u=e.url??Fa();if(l===void 0||l.url!==u||l.shard!==e.shard)return Do(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),$t().primaryStore.get(a)&&c();for(let l of Ph(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}_d(s)});let n;function s(i,a=i?.name){let c=rt()&&a===rt()||Fa()&&i?.url===Fa();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of $t().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of Lo){let h;for(let[p,{worker:_,nodes:g}]of m){let y=g[0];if(y&&y.name==a){h=!0;for(let[T,{worker:R}]of m)m.delete(T),ut.warn("Node was deleted, unsubscribing from node",a,T,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:T,url:f});break}}if(h){Lo.get(f).iterator.remove(),Lo.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=Lo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${rt()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of gd)if(i.url===m.url){gd.delete(f);break}gd.set(i.name,i)}let u=it();if(l||(l=new Map,Lo.set(i.url,l)),l.iterator=Ba(e,(f,m,h)=>{h?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let h=l.get(f),p,_=[{replicateByDefault:m,...i}];iS.has(f)&&(_.push({replicateByDefault:m,name:rt(),startTime:iS.get(f),endTime:Date.now(),replicates:!0}),iS.delete(f));let g=Ch(i,f),y=Vi.workers.filter(T=>T.name==="http");if(h?(p=h.worker,h.nodes=_):g&&(t=t%y.length,p=y[t++],l.set(f,{worker:p,nodes:_,url:i.url}),p?.on("exit",()=>{l.get(f)?.worker===p&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let T={type:"subscribe-to-node",database:f,nodes:_};p?p.postMessage(T):Sd(T)},Iae);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:$t().primaryStore.get(rt())?.replicates}),$t().primaryStore.get(rt())?.replicates||(n=!1,ut.info("Disabling replication, this node name",rt(),$t().primaryStore.get(rt()),f));let T={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};p?p.postMessage(T):aS(T)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Td=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(gd.keys()),c=a.sort(),l=c.indexOf(i.name||ui(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=Lo.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=(l+1)%c.length;for(;l!==m;){let h=c[m],p=gd.get(h);u=Lo.get(p.url);let _=u?.get(i.database);if(!_){m=(m+1)%c.length;continue}let{worker:g,nodes:y}=_,T=!1;for(let R of d.nodes){if(y.some(I=>I.name===R.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}y.push(R),T=!0}if(!T){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}d.redirectingTo=_,ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:y}):Sd({database:i.database,nodes:y});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),bl=o(function(i){let a=Lo.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(f=>f.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):Sd({database:i.database,nodes:u}))}},"connectedToNode"),(0,Vi.onMessageByType)("disconnected-from-node",Td),(0,Vi.onMessageByType)("connected-to-node",bl),(0,Vi.onMessageByType)("request-cluster-status",aq)}function aq(e,t){let r=[];for(let[n,s]of gd)try{let i=Lo.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.map(h=>h.name)});let c=(0,aw.cloneDeep)(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Do(e,t){let r=$t();e=e??ui(t.url),t.name=e;try{if(t.ca){let s=new oq.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.put(t);else{t.replicates&&!iq.default.get(U.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=(0,aw.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Vi,oS,ut,aw,iq,oq,Iae,Lo,Td,bl,gd,iS,Lh=fe(()=>{Le();Vi=w(st());es();oS=require("worker_threads");Al();ut=w(z()),aw=require("lodash"),iq=w(ce());k();oq=require("crypto"),Iae=200,Lo=new Map,gd=new Map,iS=new Map;o(cw,"startOnMainThread");o(aq,"requestClusterStatus");oS.parentPort&&(Td=o(e=>{oS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),bl=o(e=>{oS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Vi.onMessageByType)("subscribe-to-node",e=>{Sd(e)}),(0,Vi.onMessageByType)("unsubscribe-from-node",e=>{aS(e)}));o(Do,"ensureNode")});var rs=M(Vt=>{"use strict";var ur=require("path"),{watch:Nae}=require("chokidar"),vn=require("fs-extra"),Rd=require("node-forge"),hq=require("net"),{generateKeyPair:lw,X509Certificate:Mo,createPrivateKey:pq}=require("crypto"),wae=require("util");lw=wae.promisify(lw);var Nt=Rd.pki,di=require("joi"),{v4:Eq}=require("uuid"),{validateBySchema:mw}=at(),{forComponent:Oae}=z(),ts=ce(),Os=(k(),v(K)),{CONFIG_PARAMS:Nl}=Os,fi=xy(),{ClientError:ka}=Ee(),lS=require("node:tls"),{relative:_q,join:Cae}=require("node:path"),{CERT_PREFERENCE_APP:$De,CERTIFICATE_VALUES:lq}=fi,Pae=Pc(),uw=yt(),{table:Lae,getDatabases:Dae,databases:cS}=(Le(),v(ft)),{getJWTRSAKeys:uq}=(cd(),v(Th)),mt=Oae("tls");Vt.generateKeys=Ew;Vt.updateConfigCert=Iq;Vt.createCsr=Hae;Vt.signCertificate=kae;Vt.setCertTable=yd;Vt.loadCertificates=yq;Vt.reviewSelfSignedCert=gw;Vt.createTLSSelector=wq;Vt.listCertificates=Cq;Vt.addCertificate=Yae;Vt.removeCertificate=zae;Vt.createNatsCerts=$ae;Vt.generateCertsKeys=qae;Vt.getReplicationCert=Mh;Vt.getReplicationCertAuth=Fae;Vt.renewSelfSigned=Vae;Vt.hostnamesFromCert=Tw;Vt.getKey=jae;Vt.getHostnamesFromCertificate=Qae;Vt.getPrimaryHostName=Sw;var{urlToNodeName:gq,getThisNodeUrl:Mae,getThisNodeName:dS,clearThisNodeName:vae}=(es(),v(vo)),{readFileSync:Uae,statSync:Sq}=require("node:fs"),VDe=ce(),{getTicketKeys:xae,onMessageFromWorkers:Bae}=st(),Ha=z(),{isMainThread:Tq}=require("worker_threads"),{TLSSocket:Rq,createSecureContext:KDe}=require("node:tls"),hw=3650,Dh=["127.0.0.1","localhost","::1"],pw=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];Bae(async e=>{e.type===Os.ITC_EVENT_TYPES.RESTART&&(ts.initSync(!0),await gw())});var zr;function qa(){return zr||(zr=Dae().system.hdb_certificate,zr||(zr=Lae({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),zr}o(qa,"getCertTable");async function Mh(){let e=wq("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(dS());if(!r)return;let n=new Mo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(Mh,"getReplicationCert");async function Fae(){qa();let e=(await Mh()).options.cert,r=new Mo(e).issuer.match(/CN=(.*)/)?.[1];return zr.get(r)}o(Fae,"getReplicationCertAuth");var dq,Ga=new Map;function yq(){if(dq)return;dq=!0;let e=[{configKey:Nl.TLS},{configKey:Nl.OPERATIONSAPI_TLS}];qa();let t=ur.dirname(uw.getConfigFilePath()),r;for(let{configKey:n}of e){let s=uw.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&_q(Cae(t,"keys"),a);c&&fq(a,l=>{Ga.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&Tq){let d;fq(u,f=>{if(lq.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let h=Nq(u),p=new Mo(h),_;try{_=Sw(p)}catch(R){mt.error("error extracting host name from certificate",R);return}if(_==null){mt.error("No host name found on certificate");return}if(p.checkIssued(new Mo(lq.cert)))return;let g=zr.primaryStore.get(_),y=Sq(u).mtimeMs,T=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&y<=T){y<T&&mt.info(`Certificate ${_} at ${u} is older (${new Date(y)}) than the certificate in the database (${T>1?new Date(T):"only self signed certificate available"})`);return}r=zr.put({name:_,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:h,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:y,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(yq,"loadCertificates");function fq(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&Tq&&mt.warn(`Reloading ${r}:`,i),n=c,t(Nq(i)))}catch(c){mt.error(`Error loading ${r}:`,i,c)}},"loadFile");vn.existsSync(e)?s(e,Sq(e)):mt.error(`${r} file not found:`,e),Nae(e,{persistent:!1}).on("change",s)}o(fq,"loadAndWatch");function dw(){let e=Mae();if(e==null){let t=Dh[0];return mt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return gq(e)}o(dw,"getHost");function uS(){let e=dS();if(e==null){let t=Dh[0];return mt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(uS,"getCommonName");async function Hae(){let e=await Mh(),t=Nt.certificateFromPem(e.options.cert),r=Nt.privateKeyFromPem(e.options.key);mt.info("Creating CSR with cert named:",e.name);let n=Nt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:uS()},...pw];mt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:Aq()}];return mt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Rd.pki.certificationRequestToPem(n)}o(Hae,"createCsr");function Aq(){let e=Dh.includes(uS())?Dh:[...Dh,uS()];return e.includes(dw())||e.push(dw()),[{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=>hq.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(Aq,"certExtensions");async function kae(e){let t={},r=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;qa();for await(let d of zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(Ga.has(d.private_key_name)){n=Ga.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await vn.exists(ur.join(r,d.private_key_name))){n=vn.readFile(ur.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await fw();s=d.ca,n=d.private_key}n=Nt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Nt.certificateFromPem(s.certificate);mt.info("Signing CSR with cert named",s.name);let a=Nt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return mt.error(d),new Error("Error verifying CSR: "+d.message)}let c=Rd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+hw),mt.info("sign cert setting validity:",c.validity),mt.info("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),mt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;mt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Rd.md.sha256.create()),t.certificate=Nt.certificateToPem(c)}else mt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(kae,"signCertificate");async function Gae(e,t){await yd({name:dS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await yd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Nt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(Gae,"createCertificateTable");async function yd(e){let t=new Mo(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},qa(),await zr.patch(e)}o(yd,"setCertTable");async function Ew(){let e=await lw("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Nt.publicKeyFromPem(e.publicKey),privateKey:Nt.privateKeyFromPem(e.privateKey)}}o(Ew,"generateKeys");async function _w(e,t,r){let n=Nt.createCertificate();if(!t){let a=await Mh();t=Nt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+hw);let i=[{name:"commonName",value:uS()},...pw];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(Aq()),n.sign(e,Rd.md.sha256.create()),Nt.certificateToPem(n)}o(_w,"generateCertificates");async function fw(){let e=await Cq(),t;for(let r of e){if(!r.is_authority)continue;let n=await Oq(r.private_key_name);if(r.private_key_name&&n&&new Mo(r.certificate).checkPrivateKey(pq(n))){mt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;mt.trace("No CA found with matching private key")}o(fw,"getCertAuthority");async function bq(e,t,r=!0){let n=Nt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+hw);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ts.get(Nl.REPLICATION_HOSTNAME)??gq(ts.get(Nl.REPLICATION_URL))??Eq().split("-")[0]}`},...pw];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Rd.md.sha256.create());let a=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME),c=ur.join(a,fi.PRIVATEKEY_PEM_NAME);return r&&await vn.writeFile(c,Nt.privateKeyToPem(e)),n}o(bq,"generateCertAuthority");async function qae(){let{privateKey:e,publicKey:t}=await Ew(),r=await bq(e,t),n=await _w(e,t,r);await Gae(n,r),Iq()}o(qae,"generateCertsKeys");async function $ae(){let e=await _w(Nt.privateKeyFromPem(fi.CERTIFICATE_VALUES.key),void 0,Nt.certificateFromPem(fi.CERTIFICATE_VALUES.cert)),t=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME),r=ur.join(t,fi.NATS_CERTIFICATE_PEM_NAME);await vn.exists(r)||await vn.writeFile(r,e);let n=ur.join(t,fi.NATS_CA_PEM_NAME);await vn.exists(n)||await vn.writeFile(n,fi.CERTIFICATE_VALUES.cert)}o($ae,"createNatsCerts");async function Vae(){qa();for await(let e of zr.search([{attribute:"is_self_signed",value:!0}]))await zr.delete(e.name);await gw()}o(Vae,"renewSelfSigned");async function gw(){vae(),await yq(),qa();let e=await fw();if(!e){mt.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Nt.privateKeyFromPem(vn.readFileSync(u)),keyPath:u}}catch(d){return mt.warn(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ts.get(Nl.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(Nl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME),c=_q(a,i);s||(mt.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await Ew(),vn.existsSync(ur.join(a,fi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${Eq().split("-")[0]}.pem`),await vn.writeFile(ur.join(a,c),Nt.privateKeyToPem(s)));let l=await bq(s,Nt.setRsaPublicKey(s.n,s.e),!1);await yd({name:l.subject.getField("CN").value,uses:["https"],certificate:Nt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Mh()){let r=dS();mt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await fw();let n=Nt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await _w(Nt.privateKeyFromPem(e.private_key),s,n);await yd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(gw,"reviewSelfSignedCert");function Iq(){let e=Pae(Object.keys(Os.CONFIG_PARAM_MAP),!0),t=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME),r=ur.join(t,fi.PRIVATEKEY_PEM_NAME),n=ur.join(t,fi.NATS_CERTIFICATE_PEM_NAME),s=ur.join(t,fi.NATS_CA_PEM_NAME),i=Os.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),uw.updateConfigValue(void 0,void 0,a,!1,!0)}o(Iq,"updateConfigCert");function Nq(e){return e.startsWith("-----BEGIN")?e:Uae(e,"utf8")}o(Nq,"readPEM");var mq=lS.createSecureContext;lS.createSecureContext=function(e){if(!e.cert||!e.key)return mq(e);let t={...e};delete t.key,delete t.cert;let r=mq(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Kae=Rq.prototype._init;Rq.prototype._init=function(e,t){Kae.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var Il=new Map;function wq(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Il.clear();let d=0;if(cS===void 0){c();return}for await(let f of cS.system.hdb_certificate.search([])){let m=f.certificate,h=new Mo(m);f.is_authority&&(h.asString=m,Il.set(h.subject,m))}for await(let f of cS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",h=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(h+=1);let p=await Oq(f.private_key_name),_=f.certificate,g=new Mo(_);if(Il.has(g.issuer)&&(_+=`
17
- `+Il.get(g.issuer)),!p||!_)throw new Error("Missing private key or certificate for secure server");let y={ciphers:f.ciphers,ticketKeys:xae(),availableCAs:Il,ca:t&&Array.from(Il.values()),cert:_,key:p,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(y.sessionIdContext=a.sessionIdContext);let T=lS.createSecureContext(y);T.name=f.name,T.options=y,T.quality=h,T.certificateAuthorities=Array.from(Il),T.certStart=_.toString().slice(0,100);let R=f.hostnames??Tw(g);Array.isArray(R)||(R=[R]);let I;for(let P of R)if(P){P[0]==="*"&&(s=!0,P=P.slice(1)),P===dw()&&(h+=2),hq.isIP(P)&&(I=!0);let Y=r.get(P)?.quality??0;h>Y&&r.set(P,T)}else Ha.error("No hostname found for certificate at",lS.certificate);Ha.trace("Adding TLS",T.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"quality",h,"best quality",d),h>d&&(i.defaultContext=n=T,d=h,a&&(a.defaultContext=T))}catch(m){Ha.error("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),cS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){Ha.info("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return Ha.debug("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?Ha.debug("No certificate found to match",a,"using the default certificate"):Ha.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):Ha.info("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(wq,"createTLSSelector");async function Oq(e){let t=Ga.get(e);return!t&&e?await vn.readFile(ur.join(ts.get(Nl.ROOTPATH),Os.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(Oq,"getPrivateKeyByName");async function Cq(){qa();let e=[];for await(let t of zr.search([]))e.push(t);return e}o(Cq,"listCertificates");async function Yae(e){let t=mw(e,di.object({name:di.string().required(),certificate:di.string().required(),is_authority:di.boolean().required(),private_key:di.string(),hosts:di.array(),uses:di.array()}));if(t)throw new ka(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Mo(n),c=!1,l=!1,u;for(let[h,p]of Ga)!s&&!c&&a.checkPrivateKey(pq(p))&&(c=!0,u=h),s&&s===p&&(l=!0,u=h);if(!i&&!s&&!c)throw new ka("A suitable private key was not found for this certificate");let d;if(!r){try{d=Sw(a)}catch(h){mt.error(h)}if(d==null)throw new ka("Error extracting certificate host name, please provide a name parameter")}let f=Wae(r??d);s&&!c&&!l&&(await vn.writeFile(ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME,f+".pem"),s),Ga.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 yd(m),"Successfully added certificate: "+f}o(Yae,"addCertificate");function Wae(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Wae,"sanitizeName");async function zae(e){let t=mw(e,di.object({name:di.string().required()}));if(t)throw new ka(t.message);let{name:r}=e;qa();let n=await zr.get(r);if(!n)throw new ka(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(mt.info("Removing private key named",s),await vn.remove(ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME,s)))}return await zr.delete(r),"Successfully removed "+r}o(zae,"removeCertificate");function Sw(e){let t=e.subject.match(/CN=(.*)/)?.[1];return t||Tw(e)[0]}o(Sw,"getPrimaryHostName");function Tw(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=certObj.subject.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(Tw,"hostnamesFromCert");async function jae(e){if(e.bypass_auth!==!0)throw new ka("Unauthorized","401");let t=mw(e,di.object({name:di.string().required()}));if(t)throw new ka(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await uq()).privateKey;if(r===".jwtPublic")return(await uq()).publicKey;if(Ga.get(r))return Ga.get(e.name);throw new ka("Key not found")}o(jae,"getKey");function Qae(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(Qae,"getHostnamesFromCertificate")});var jq={};Ce(jq,{CONFIRMATION_STATUS_POSITION:()=>zq,LATENCY_POSITION:()=>_S,NodeReplicationConnection:()=>vh,OPERATION_REQUEST:()=>bw,RECEIVED_TIME_POSITION:()=>Nw,RECEIVED_VERSION_POSITION:()=>Iw,SENDING_TIME_POSITION:()=>ES,createWebSocket:()=>gS,databaseSubscriptions:()=>Va,replicateOverWS:()=>Uh,tableUpdateListeners:()=>Ow});async function gS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=rt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!yw){let l=(0,Vq.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),yw=u.secureContexts}if(i=yw.get(s),i&&me.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,Yq.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=Kq.createSecureContext({...i.options,ca:[...Ol,...i.options.availableCAs.values()]})),new qq.WebSocket(e,"harperdb-replication-v1",c)}function Uh(e,t,r){let n=t.port||t.securePort,s=wl.pid%1e3+"-"+$q.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);me.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||Va,f,m,h=!1,p=t.subscription;p?.then&&p.then(E=>{p=E,p.auditStore&&(f=p.auditStore)});let _=t.tables||u&&it()[u],g;if(!r){me.error?.(s,"No authorization provided"),Es(1008,"Unauthorized");return}let y=new Map,T=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,I,P,Y,te,x,$,j=5e3,V,le=0,re=0,se=0,_e=new Map,Ne=[],Fe=0,He;if(t.url){let E=o(()=>{te&&re===e._socket?.bytesRead&&se===e._socket?.bytesWritten?e.terminate():(te=performance.now(),e.ping(),re=e._socket?.bytesRead,se=e._socket?.bytesWritten)},"sendPing");P=setInterval(E,Hq).unref(),E()}else _r();e._socket?.setMaxListeners(200);function _r(){clearTimeout(Y),re=e._socket?.bytesRead,se=e._socket?.bytesWritten,Y=setTimeout(()=>{re===e._socket?.bytesRead&&se===e._socket?.bytesWritten&&(me.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},Hq*2).unref()}o(_r,"resetPingTimer");function pt(){if(!(!g||!u))return m||(m=Ed(f,u,g)),m}o(pt,"getSharedStatus"),u&&Pf(u);let gr,wr,ou=[],au=[],Ft,Nf=[],wf=[],hE=[],gy=150,pE=25,cu=0,Me=0,Of=!1,oo,Or,Sr,Cf;e.on("message",E=>{le=performance.now();try{let S=E.dataView=new qc(E.buffer,E.byteOffset,E.byteLength);if(E[0]>127){let C=(0,nt.decode)(E),[O,D,F]=C;switch(O){case Lq:{if(D){if(g){if(g!==D){me.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${D}, disconnecting`),e.send((0,nt.encode)([Ad])),Es(1008,"Node name mismatch");return}}else if(g=D,t.connection?.tentativeNode){let B=t.connection.tentativeNode;B.name=g,t.connection.tentativeNode=null,Do(g,B)}if(t.connection&&(t.connection.nodeName=g),me.debug?.(s,"received node name:",g,"db:",u??C[2]),!u)try{Pf(u=C[2]),u==="system"&&(gr=Ba(t,(B,ue)=>{yc(ue)&&lu(ue)}),e.on("close",()=>{gr?.remove()}))}catch(B){me.warn?.(s,"Error setting database",B),e.send((0,nt.encode)([Ad])),Es(1008,B.message);return}Rc()}break}case Bq:{me.debug?.(s,"Received table definitions for",D.map(B=>B.table));for(let B of D){let ue=C[2];B.database=ue;let ae;yc(ue)&&(ue==="system"?Ge[ue]?.[B.table]||(ae=q(B,Ge[ue]?.[B.table])):ae=q(B,Ge[ue]?.[B.table]),f||(f=ae?.auditStore),_||(_=it()?.[ue]))}break}case Ad:Es();break;case bw:try{let B=r?.replicates||r?.subscribers||r?.name;me.debug?.("Received operation request",D,"from",g),server.operation(D,{user:r},!B).then(ue=>{Array.isArray(ue)&&(ue={results:ue}),ue.requestId=D.requestId,e.send((0,nt.encode)([mS,ue]))},ue=>{e.send((0,nt.encode)([mS,{requestId:D.requestId,error:(0,bd.errorToString)(ue)}]))})}catch(B){e.send((0,nt.encode)([mS,{requestId:D.requestId,error:(0,bd.errorToString)(B)}]))}break;case mS:let{resolve:L,reject:H}=y.get(D.requestId);D.error?H(new Error(D.error)):L(D),y.delete(D.requestId);break;case Rw:let W=C[3];if(!_){u?me.error?.(s,"No database found for",u):me.error?.(s,"Database name never received"),Es();return}let ee=_[W];ee=q({table:W,database:u,attributes:D.attributes,schemaDefined:D.schemaDefined},ee),ou[F]={name:W,decoder:new nt.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:D.typedStructs,structures:D.structures}),getEntry(B){return ee.primaryStore.getEntry(B)},rootStore:ee.primaryStore.rootStore};break;case Dq:Cf=f?ZG(D,f):new Map,Ft=C[2],me.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Ft}`);break;case Mq:let oe=F;hE[oe]=D;break;case xq:pt()[zq]=D,me.trace?.(s,"received and broadcasting committed update",D),pt().buffer.notify();break;case Uq:R=D,p.send({type:"end_txn",localTime:R,remoteNodeIds:T});break;case hS:{let B=C[1],{fileId:ue,size:ae,finished:ge,error:X}=B,de=_e.get(ue);me.debug?.("Received blob",ue,"has stream",!!de,"connectedToBlob",!!de?.connectedToBlob,"length",C[2].length,"finished",ge),de||(de=new Aw.PassThrough,de.expectedSize=ae,_e.set(ue,de)),de.lastChunk=Date.now(),ge?(X?(de.on("error",()=>{}),de.destroy(new Error("Blob error: "+X))):de.end(C[2]),de.connectedToBlob&&_e.delete(ue)):de.write(C[2]);break}case vq:{let B=D,ue;try{let ae=C[3],ge=au[F]||(au[F]=_[C[4]]);if(!ge)return me.warn?.("Unknown table id trying to handle record request",F);let X=ge.primaryStore.getBinaryFast(Symbol.for("structures")),de=X?.length??0;if(de!==Me){Me=de;let he=(0,nt.decode)(X);e.send((0,nt.encode)([Rw,{typedStructs:he.typed,structures:he.named},F,ge.tableName]))}let ne=ge.primaryStore.getBinaryFast(ae);if(ne){let he=ge.primaryStore.decoder.decode(ne,{valueAsBuffer:!0}),Ae=ct||{};Ae.version=(0,Wq.getLastVersion)(),ct&&ct[Ru]&Nn&&(he=Buffer.from(he),r_(()=>ge.primaryStore.decoder.decode(ne),Sc,ge.primaryStore.rootStore)),ue=(0,nt.encode)([fS,B,{value:he,expiresAt:Ae.expiresAt,version:Ae.version,residencyId:Ae.residencyId,nodeId:Ae.nodeId,user:Ae.user}])}else ue=(0,nt.encode)([fS,B])}catch(ae){ue=(0,nt.encode)([fS,B,{error:ae.message}])}e.send(ue);break}case fS:{let{resolve:B,reject:ue,tableId:ae,key:ge}=y.get(C[1]),X=C[2];if(X?.error)ue(new Error(X.error));else if(X){let de;t_(()=>{let ne=ou[ae].decoder.decode(X.value);X.value=ne,X.key=ge,B(X)||de&&de.forEach(XE)},ne=>{let he=Tc(ne);return de||(de=[]),de.push(he),he})}else B();y.delete(C[1]);break}case Pq:{Sr=D;let B,ue,ae=!1;if(p){if(u!==p.databaseName&&!p.then){me.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=d.get(u);if(me.debug?.(s,"received subscription request for",u,"at",Sr),!p){let ye;p=new Promise(We=>{me.debug?.("Waiting for subscription to database "+u),ye=We}),p.ready=ye,Va.set(u,p)}if(r.name)ue=$t().subscribe(r.name),ue.then(async ye=>{B=ye;for await(let We of B){let Xe=We.value;if(!(Xe?.replicates===!0||Xe?.replicates?.receives||Xe?.subscriptions?.some(jt=>(jt.database||jt.schema)===u&&jt.publish!==!1))){ae=!0,e.send((0,nt.encode)([Ad])),Es(1008,`Unauthorized database subscription to ${u}`);return}}},ye=>{me.error?.(s,"Error subscribing to HDB nodes",ye)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,nt.encode)([Ad])),Es(1008,`Unauthorized database subscription to ${u}`);return}if(Or&&(me.debug?.(s,"stopping previous subscription",u),Or.emit("close")),Sr.length===0)return;let ge=Sr[0],X=o(ye=>{if(ye&&(ge.replicateByDefault?!ge.tables.includes(ye.tableName):ge.tables.includes(ye.tableName)))return{table:ye}},"tableToTableEntry"),de={txnTime:0},ne,he,Ae=1/0,Oe,ze=o((ye,We)=>{if(ye.type==="end_txn"){de.txnTime&&(a[i]!==66&&me.error?.("Invalid encoding of message"),Ic(9),Ic(f_),Nc(Oe=We),kr()),i=c,de.txnTime=0;return}let Xe=ye.nodeId,jt=ye.tableId,Dt=he[jt];if(!Dt&&(Dt=he[jt]=X(p.tableById[jt]),!Dt))return me.debug?.("Not subscribed to table",jt);let Zr=Dt.table,fa=Zr.primaryStore,Ht=fa.encoder;(ye.extendedType&E_||!Ht.typedStructs)&&(Ht._mergeStructures(Ht.getStructures()),Ht.typedStructs&&(Ht.lastTypedStructuresLength=Ht.typedStructs.length));let _E=ne[Xe];if(!(_E&&_E.startTime<We&&(!_E.endTime||_E.endTime>We)))return pS&&me.trace?.(s,"skipping replication update",ye.recordId,"to:",g,"from:",Xe,"subscribed:",ne),UD();pS&&me.trace?.(s,"sending replication update",ye.recordId,"to:",g,"from:",Xe,"subscribed:",ne);let Sy=ye.version;de.txnTime!==Sy&&(de.txnTime&&(pS&&me.trace?.(s,"new txn time, sending queued txn",de.txnTime),a[i]!==66&&me.error?.("Invalid encoding of message"),kr()),de.txnTime=Sy,i=c,Nc(Sy));let wc=ye.residencyId,Ty=Cr(wc,Zr),gE;if(Ty&&!Ty.includes(g)){let Oc=Cr(ye.previousResidencyId,Zr);if(Oc&&!Oc.includes(g)&&(ye.type==="put"||ye.type==="patch")||Zr.getResidencyById)return UD();let Lf=ye.recordId;me.trace?.(s,"sending invalidation",Lf,g,"from",Xe);let Ay=0;wc&&(Ay|=$c),ye.previousResidencyId&&(Ay|=Vc);let by,SE=null;for(let xD in Zr.indices){if(!SE){if(by=ye.getValue(fa,!0),!by)break;SE={}}SE[xD]=by[xD]}gE=Su(ye.version,jt,Lf,null,Xe,ye.user,ye.type==="put"||ye.type==="patch"?"invalidate":ye.type,Ht.encode(SE),Ay,wc,ye.previousResidencyId,ye.expiresAt)}function UD(){me.trace?.(s,"skipping audit record",ye.recordId),x||(x=setTimeout(()=>{x=null,(Oe||0)+Fq/2<Ae&&(pS&&me.trace?.(s,"sending skipped sequence update",Ae),e.send((0,nt.encode)([Uq,Ae])))},Fq).unref())}o(UD,"skipAuditRecord");let Ry=Ht.typedStructs,yy=Ht.structures;if((Ry?.length!=Dt.typed_length||yy?.length!=Dt.structure_length)&&(Dt.typed_length=Ry?.length,Dt.structure_length=yy.length,me.debug?.(s,"send table struct",Dt.typed_length,Dt.structure_length),Dt.sentName||(Dt.sentName=!0),e.send((0,nt.encode)([Rw,{typedStructs:Ry,structures:yy,attributes:Zr.attributes,schemaDefined:Zr.schemaDefined},jt,Dt.table.tableName]))),wc&&!wf[wc]&&(e.send((0,nt.encode)([Mq,Ty,wc])),wf[wc]=!0),gE)Ic(gE.length),EE(gE);else{let Oc=ye.encoded;ye.extendedType&Nn&&r_(()=>ye.getValue(fa),Sc,fa.rootStore);let Lf=Oc[0]===66?8:0;Ic(Oc.length-Lf),EE(Oc,Lf),me.trace?.("wrote record",ye.recordId,"length:",Oc.length)}},"sendAuditRecord"),kr=o(()=>{c-i>8?(e.send(a.subarray(i,c)),me.debug?.(s,"Sent message, size:",c-i)):me.debug?.(s,"skipping empty transaction")},"sendQueuedData");Or=new ww.EventEmitter,Or.once("close",()=>{ae=!0,B?.end()});for(let{startTime:ye}of Sr)ye<Ae&&(Ae=ye);(ue||Promise.resolve()).then(async()=>{p=await p,f=p.auditStore,he=p.tableById.map(X),ne=[];for(let{name:We,startTime:Xe,endTime:jt}of Sr){let Dt=sS(We,f);me.debug?.("subscription to",We,"using local id",Dt,"starting",Xe),ne[Dt]={startTime:Xe,endTime:jt}}lu(u),gr||(gr=_l(We=>{We.databaseName===u&&lu(u)}),wr=fh(We=>{We===u&&(e.send((0,nt.encode)([Ad])),Es())}),e.on("close",()=>{gr?.remove(),wr?.remove()})),e.send((0,nt.encode)([Dq,wh(p.auditStore),Sr.map(({name:We})=>We)]));let ye=!0;do{isFinite(Ae)||(me.warn?.("Invalid sequence id "+Ae),Es(1008,"Invalid sequence id"+Ae));let We;if(ye&&!ae&&(ye=!1,!(NA(f)<=Ae)&&(Gq.default.get(U.REPLICATION_COPYTABLESTOCATCHUP)??Jae)&&server.nodes[0]?.name===g)){me.info?.("Replicating all tables to",g);let jt=Ae,Dt=SS(f);for(let Zr in _){if(!X(Zr))continue;let fa=_[Zr];for(let Ht of fa.primaryStore.getRange({snapshot:!1})){if(ae)return;Ht.localTime>=Ae&&(me.trace?.(s,"Copying record from",u,Zr,Ht.key,Ht.localTime),jt=Math.max(Ht.localTime,jt),We=!0,pt()[ES]=1,ze({recordId:Ht.key,tableId:fa.tableId,type:"put",getValue(){return Ht.value},encoded:fa.primaryStore.getBinary(Ht.key),version:Ht.version,residencyId:Ht.residencyId,nodeId:Dt,extendedType:Ht.metadataFlags},Ht.localTime))}}Ae=jt}for(let{key:Xe,value:jt}of f.getRange({start:Ae||1,exclusiveStart:!0,snapshot:!1})){if(ae)return;let Dt=Ut(jt);me.debug?.("sending audit record",new Date(Xe)),pt()[ES]=Xe,Ae=Xe,ze(Dt,Xe),e._socket.writableNeedDrain?await new Promise(Zr=>{me.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",Zr)}):Fe>pE?await new Promise(Zr=>{He=Zr}):await new Promise(setImmediate),Or.startTime=Xe,We=!0}We&&ze({type:"end_txn"},Ae),pt()[ES]=0,await AU(f)}while(!ae)}).catch(ye=>{me.error?.(s,"Error handling subscription to node",ye),Es(1008,"Error handling subscription to node")});break}}return}S.position=8;let A=!0,N,b;do{pt();let C=S.readInt();if(C===9&&S.getUint8(S.position)==f_){S.position++,R=b=S.readFloat64(),m[Iw]=R,m[Nw]=Date.now(),me.trace?.("received remote sequence update",R,u);break}let O=S.position,D=Ut(E,O,O+C),F=ou[D.tableId];F||me.error?.(`No table found with an id of ${D.tableId}`);let L;D.residencyId&&(L=hE[D.residencyId],me.trace?.(s,"received residency list",L,D.type,D.recordId));try{t_(()=>{N={table:F.name,id:D.recordId,type:D.type,nodeId:Cf.get(D.nodeId),residencyList:L,timestamp:D.version,value:D.getValue(F),user:D.user,beginTxn:A,expiresAt:D.expiresAt}},Tc)}catch(H){throw H.message+="typed structures for current decoder"+JSON.stringify(F.decoder.typedStructs),H}A=!1,me.trace?.(s,"received replication message",D.type,"id",N.id,"version",new Date(D.version),"nodeId",N.nodeId),m[Iw]=D.version,m[Nw]=Date.now(),p.send(N),S.position=O+C}while(S.position<E.byteLength);cu++,gt(E.byteLength,"bytes-received",`${g}.${u}.${N?.table||"unknown_table"}`,"replication","ingest"),cu>gy&&!Of&&(Of=!0,e.pause(),me.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),p.send({type:"end_txn",localTime:R,remoteNodeIds:T,async onCommit(){if(N){let C=Date.now()-N.timestamp;gt(C,"replication-latency",g+"."+u+"."+N.table,N.type,"ingest")}cu--,Of&&(Of=!1,e.resume(),me.debug?.(`Replication resuming ${g}`)),Ne.length>0&&await Promise.all(Ne),me.trace?.("All blobs finished"),!I&&b&&(me.trace?.(s,"queuing confirmation of a commit at",b),setTimeout(()=>{e.send((0,nt.encode)([xq,I])),me.trace?.(s,"sent confirmation of a commit at",I),I=null},Xae)),I=b,me.debug?.("last sequence committed",new Date(b),u)}})}catch(S){me.error?.(s,"Error handling incoming replication message",S)}}),e.on("ping",_r),e.on("pong",()=>{if(t.connection){let E=performance.now()-te;t.connection.latency=E,pt()&&(m[_S]=E),bl({name:g,database:u,url:t.url,latency:E})}te=null}),e.on("close",(E,S)=>{clearInterval(P),clearTimeout(Y),clearInterval($),Or&&Or.emit("close"),oo&&oo.end();for(let[A,{reject:N}]of y)N(new Error(`Connection closed ${S?.toString()} ${E}`));me.debug?.(s,"closed",E,S?.toString())});function Es(E,S){try{e.isFinished=!0,me.debug?.(s,"closing",g,u,E,S),e.close(E,S),t.connection?.emit("finished")}catch(A){me.error?.(s,"Error closing connection",A)}}o(Es,"close");async function Sc(E){let S=ZE(E);try{let A;Fe++;for await(let N of E.stream())A&&(me.debug?.("Sending blob chunk",S,"length",A.length),e.send((0,nt.encode)([hS,{fileId:S,size:E.size},A]))),A=N,e._socket.writableNeedDrain&&(me.debug?.("draining",S),await new Promise(b=>e._socket.once("drain",b)),me.debug?.("drained",S));me.debug?.("Sending final blob chunk",S,"length",A.length),e.send((0,nt.encode)([hS,{fileId:S,size:E.size,finished:!0},A]))}catch(A){me.debug?.("Error sending blob",A),e.send((0,nt.encode)([hS,{fileId:S,finished:!0,error:(0,bd.errorToString)(A)},Buffer.alloc(0)]))}finally{Fe--,Fe<pE&&He?.()}}o(Sc,"sendBlobs");function Tc(E){let S=ZE(E),A=_e.get(S);me.debug?.("Received transaction with blob",S,"has stream",!!A,"ended",!!A?.writableEnded),A?A.writableEnded&&_e.delete(S):(A=new Aw.PassThrough,_e.set(S,A)),A.connectedToBlob=!0,A.lastChunk=Date.now(),E.size===void 0&&A.expectedSize&&(E.size=A.expectedSize);let N=createBlob(A,E),b=N.save({primaryStore:p.auditStore});return b&&(b.blobId=S,Ne.push(b),b.finally(()=>{me.debug?.(`Finished receiving blob stream ${S}`),Ne.splice(Ne.indexOf(b),1)})),N}o(Tc,"receiveBlobs");function Rc(){if(h||(h=!0,t.connection?.on("subscriptions-updated",Rc)),!f&&p&&(f=p.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let E=new Map;try{for(let N of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let b of N.value.nodes||[])b.lastTxnTime>(E.get(b.id)??0)&&E.set(b.id,b.lastTxnTime)}catch(N){if(!N.message.includes("Can not re"))throw N}let S=t.connection?.nodeSubscriptions?.[0];T=[];let A=t.connection?.nodeSubscriptions.map((N,b)=>{let C=[],{replicateByDefault:O}=N;if(N.subscriptions){for(let H of N.subscriptions)if(H.subscribe&&(H.schema||H.database)===u){let W=H.table;_?.[W]?.replicate!==!1&&C.push(W)}O=!1}else for(let H in _)(O?_[H].replicate===!1:_[H].replicate)&&C.push(H);let D=f&&sS(N.name,f),F=p?.dbisDB?.get([Symbol.for("seq"),D])??1,L=Math.max(F?.seqId??1,(typeof N.startTime=="string"?new Date(N.startTime).getTime():N.startTime)??1);if(me.debug?.("Starting time recorded in db",N.name,D,u,F?.seqId,"start time:",L,new Date(L)),S!==N){let H=f&&sS(S.name,f),W=p?.dbisDB?.get([Symbol.for("seq"),H])??1;for(let ee of W?.nodes||[])ee.name===N.name&&(L=ee.seqId,me.debug?.("Using sequence id from proxy node",S.name,L))}return T.push(D),E.get(D)>L&&(L=E.get(D),me.debug?.("Updating start time from more recent txn recorded",S.name,L)),{name:N.name,replicateByDefault:O,tables:C,startTime:L,endTime:N.endTime}});if(A)if(me.debug?.(s,"sending subscription request",A,p?.dbisDB?.path),clearTimeout(V),A.length>0)e.send((0,nt.encode)([Pq,A]));else{let N=o(()=>{let b=performance.now();V=setTimeout(()=>{le<=b?Es(1008,"Connection has no subscriptions and is no longer used"):N()},j).unref()},"scheduleClose");N()}}o(Rc,"sendSubscriptionRequestUpdate");function Cr(E,S){if(!E)return;let A=Nf[E];return A||(A=S.getResidencyRecord(E),Nf[E]=A),A}o(Cr,"getResidence");function yc(E){return!($a&&$a!="*"&&!$a[E]&&!$a.includes?.(E)&&!$a.some?.(S=>S.name===E))}o(yc,"checkDatabaseAccess");function Pf(E){if(p=p||d.get(E),!yc(E))throw new Error(`Access to database "${E}" is not permitted`);p||me.warn?.(`No database named "${E}" was declared and registered`),f=p?.auditStore,_||(_=it()?.[E]);let S=rt();if(S===g)throw S?new Error("Should not connect to self",S):new Error("Node name not defined");return Ac(S,E),!0}o(Pf,"setDatabase");function Ac(E,S){let A=it()?.[S],N=[];for(let b in A){let C=A[b];N.push({table:b,schemaDefined:C.schemaDefined,attributes:C.attributes.map(O=>({name:O.name,type:O.type,isPrimaryKey:O.isPrimaryKey}))})}me.trace?.("Sending database info for node",E,"database name",S),e.send((0,nt.encode)([Lq,E,S,N]))}o(Ac,"sendNodeDBName");function lu(E){let S=it()?.[E],A=[];for(let N in S){if(Sr&&!Sr.some(C=>C.replicateByDefault?!C.tables.includes(N):C.tables.includes(N)))continue;let b=S[N];A.push({table:N,schemaDefined:b.schemaDefined,attributes:b.attributes.map(C=>({name:C.name,type:C.type,isPrimaryKey:C.isPrimaryKey}))})}e.send((0,nt.encode)([Bq,A,E]))}o(lu,"sendDBSchema"),$=setInterval(()=>{for(let[E,S]of _e)S.lastChunk+3e4<Date.now()&&(me.warn?.(`Timeout waiting for blob stream to finish ${E} from ${g}`),_e.delete(E),S.end())},3e4).unref();let bc=1,ua=[];return{end(){oo&&oo.end(),Or&&Or.emit("close")},getRecord(E){let S=bc++;return new Promise((A,N)=>{let b=[vq,S,E.table.tableId,E.id];ua[E.table.tableId]||(b.push(E.table.tableName),ua[E.table.tableId]=!0),e.send((0,nt.encode)(b)),le=performance.now(),y.set(S,{tableId:E.table.tableId,key:E.id,resolve(C){let{table:O,entry:D}=E;if(A(C),C)return O._recordRelocate(D,C)},reject:N})})},sendOperation(E){let S=bc++;return E.requestId=S,e.send((0,nt.encode)([bw,E])),new Promise((A,N)=>{y.set(S,{resolve:A,reject:N})})}};function Ic(E){da(5),E<128?a[c++]=E:E<16384?(l.setUint16(c,E|32768),c+=2):E<1056964608?(l.setUint32(c,E|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,E),c+=5)}function EE(E,S=0,A=E.length){let N=A-S;da(N),E.copy(a,c,S,A),c+=N}function Nc(E){da(8),l.setFloat64(c,E),c+=8}function da(E){if(E+16>a.length-c){let S=Buffer.allocUnsafeSlow(c+E-i+65536>>10<<11);a.copy(S,0,i,c),c=c-i,i=0,a=S,l=new DataView(a.buffer,0,a.length)}}function q(E,S){let A=E.database??"data";if(A!=="data"&&!Ge[A]){me.warn?.("Database not found",E.database);return}S||(S={});let N=S.schemaDefined,b=!1,C=E.schemaDefined,O=S.attributes||[];for(let D=0;D<E.attributes?.length;D++){let F=E.attributes[D],L=O.find(H=>H.name===F.name);(!L||L.type!==F.type)&&(N?me.error?.(`Schema for '${database_name}.${table_definition.table}' is defined locally, but attribute '${ensure_attribute.name}: ${ensure_attribute.type}' from '${g}' does not match local attribute ${existing_attribute?"'"+L.name+": "+L.type+"'":"which does not exist"}`):(b=!0,C||(F.indexed=!0),L?O[O.indexOf(L)]=F:O.push(F)))}return b?(me.debug?.("(Re)creating",E),et({table:E.table,database:E.database,schemaDefined:E.schemaDefined,attributes:O,...S})):S}}var Gq,nt,qq,$q,bd,ww,Vq,Kq,wl,Yq,Aw,Wq,me,Pq,Lq,Dq,Ad,Mq,Rw,vq,fS,bw,mS,Uq,xq,Bq,hS,zq,Iw,Nw,ES,_S,Jae,Ow,Va,pS,Fq,Xae,Hq,yw,kq,vh,Cw=fe(()=>{Le();uo();iw();KA();es();Gq=w(ce());k();Kc();nt=require("msgpackr"),qq=require("ws"),$q=require("worker_threads"),bd=w(z());Lh();ww=require("events"),Vq=w(rs()),Kq=w(require("node:tls"));Al();wl=w(require("node:process")),Yq=require("node:net");Hi();Ts();Aw=require("node:stream"),Wq=require("lmdb"),me=(0,bd.forComponent)("replication").conditional,Pq=129,Lq=140,Dq=141,Ad=142,Mq=130,Rw=132,vq=133,fS=134,bw=136,mS=137,Uq=143,xq=144,Bq=145,hS=146,zq=0,Iw=1,Nw=2,ES=3,_S=4,Jae=wl.env.HDB_LEADER_URL||wl.argv.includes("--HDB_LEADER_URL"),Ow=new Map,Va=new Map,pS=!0,Fq=300,Xae=2,Hq=3e4;o(gS,"createWebSocket");kq=1e3,vh=class extends ww.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=kq;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??ui(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await gS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;me.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${wl.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),me[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=kq,bl({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Uh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(me.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"?me.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`):me.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(Td({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();me.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>>3})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(Uh,"replicateOverWS")});var vo={};Ce(vo,{clearThisNodeName:()=>oce,disableReplication:()=>rce,enabledDatabases:()=>$a,forEachReplicatedDatabase:()=>Ba,getThisNodeId:()=>SS,getThisNodeName:()=>rt,getThisNodeUrl:()=>Fa,hostnameToUrl:()=>AS,lastTimeInAuditStore:()=>Oh,monitorNodeCAs:()=>s$,replicateOperation:()=>cce,replicationCertificateAuthorities:()=>Ol,sendOperationToNode:()=>Bh,servers:()=>ece,setReplicator:()=>o$,start:()=>tce,startOnMainThread:()=>cw,subscribeToNode:()=>Sd,unsubscribeFromNode:()=>aS,urlToNodeName:()=>ui});function tce(e){if(e.port||(e.port=Cs.default.get(U.OPERATIONSAPI_NETWORK_PORT)),e.securePort||(e.securePort=Cs.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!rt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let n of Ph(e))t.set(ui(n.url),n);nce(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=ve.ws(async(n,s,i,a)=>{if(wt.debug("Incoming WS connection received "+s.url),s.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return a(n,s,i);await i,n._socket.unref(),Uh(n,e,s?.user),n.on("error",c=>{c.code!=="ECONNREFUSED"&&wt.error("Error in connection to "+this.url,c.message)})},e);e.runFirst=!0,ve.http((n,s)=>{if(n.isWebSocket&&n.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){wt.debug("Incoming replication WS connection received, authorized: "+n.authorized),!n.authorized&&n._nodeRequest.socket.authorizationError&&wt.error(`Incoming client connection from ${n.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,n._nodeRequest.socket.authorizationError);let i=$t().primaryStore;if(n.authorized&&n.peerCertificate.subjectaltname){let a=(0,r$.getHostnamesFromCertificate)(n.peerCertificate),c;for(let l of a)if(c=l&&(i.get(l)||t.get(l)),c)break;if(c)if(c?.revoked_certificates?.includes(n.peerCertificate.serialNumber)){wt.warn("Revoked certificate used in attempt to connect to node",c.name,"certificate serial number",n.peerCertificate.serialNumber);return}else n.user=c;else wt.warn(`No node found for certificate common name/SANs: ${a}, available nodes are ${Array.from(i.getRange({}).filter(({value:l})=>l).map(({key:l})=>l)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let a=i.get(n.ip)||t.get(n.ip);a?n.user=a:wt.warn(`No node found for IP address ${n.ip}, available nodes are ${Array.from(new Set([...i.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return s(n)},e);for(let n of r)if(n.secureContexts){let s=o(()=>{let i=new Set(n.secureContexts.values());n.defaultContext&&i.add(n.defaultContext);for(let a of i)try{let c=Array.from(Ol);a.options.availableCAs&&c.push(...a.options.availableCAs.values());let l={...a.options,ca:c};a.updatedContext=yS.createSecureContext(l)}catch(c){wt.error("Error creating replication TLS config",c)}},"updateContexts");n.secureContextsListeners.push(s),s$(s),Cs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&s()}}function s$(e){let t=0;_d(r=>{r?.ca&&(Ol.add(r.ca),Ol.size!==t&&(t=Ol.size,e?.()))})}function rce(e=!0){n$=e}function nce(e){n$||(it(),$a=e.databases,Ba(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Va;for(let[s,i]of xh){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];o$(r,s,e),Ow.get(s)?.forEach(i=>i(s))}}))}function o$(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 i$ extends Dr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Va,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(wt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new $n,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let p of c){if(u.has(p))continue;let _=sce(p,i$.subscription,e);if(_?.isConnected){let g=Ed(t.auditStore,e,p)[_S];(!d||g<m)&&(d=_,f=p,m=g)}}if(!d)throw l||new e$.ServerError(`No connection to any other nodes are available: ${c}`,502);let h={requestId:Zae++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(h)}catch(p){if(d.isConnected)throw p;wt.warn("Error in load from node",RS,p),l||(l=p)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function a$(e,t,r,n,s){let i=xh.get(e);i||xh.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new vh(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function sce(e,t,r){let s=Qq.get(e)?.get(r);if(s)return s;let i=$t().primaryStore.get(e);return i?.url&&(s=a$(i.url,t,r,e,i.authorization),Qq.set(e,xh.get(i.url))),s}async function Bh(e,t,r){r||(r={}),r.serverName=e.name;let n=await gS(e.url,r),s=Uh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{wt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{wt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Sd(e){try{t$.isMainThread&&wt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Va.get(e.database);if(!t){let n;t=new Promise(s=>{wt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Va.set(e.database,t)}let r=a$(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Ch(n,e.database)),e.replicateByDefault)}catch(t){wt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function aS({name:e,url:t,database:r}){wt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from($t().primaryStore.getRange({})));let n=xh.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function ice(){if(Pw!==void 0)return Pw;let e=Cs.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Cs.default.get(U.TLS_CERTIFICATE);if(e)return Pw=new Xq.X509Certificate((0,Zq.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function rt(){return RS||(RS=Cs.default.get("replication_hostname")??ui(Cs.default.get("replication_url"))??ice()??Jq("operationsapi_network_secureport")??Jq("operationsapi_network_port")??"127.0.0.1")}function oce(){RS=void 0}function Jq(e){let t=Cs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function TS(e){let t=Cs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function SS(e){return wh(e)?.[rt()]}function Fa(){let e=Cs.default.get("replication_url");return e||AS(rt())}function AS(e){let t=TS("replication_port");if(t)return`ws://${e}:${t}`;if(t=TS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=TS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=TS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function ui(e){if(e)return new URL(e).hostname}function Ba(e,t){for(let n of Object.getOwnPropertyNames(Ge))r(n);return fh(n=>{r(n)}),_l((n,s)=>{r(n.databaseName)});function r(n){let s=Ge[n];wt.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):ace(n)&&t(s,n,!1)}o(r,"forDatabase")}function ace(e){let t=Ge[e];for(let r in t)if(t[r].replicate)return!0}function Oh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function cce(e){let t={message:""};if(e.replicated){e.replicated=!1,wt.trace?.("Replicating operation",e.operation,"to nodes",ve.nodes.map(n=>n.name));let r=await Promise.allSettled(ve.nodes.map(n=>Bh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=ve.nodes[s]?.name,i})}return t}var Cs,wt,Xq,Zq,yS,e$,t$,r$,n$,Zae,ece,Ol,$a,xh,Qq,Pw,RS,es=fe(()=>{Le();Aa();pu();Cw();Pr();Cs=w(ce()),wt=w(z()),Xq=require("crypto"),Zq=require("fs");Lh();Al();k();iw();yS=w(require("node:tls")),e$=w(Ee()),t$=require("worker_threads"),r$=w(rs()),Zae=1,ece=[],Ol=Cs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(yS.rootCertificates):new Set;o(tce,"start");o(s$,"monitorNodeCAs");o(rce,"disableReplication");o(nce,"assignReplicationSource");o(o$,"setReplicator");xh=new Map;o(a$,"getConnection");Qq=new Map;o(sce,"getConnectionByName");o(Bh,"sendOperationToNode");o(Sd,"subscribeToNode");o(aS,"unsubscribeFromNode");o(ice,"getCommonNameFromCert");o(rt,"getThisNodeName");o(oce,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return rt()}});o(Jq,"getHostFromListeningPort");o(TS,"getPortFromListeningPort");o(SS,"getThisNodeId");ve.replication={getThisNodeId:SS,exportIdMapping:wh};o(Fa,"getThisNodeUrl");o(AS,"hostnameToUrl");o(ui,"urlToNodeName");o(Ba,"forEachReplicatedDatabase");o(ace,"hasExplicitlyReplicatedTable");o(Oh,"lastTimeInAuditStore");o(cce,"replicateOperation")});var OS=M((EMe,f$)=>{"use strict";var Id=yG(),{validateBySchema:Fh}=at(),{commonValidators:Nd,schemaRegex:Lw}=Di(),dr=require("joi"),lce=z(),uce=require("uuid").v4,NS=bo(),wd=(k(),v(K)),dce=require("util"),Ka=jn(),{handleHDBError:Uo,hdbErrors:fce,ClientError:Hh}=Ee(),{HDB_ERROR_MSGS:bS,HTTP_STATUS_CODES:xo}=fce,{SchemaEventMsg:wS}=ti(),c$=lr(),{getDatabases:mce}=(Le(),v(ft)),{transformReq:Od}=ie(),{replicateOperation:l$}=(es(),v(vo)),IS=dr.string().min(1).max(Nd.schema_length.maximum).pattern(Lw).messages({"string.pattern.base":"{:#label} "+Nd.schema_format.message}),hce=dr.string().min(1).max(Nd.schema_length.maximum).pattern(Lw).messages({"string.pattern.base":"{:#label} "+Nd.schema_format.message}).required(),pce=dr.string().min(1).max(Nd.schema_length.maximum).pattern(Lw).messages({"string.pattern.base":"{:#label} "+Nd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();f$.exports={createSchema:Ece,createSchemaStructure:u$,createTable:_ce,createTableStructure:d$,createAttribute:yce,dropSchema:gce,dropTable:Sce,dropAttribute:Tce,getBackup:Ace};async function Ece(e){let t=await u$(e);return NS.signalSchemaChange(new wS(process.pid,e.operation,e.schema)),t}o(Ece,"createSchema");async function u$(e){let t=Fh(e,dr.object({database:IS,schema:IS}));if(t)throw new Hh(t.message);if(Od(e),!await Id.checkSchemaExists(e.schema))throw Uo(new Error,bS.SCHEMA_EXISTS_ERR(e.schema),xo.BAD_REQUEST,wd.LOG_LEVELS.ERROR,bS.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ka.createSchema(e),`database '${e.schema}' successfully created`}o(u$,"createSchemaStructure");async function _ce(e){return Od(e),e.hash_attribute=e.primary_key??e.hash_attribute,await d$(e)}o(_ce,"createTable");async function d$(e){let t=Fh(e,dr.object({database:IS,schema:IS,table:hce,residence:dr.array().items(dr.string().min(1)).optional(),hash_attribute:pce}));if(t)throw new Hh(t.message);if(!await Id.checkSchemaTableExists(e.schema,e.table))throw Uo(new Error,bS.TABLE_EXISTS_ERR(e.schema,e.table),xo.BAD_REQUEST,wd.LOG_LEVELS.ERROR,bS.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:uce(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ka.createTable(n,e);else throw Uo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",xo.BAD_REQUEST);else await Ka.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(d$,"createTableStructure");async function gce(e){let t=Fh(e,dr.object({database:dr.string(),schema:dr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Hh(t.message);Od(e);let r=await Id.checkSchemaExists(e.schema);if(r)throw Uo(new Error,r,xo.NOT_FOUND,wd.LOG_LEVELS.ERROR,r,!0);let n=await Id.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await Ka.dropSchema(e),NS.signalSchemaChange(new wS(process.pid,e.operation,e.schema)),await c$.purgeSchemaTableStreams(e.schema,s);let i=await l$(e);return i.message=`successfully deleted '${e.schema}'`,i}o(gce,"dropSchema");async function Sce(e){let t=Fh(e,dr.object({database:dr.string(),schema:dr.string(),table:dr.string().required()}));if(t)throw new Hh(t.message);Od(e);let r=await Id.checkSchemaTableExists(e.schema,e.table);if(r)throw Uo(new Error,r,xo.NOT_FOUND,wd.LOG_LEVELS.ERROR,r,!0);await Ka.dropTable(e),await c$.purgeTableStream(e.schema,e.table);let n=await l$(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(Sce,"dropTable");async function Tce(e){let t=Fh(e,dr.object({database:dr.string(),schema:dr.string(),table:dr.string().required(),attribute:dr.string().required()}));if(t)throw new Hh(t.message);Od(e);let r=await Id.checkSchemaTableExists(e.schema,e.table);if(r)throw Uo(new Error,r,xo.NOT_FOUND,wd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Uo(new Error,"You cannot drop a hash attribute",xo.BAD_REQUEST,void 0,void 0,!0);if(wd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Uo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,xo.BAD_REQUEST,void 0,void 0,!0);try{return await Ka.dropAttribute(e),Rce(e),NS.signalSchemaChange(new wS(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw lce.error(`Got an error deleting attribute ${dce.inspect(e)}.`),n}}o(Tce,"dropAttribute");function Rce(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Rce,"dropAttributeFromGlobal");async function yce(e){Od(e);let t=mce()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Uo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,xo.BAD_REQUEST,void 0,void 0,!0);return await Ka.createAttribute(e),NS.signalSchemaChange(new wS(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(yce,"createAttribute");function Ace(e){return Ka.getBackup(e)}o(Ace,"getBackup")});var h$=M((gMe,m$)=>{"use strict";var{OPERATIONS_ENUM:bce}=(k(),v(K)),Dw=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=bce.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};m$.exports=Dw});var Mw=M((RMe,S$)=>{"use strict";var Ice=jn(),TMe=h$(),CS=ie(),PS=(k(),v(K)),Nce=ce(),{handleHDBError:p$,hdbErrors:wce}=Ee(),{HDB_ERROR_MSGS:E$,HTTP_STATUS_CODES:_$}=wce,Oce=Object.values(PS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),g$="To use this operation audit log must be enabled in harperdb-config.yaml";S$.exports=Cce;async function Cce(e){if(CS.isEmpty(e.schema))throw new Error(E$.SCHEMA_REQUIRED_ERR);if(CS.isEmpty(e.table))throw new Error(E$.TABLE_REQUIRED_ERR);if(!Nce.get(PS.CONFIG_PARAMS.LOGGING_AUDITLOG))throw p$(new Error,g$,_$.BAD_REQUEST,PS.LOG_LEVELS.ERROR,g$,!0);let t=CS.checkSchemaTableExist(e.schema,e.table);if(t)throw p$(new Error,t,_$.NOT_FOUND,PS.LOG_LEVELS.ERROR,t,!0);if(!CS.isEmpty(e.search_type)&&Oce.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Ice.readAuditLog(e)}o(Cce,"readAuditLog")});var R$=M((AMe,T$)=>{"use strict";var{OPERATIONS_ENUM:Pce}=(k(),v(K)),vw=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Pce.GET_BACKUP,this.schema=t,this.table=r}};T$.exports=vw});var b$=M((wMe,A$)=>{"use strict";var Lce=jn(),IMe=R$(),Uw=ie(),Dce=(k(),v(K)),NMe=ce(),{handleHDBError:Mce,hdbErrors:vce}=Ee(),{HDB_ERROR_MSGS:y$,HTTP_STATUS_CODES:Uce}=vce;A$.exports=xce;async function xce(e){if(Uw.isEmpty(e.schema))throw new Error(y$.SCHEMA_REQUIRED_ERR);if(Uw.isEmpty(e.table))throw new Error(y$.TABLE_REQUIRED_ERR);let t=Uw.checkSchemaTableExist(e.schema,e.table);if(t)throw Mce(new Error,t,Uce.NOT_FOUND,Dce.LOG_LEVELS.ERROR,t,!0);return await Lce.getBackup(readAuditLogObject)}o(xce,"getBackup")});var O$=M((CMe,w$)=>{"use strict";var Bce=ce(),Ya=require("joi"),Fce=at(),I$=require("moment"),Hce=require("fs-extra"),xw=require("path"),kce=require("lodash"),kh=(k(),v(K)),{LOG_LEVELS:Cl}=(k(),v(K)),Gce="YYYY-MM-DD hh:mm:ss",qce=xw.resolve(__dirname,"../logs");w$.exports=function(e){return Fce.validateBySchema(e,$ce)};var $ce=Ya.object({from:Ya.custom(N$),until:Ya.custom(N$),level:Ya.valid(Cl.NOTIFY,Cl.FATAL,Cl.ERROR,Cl.WARN,Cl.INFO,Cl.DEBUG,Cl.TRACE),order:Ya.valid("asc","desc"),limit:Ya.number().min(1),start:Ya.number().min(0),log_name:Ya.custom(Vce)});function N$(e,t){if(I$(e,I$.ISO_8601).format(Gce)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(N$,"validateDatetime");function Vce(e,t){if(kce.invert(kh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=Bce.get(kh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?kh.LOG_NAMES.HDB:e,i=s===kh.LOG_NAMES.INSTALL?xw.join(qce,kh.LOG_NAMES.INSTALL):xw.join(n,s);return Hce.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(Vce,"validateReadLogPath")});var Fw=M((LMe,P$)=>{"use strict";var LS=(k(),v(K)),Kce=z(),Yce=ce(),Wce=O$(),Bw=require("path"),C$=require("fs-extra"),{once:zce}=require("events"),{handleHDBError:jce,hdbErrors:Qce}=Ee(),{PACKAGE_ROOT:Jce}=Rt(),{replicateOperation:Xce}=(es(),v(vo)),Zce=Bw.join(Jce,"logs"),ele=1e3,tle=200;P$.exports=rle;async function rle(e){let t=Wce(e);if(t)throw jce(t,t.message,Qce.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Xce(e),n=Yce.get(LS.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?LS.LOG_NAMES.HDB:e.log_name,i=s===LS.LOG_NAMES.INSTALL?Bw.join(Zce,LS.LOG_NAMES.INSTALL):Bw.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?ele:e.limit,h=e.order===void 0?void 0:e.order,p=e.start===void 0?0:e.start,_=p+m,g=0;h==="desc"&&!u&&!f&&(g=Math.max(C$.statSync(i).size-(_+5)*tle,0));let y=C$.createReadStream(i,{start:g});y.on("error",x=>{Kce.error(x)});let T=0,R=[],I="",P;y.on("data",x=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;x=I+x;let j=0,V;for(;(V=$.exec(x))&&!y.destroyed;){P&&(P.message=x.slice(j,V.index),Y(P));let[le,re,se]=V,_e=se.split("] ["),Ne=_e[0],Fe=_e[1];_e.splice(0,2),P={timestamp:re,thread:Ne,level:Fe,tags:_e,message:""},j=V.index+le.length}I=x.slice(j)}),y.on("end",x=>{y.destroyed||P&&(P.message=I.trim(),Y(P))}),y.resume();function Y(x){let $,j,V;switch(!0){case(a&&l&&d):$=new Date(x.timestamp),j=new Date(u),V=new Date(f),x.level===c&&$>=j&&$<=V&&T<p?T++:x.level===c&&$>=j&&$<=V&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case(a&&l):$=new Date(x.timestamp),j=new Date(u),x.level===c&&$>=j&&T<p?T++:x.level===c&&$>=j&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case(a&&d):$=new Date(x.timestamp),V=new Date(f),x.level===c&&$<=V&&T<p?T++:x.level===c&&$<=V&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case(l&&d):$=new Date(x.timestamp),j=new Date(u),V=new Date(f),$>=j&&$<=V&&T<p?T++:$>=j&&$<=V&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case a:x.level===c&&T<p?T++:x.level===c&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case l:$=new Date(x.timestamp),j=new Date(u),$>=j&&T<p?T++:$>=j&&T>=p&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case d:$=new Date(x.timestamp),V=new Date(f),$<=V&&T<p?T++:$<=V&&T>=p&&(Ki(x,h,R),T++,T===_&&y.destroy());break;default:T<p?T++:(Ki(x,h,R),T++,T===_&&y.destroy())}}o(Y,"onLogMessage"),await zce(y,"close");let te=await r;if(te.replicated){for(let x of R)x.node=server.hostname;for(let x of te.replicated){let $=x.node;if(x.status==="failed")Ki({timestamp:new Date().toISOString(),level:"error",node:$,message:`Error retrieving logs: ${x.reason}`},h,R);else for(let j of x.results)j.node=$,Ki(j,h,R)}}return R}o(rle,"readLog");function Ki(e,t,r){t==="desc"?nle(e,r):t==="asc"?sle(e,r):r.push(e)}o(Ki,"pushLineToResult");function nle(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(nle,"insertDescending");function sle(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(sle,"insertAscending")});var DS=M((BMe,v$)=>{"use strict";var Hw=require("joi"),{string:Cd,boolean:L$,date:ile}=Hw.types(),ole=at(),{validateSchemaExists:MMe,validateTableExists:vMe,validateSchemaName:UMe}=Di(),ale=(k(),v(K)),cle=It(),D$=ce();D$.initSync();var xMe=Cd.invalid(D$.get(ale.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(cle.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),M$={operation:Cd.valid("add_node","update_node","set_node_replication"),node_name:Cd.optional(),subscriptions:Hw.array().items({table:Cd.optional(),schema:Cd.optional(),database:Cd.optional(),subscribe:L$.required(),publish:L$.required().custom(ule),start_time:ile.iso()})};function lle(e){return ole.validateBySchema(e,Hw.object(M$))}o(lle,"addUpdateNodeValidator");function ule(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(ule,"checkForFalsy");v$.exports={addUpdateNodeValidator:lle,validationSchema:M$}});var Pd=M((HMe,U$)=>{"use strict";var kw=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},Gw=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};U$.exports={Node:kw,NodeSubscription:Gw}});var B$=M((GMe,x$)=>{"use strict";var dle=(k(),v(K)).OPERATIONS_ENUM,qw=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=dle.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};x$.exports=qw});var Gh=M(($Me,F$)=>{"use strict";var $w=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},Vw=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};F$.exports={RemotePayloadObject:$w,RemotePayloadSubscription:Vw}});var k$=M((KMe,H$)=>{"use strict";var Kw=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};H$.exports=Kw});var q$=M((JMe,G$)=>{"use strict";var fle=k$(),WMe=kt(),zMe=_t(),mle=z(),{getSchemaPath:jMe,getTransactionAuditStorePath:QMe}=At(),{getDatabases:hle}=(Le(),v(ft));G$.exports=ple;async function ple(e){let t=new fle;try{let r=hle()[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){mle.warn(`unable to stat table dbi due to ${r}`)}return t}o(ple,"lmdbGetTableSize")});var V$=M((ZMe,$$)=>{"use strict";var Yw=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};$$.exports=Yw});var Dd=M((ive,z$)=>{"use strict";var Ele=require("fs-extra"),_le=require("path"),dn=require("systeminformation"),Wa=z(),K$=lr(),tve=It(),Ld=(k(),v(K)),gle=q$(),Sle=Ca(),{getThreadInfo:Y$}=st(),qh=ce();qh.initSync();var Tle=V$(),{openEnvironment:rve}=_t(),{getSchemaPath:nve}=At(),{database:sve,databases:Ww}=(Le(),v(ft)),MS;z$.exports={getHDBProcessInfo:Jw,getNetworkInfo:Zw,getDiskInfo:Xw,getMemoryInfo:Qw,getCPUInfo:jw,getTimeInfo:zw,getSystemInformation:eO,systemInformation:Rle,getTableSize:tO,getMetrics:rO};function zw(){return dn.time()}o(zw,"getTimeInfo");async function jw(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await dn.cpu();d.cpu_speed=await dn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:h,rawCurrentloadNice:p,rawCurrentloadSystem:_,rawCurrentloadUser:g,cpus:y,...T}=await dn.currentLoad();return T.cpus=[],y.forEach(R=>{let{rawLoad:I,rawLoadIdle:P,rawLoadIrq:Y,rawLoadNice:te,rawLoadSystem:x,rawLoadUser:$,...j}=R;T.cpus.push(j)}),d.current_load=T,d}catch(e){return Wa.error(`error in getCPUInfo: ${e}`),{}}}o(jw,"getCPUInfo");async function Qw(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await dn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return Wa.error(`error in getMemoryInfo: ${e}`),{}}}o(Qw,"getMemoryInfo");async function Jw(){let e={core:[],clustering:[]};try{let t=await dn.processes(),r;try{r=Number.parseInt(await Ele.readFile(_le.join(qh.get(Ld.CONFIG_PARAMS.ROOTPATH),Ld.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ld.NODE_ERROR_CODES.ENOENT)Wa.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 Wa.error(`error in getHDBProcessInfo: ${t}`),e}}o(Jw,"getHDBProcessInfo");async function Xw(){let e={};try{if(!qh.get(Ld.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await dn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await dn.fsStats();return e.read_write=u,e.size=await dn.fsSize(),e}catch(t){return Wa.error(`error in getDiskInfo: ${t}`),e}}o(Xw,"getDiskInfo");async function Zw(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return qh.get(Ld.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await dn.networkInterfaceDefault(),e.latency=await dn.inetChecksite("google.com"),(await dn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await dn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return Wa.error(`error in getNetworkInfo: ${t}`),e}}o(Zw,"getNetworkInfo");async function eO(){if(MS!==void 0)return MS;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await dn.osInfo();e=c;let l=await dn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,MS=e,MS}catch(t){return Wa.error(`error in getSystemInformation: ${t}`),e}}o(eO,"getSystemInformation");async function tO(){let e=[],t=await Sle.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await gle(n));return e}o(tO,"getTableSize");async function rO(){let e={};for(let t in Ww){let r=e[t]={},n=r.tables={};for(let s in Ww[t])try{let i=Ww[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){Wa.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(rO,"getMetrics");async function W$(){if(qh.get(Ld.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await K$.getNATSReferences(),t=await K$.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(W$,"getNatsStreamInfo");async function Rle(e){let t=new Tle;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await eO(),t.time=zw(),t.cpu=await jw(),t.memory=await Qw(),t.disk=await Xw(),t.network=await Zw(),t.harperdb_processes=await Jw(),t.table_size=await tO(),t.metrics=await rO(),t.threads=await Y$(),t.replication=await W$(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await eO();break;case"time":t.time=zw();break;case"cpu":t.cpu=await jw();break;case"memory":t.memory=await Qw();break;case"disk":t.disk=await Xw();break;case"network":t.network=await Zw();break;case"harperdb_processes":t.harperdb_processes=await Jw();break;case"table_size":t.table_size=await tO();break;case"database_metrics":case"metrics":t.metrics=await rO();break;case"threads":t.threads=await Y$();break;case"replication":t.replication=await W$();break;default:break}return t}o(Rle,"systemInformation")});var Bo=M((uve,X$)=>{"use strict";var yle=Mn(),nO=ie(),Ale=require("util"),Pl=(k(),v(K)),j$=ce();j$.initSync();var ble=FN(),Q$=on(),{Node:ave,NodeSubscription:cve}=Pd(),Ile=Bu(),Nle=B$(),{RemotePayloadObject:wle,RemotePayloadSubscription:Ole}=Gh(),{handleHDBError:Cle,hdbErrors:Ple}=Ee(),{HTTP_STATUS_CODES:Lle,HDB_ERROR_MSGS:Dle}=Ple,Mle=ri(),vle=Dd(),{packageJson:Ule}=Rt(),{getDatabases:xle}=(Le(),v(ft)),lve=Ale.promisify(ble.authorize),Ble=Q$.searchByHash,Fle=Q$.searchByValue;X$.exports={isEmpty:Hle,getNodeRecord:kle,upsertNodeRecord:Gle,buildNodePayloads:qle,checkClusteringEnabled:$le,getAllNodeRecords:Vle,getSystemInfo:Kle,reverseSubscription:J$};function Hle(e){return e==null}o(Hle,"isEmpty");async function kle(e){let t=new Ile(Pl.SYSTEM_SCHEMA_NAME,Pl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Ble(t)}o(kle,"getNodeRecord");async function Gle(e){let t=new Nle(Pl.SYSTEM_SCHEMA_NAME,Pl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return yle.upsert(t)}o(Gle,"upsertNodeRecord");function J$(e){if(nO.isEmpty(e.subscribe)||nO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(J$,"reverseSubscription");function qle(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=nO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=J$(c),h=xle()[l]?.[u],p=new Ole(l,u,d,m,f,c.start_time,h.schemaDefined?h.attributes:void 0);s.push(p)}return new wle(r,t,s,n)}o(qle,"buildNodePayloads");function $le(){if(!j$.get(Pl.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Cle(new Error,Dle.CLUSTERING_NOT_ENABLED,Lle.BAD_REQUEST,void 0,void 0,!0)}o($le,"checkClusteringEnabled");async function Vle(){let e=new Mle(Pl.SYSTEM_SCHEMA_NAME,Pl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Fle(e))}o(Vle,"getAllNodeRecords");async function Kle(){let e=await vle.getSystemInformation();return{hdb_version:Ule.version,node_version:e.node_version,platform:e.platform}}o(Kle,"getSystemInfo")});var sO=M((fve,oV)=>{"use strict";var vS=lr(),Z$=ie(),eV=It(),tV=(k(),v(K)),US=z(),rV=OS(),Yle=Um(),{RemotePayloadObject:Wle}=Gh(),{handleHDBError:nV,hdbErrors:zle}=Ee(),{HTTP_STATUS_CODES:sV}=zle,{NodeSubscription:iV}=Pd();oV.exports=jle;async function jle(e,t){let r;try{r=await vS.request(`${t}.${eV.REQUEST_SUFFIX}`,new Wle(tV.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),US.trace("Response from remote describe all request:",r)}catch(a){US.error(`addNode received error from describe all request to remote node: ${a}`);let c=vS.requestErrorHandler(a,"add_node",t);throw nV(new Error,c,sV.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===eV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw nV(new Error,a,sV.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===tV.SYSTEM_SCHEMA_NAME){await vS.createLocalTableStream(l,c);let p=new iV(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p);continue}let u=Z$.doesSchemaExist(l),d=n[l]!==void 0,f=c?Z$.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(US.trace(`addNode creating schema: ${l}`),await rV.createSchema({operation:"create_schema",schema:l})),!f&&m){US.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new Yle(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await rV.createTable(p)}await vS.createLocalTableStream(l,c);let h=new iV(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h)}return{added:i,skipped:s}}o(jle,"reviewSubscriptions")});var Md={};Ce(Md,{addNodeBack:()=>iO,removeNodeBack:()=>oO,setNode:()=>Zle});async function Zle(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=ui(t)):t=AS(r);let n=(0,cV.validateBySchema)(e,Xle);if(n)throw(0,Fo.handleHDBError)(n,n.message,Jle.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Fo.ClientError("url or hostname is required for remove_node operation");let h=r,p=$t(),_=await p.get(h);if(!_)throw new Fo.ClientError(h+" does not exist");try{await Bh({url:_.url},{operation:G.REMOVE_NODE_BACK,name:_?.subscriptions?.length>0?rt():h},void 0)}catch(g){ns.warn(`Error removing node from target node ${h}, 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 p.delete(h),`Successfully removed '${h}' from cluster`}if(!t)throw new Fo.ClientError("url required for this operation");let s=Fa();if(s==null)throw new Fo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Ps.getReplicationCert)();let h=await(0,Ps.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Ps.createCsr)(),ns.info("Sending CSR to target node:",t)):h&&(c=h.certificate,ns.info("Sending CA named",h.name,"to target node",t))}let l={operation:G.ADD_NODE_BACK,hostname:(0,ja.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,ja.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,ja.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(aV):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let h=aV(e);l.subscribe=h.subscribe,l.publish=h.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 Bh({url:t},l,e)}catch(h){h.message=`Error returned from ${t}: `+h.message,ns.warn("Error adding node:",t,"to cluster:",h),d=h}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(ns.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ps.setCertTable)({name:Qle.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ps.setCertTable)({name:rt(),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),e.shard!==void 0&&(f.shard=e.shard),f.replicates){let h={url:s,ca:c,replicates:!0,subscriptions:null};(0,ja.get)(U.REPLICATION_SHARD)!==void 0&&(h.shard=(0,ja.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(h.authorization=e.authorization),e.start_time&&(h.start_time=e.start_time),await Do(rt(),h)}await Do(u?u.nodeName:f.name??ui(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 iO(e){ns.trace("addNodeBack received request:",e);let t=await(0,Ps.signCertificate)(e),r;e.csr?(r=t.signingCA,ns.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,ns.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,Ps.getReplicationCertAuth)();if(n.replicates){let i={url:Fa(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,ja.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,ja.get)(U.REPLICATION_SHARD)),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Do(rt(),i)}return await Do(e.hostname,n),t.nodeName=rt(),t.usingCA=s?.certificate,ns.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function oO(e){ns.trace("removeNodeBack received request:",e),await $t().delete(e.name)}function aV(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ps,cV,za,ja,ns,Fo,Qle,Jle,Xle,vd=fe(()=>{Ps=w(rs()),cV=w(at()),za=w(require("joi")),ja=w(ce());k();Lh();Al();es();ns=w(z()),Fo=w(Ee()),{pki:Qle}=require("node-forge"),{HTTP_STATUS_CODES:Jle}=Fo.hdbErrors,Xle=za.default.object({hostname:za.default.string(),verify_tls:za.default.boolean(),replicates:za.default.boolean(),subscriptions:za.default.array(),revoked_certificates:za.default.array(),shard:za.default.number()});o(Zle,"setNode");o(iO,"addNodeBack");o(oO,"removeNodeBack");o(aV,"reverseSubscription")});var kS=M((Rve,uV)=>{"use strict";var{handleHDBError:xS,hdbErrors:eue}=Ee(),{HTTP_STATUS_CODES:BS}=eue,{addUpdateNodeValidator:tue}=DS(),FS=z(),HS=(k(),v(K)),lV=It(),rue=ie(),$h=lr(),Vh=Bo(),aO=ce(),nue=sO(),{Node:sue,NodeSubscription:iue}=Pd(),{broadcast:oue}=st(),{setNode:aue}=(vd(),v(Md)),Sve=ce(),Tve=(k(),v(K)),cue="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",lue="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",uue=aO.get(HS.CONFIG_PARAMS.CLUSTERING_NODENAME);uV.exports=due;async function due(e,t=!1){if(FS.trace("addNode called with:",e),aO.get(HS.CONFIG_PARAMS.REPLICATION_URL)||aO.get(HS.CONFIG_PARAMS.REPLICATION_HOSTNAME))return aue(e);Vh.checkClusteringEnabled();let r=tue(e);if(r)throw xS(r,r.message,BS.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Vh.getNodeRecord(n);if(!rue.isEmptyOrZeroLength(f))throw xS(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,BS.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await nue(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=cue,a;let c=Vh.buildNodePayloads(s,uue,HS.OPERATIONS_ENUM.ADD_NODE,await Vh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let h=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new iue(h.schema,h.table,h.publish,h.subscribe))}FS.trace("addNode sending remote payload:",c);let u;try{u=await $h.request(`${n}.${lV.REQUEST_SUFFIX}`,c)}catch(f){FS.error(`addNode received error from request: ${f}`);for(let h=0,p=s.length;h<p;h++){let _=s[h];_.publish=!1,_.subscribe=!1,await $h.updateRemoteConsumer(_,n)}let m=$h.requestErrorHandler(f,"add_node",n);throw xS(new Error,m,BS.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===lV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw xS(new Error,f,BS.INTERNAL_SERVER_ERROR,"error",f)}FS.trace(u);for(let f=0,m=s.length;f<m;f++){let h=s[f];await $h.updateRemoteConsumer(h,n),h.subscribe===!0&&await $h.updateConsumerIterator(h.schema,h.table,n,"start")}let d=new sue(n,l,u.system_info);return await Vh.upsertNodeRecord(d),oue({type:"nats_update"}),i.length>0?a.message=lue:a.message=`Successfully added '${n}' to manifest`,a}o(due,"addNode")});var dO=M((bve,fV)=>{"use strict";var{handleHDBError:cO,hdbErrors:fue}=Ee(),{HTTP_STATUS_CODES:lO}=fue,{addUpdateNodeValidator:mue}=DS(),Kh=z(),GS=(k(),v(K)),dV=It(),Ave=ie(),Yh=lr(),Wh=Bo(),uO=ce(),{cloneDeep:hue}=require("lodash"),pue=sO(),{Node:Eue,NodeSubscription:_ue}=Pd(),{broadcast:gue}=st(),{setNode:Sue}=(vd(),v(Md)),Tue="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Rue="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",yue=uO.get(GS.CONFIG_PARAMS.CLUSTERING_NODENAME);fV.exports=Aue;async function Aue(e){if(Kh.trace("updateNode called with:",e),uO.get(GS.CONFIG_PARAMS.REPLICATION_URL)??uO.get(GS.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Sue(e);Wh.checkClusteringEnabled();let t=mue(e);if(t)throw cO(t,t.message,lO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Wh.getNodeRecord(r);s.length>0&&(n=hue(s));let{added:i,skipped:a}=await pue(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Tue,c;let l=Wh.buildNodePayloads(i,yue,GS.OPERATIONS_ENUM.UPDATE_NODE,await Wh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Kh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Kh.trace("updateNode sending remote payload:",l);let u;try{u=await Yh.request(`${r}.${dV.REQUEST_SUFFIX}`,l)}catch(d){Kh.error(`updateNode received error from request: ${d}`);let f=Yh.requestErrorHandler(d,"update_node",r);throw cO(new Error,f,lO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===dV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw cO(new Error,d,lO.INTERNAL_SERVER_ERROR,"error",d)}Kh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Yh.updateRemoteConsumer(m,r),m.subscribe===!0?await Yh.updateConsumerIterator(m.schema,m.table,r,"start"):await Yh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Eue(r,[],u.system_info)]),await bue(n[0],i,u.system_info),a.length>0?c.message=Rue:c.message=`Successfully updated '${r}'`,c}o(Aue,"updateNode");async function bue(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new _ue(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Wh.upsertNodeRecord(n),gue({type:"nats_update"})}o(bue,"updateNodeTable")});var _V=M((Nve,EV)=>{"use strict";var pV=require("joi"),{string:mV}=pV.types(),Iue=at(),hV=(k(),v(K)),Nue=ce(),wue=It();EV.exports=Oue;function Oue(e){let t=mV.invalid(Nue.get(hV.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(wue.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=pV.object({operation:mV.valid(hV.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Iue.validateBySchema(e,r)}o(Oue,"removeNodeValidator")});var qS=M((Ove,yV)=>{"use strict";var{handleHDBError:gV,hdbErrors:Cue}=Ee(),{HTTP_STATUS_CODES:SV}=Cue,Pue=_V(),zh=z(),TV=Bo(),Lue=ie(),Ud=(k(),v(K)),RV=It(),fO=lr(),mO=ce(),{RemotePayloadObject:Due}=Gh(),{NodeSubscription:Mue}=Pd(),vue=vm(),Uue=ul(),{broadcast:xue}=st(),{setNode:Bue}=(vd(),v(Md)),Fue=mO.get(Ud.CONFIG_PARAMS.CLUSTERING_NODENAME);yV.exports=Hue;async function Hue(e){if(zh.trace("removeNode called with:",e),mO.get(Ud.CONFIG_PARAMS.REPLICATION_URL)??mO.get(Ud.CONFIG_PARAMS.REPLICATION_HOSTNAME))return Bue(e);TV.checkClusteringEnabled();let t=Pue(e);if(t)throw gV(t,t.message,SV.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await TV.getNodeRecord(r);if(Lue.isEmptyOrZeroLength(n))throw gV(new Error,`Node '${r}' was not found.`,SV.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Due(Ud.OPERATIONS_ENUM.REMOVE_NODE,Fue,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await fO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await fO.updateRemoteConsumer(new Mue(d.schema,d.table,!1,!1),r)}catch(f){zh.error(f)}}try{i=await fO.request(`${r}.${RV.REQUEST_SUFFIX}`,s),zh.trace("Remove node reply from remote node:",r,i)}catch(l){zh.error("removeNode received error from request:",l),a=!0}let c=new vue(Ud.SYSTEM_SCHEMA_NAME,Ud.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Uue.deleteRecord(c),xue({type:"nats_update"}),i?.status===RV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(zh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(Hue,"removeNode")});var IV=M((Pve,bV)=>{"use strict";var AV=require("joi"),{string:kue,array:Gue}=AV.types(),que=at(),$ue=DS();bV.exports=Vue;function Vue(e){let t=AV.object({operation:kue.valid("configure_cluster").required(),connections:Gue.items($ue.validationSchema).required()});return que.validateBySchema(e,t)}o(Vue,"configureClusterValidator")});var hO=M((Dve,PV)=>{"use strict";var NV=(k(),v(K)),$S=z(),Kue=ie(),Yue=ce(),Wue=qS(),zue=kS(),jue=Bo(),Que=IV(),{handleHDBError:wV,hdbErrors:Jue}=Ee(),{HTTP_STATUS_CODES:OV}=Jue,Xue="Configure cluster complete.",Zue="Failed to configure the cluster. Check the logs for more details.",ede="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";PV.exports=tde;async function tde(e){$S.trace("configure cluster called with:",e);let t=Que(e);if(t)throw wV(t,t.message,OV.BAD_REQUEST,void 0,void 0,!0);let r=await jue.getAllNodeRecords(),n=[];if(Yue.get(NV.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await CV(Wue,{operation:NV.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}$S.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 CV(zue,f,f.node_name);s.push(m)}$S.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&($S.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Kue.isEmptyOrZeroLength(a))return{message:Xue,connections:c};if(l)return{message:ede,failed_nodes:a,connections:c};throw wV(new Error,Zue,OV.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(tde,"configureCluster");async function CV(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(CV,"functionWrapper")});var vV=M((vve,MV)=>{"use strict";var jh=require("joi"),rde=at(),{validateSchemaExists:LV,validateTableExists:nde,validateSchemaName:DV}=Di(),sde=jh.object({operation:jh.string().valid("purge_stream"),schema:jh.string().custom(LV).custom(DV).optional(),database:jh.string().custom(LV).custom(DV).optional(),table:jh.string().custom(nde).required()});function ide(e){return rde.validateBySchema(e,sde)}o(ide,"purgeStreamValidator");MV.exports=ide});var pO=M((xve,UV)=>{"use strict";var{handleHDBError:ode,hdbErrors:ade}=Ee(),{HTTP_STATUS_CODES:cde}=ade,lde=vV(),ude=lr(),dde=Bo();UV.exports=fde;async function fde(e){e.schema=e.schema??e.database;let t=lde(e);if(t)throw ode(t,t.message,cde.BAD_REQUEST,void 0,void 0,!0);dde.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await ude.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(fde,"purgeStream")});var gO=M((Fve,qV)=>{"use strict";var _O=Bo(),mde=lr(),KS=ce(),xd=(k(),v(K)),Ll=It(),hde=ie(),EO=z(),{RemotePayloadObject:pde}=Gh(),{ErrorCode:xV}=require("nats"),{parentPort:BV}=require("worker_threads"),{onMessageByType:Ede}=st(),{getThisNodeName:_de}=(es(),v(vo)),{requestClusterStatus:gde}=(Lh(),v(cq)),{getReplicationSharedStatus:Sde,getHDBNodeTable:Tde}=(Al(),v(ow)),{CONFIRMATION_STATUS_POSITION:Rde,RECEIVED_VERSION_POSITION:yde,RECEIVED_TIME_POSITION:Ade,SENDING_TIME_POSITION:bde}=(Cw(),v(jq)),FV=KS.get(xd.CONFIG_PARAMS.CLUSTERING_ENABLED),HV=KS.get(xd.CONFIG_PARAMS.CLUSTERING_NODENAME);qV.exports={clusterStatus:Ide,buildNodeStatus:GV};var kV;Ede("cluster-status",async e=>{kV(e)});async function Ide(){if(KS.get(xd.CONFIG_PARAMS.REPLICATION_URL)||KS.get(xd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(BV){BV.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{kV=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=Sde(u,l,a);c.lastCommitConfirmed=VS(d[Rde]),c.lastReceivedRemoteTime=VS(d[yde]),c.lastReceivedLocalTime=VS(d[Ade]),c.sendingMessage=VS(d[bde])}}}else n=gde();n.node_name=_de();let s=Tde().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:HV,is_enabled:FV,connections:[]};if(!FV)return e;let t=await _O.getAllNodeRecords();if(hde.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(GV(t[n],e.connections));return await Promise.allSettled(r),e}o(Ide,"clusterStatus");function VS(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(VS,"asDate");async function GV(e,t){let r=e.name,n=new pde(xd.OPERATIONS_ENUM.CLUSTER_STATUS,HV,void 0,await _O.getSystemInfo()),s,i,a=Ll.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await mde.request(Ll.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Ll.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Ll.CLUSTER_STATUS_STATUSES.CLOSED,EO.error(`Error getting node status from ${r} `,s))}catch(l){EO.warn(`Error getting node status from ${r}`,l),l.code===xV.NoResponders?a=Ll.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===xV.Timeout?a=Ll.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Ll.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Nde(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==xd.PRE_4_0_0_VERSION&&await _O.upsertNodeRecord(l)}catch(l){EO.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(GV,"buildNodeStatus");function Nde(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Nde,"NodeStatusObject")});var TO=M((kve,$V)=>{"use strict";var{handleHDBError:wde,hdbErrors:Ode}=Ee(),{HTTP_STATUS_CODES:Cde}=Ode,Pde=lr(),Lde=Bo(),SO=ie(),YS=require("joi"),Dde=at(),Mde=2e3,vde=YS.object({timeout:YS.number().min(1),connected_nodes:YS.boolean(),routes:YS.boolean()});$V.exports=Ude;async function Ude(e){Lde.checkClusteringEnabled();let t=Dde.validateBySchema(e,vde);if(t)throw wde(t,t.message,Cde.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||SO.autoCastBoolean(n),a=s===void 0||SO.autoCastBoolean(s),c={nodes:[]},l=await Pde.getServerList(r??Mde),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,h=l[d].data;if(m.name.endsWith("-hub")){let p={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(p.connected_nodes=[],u[m.name]&&u[m.name].forEach(_=>{p.connected_nodes.includes(_.name.slice(0,-4))||p.connected_nodes.push(_.name.slice(0,-4))})),a&&(p.routes=h.cluster?.urls?h.cluster?.urls.map(_=>({host:_.split(":")[0],port:SO.autoCast(_.split(":")[1])})):[]),c.nodes.push(p)}}return c}o(Ude,"clusterNetwork")});var WV=M((qve,YV)=>{"use strict";var RO=require("joi"),VV=at(),{routeConstraints:KV}=Fy();YV.exports={setRoutesValidator:xde,deleteRoutesValidator:Bde};function xde(e){let t=RO.object({server:RO.valid("hub","leaf"),routes:KV.required()});return VV.validateBySchema(e,t)}o(xde,"setRoutesValidator");function Bde(e){let t=RO.object({routes:KV.required()});return VV.validateBySchema(e,t)}o(Bde,"deleteRoutesValidator")});var WS=M((Vve,e1)=>{"use strict";var Ho=yt(),yO=ie(),Ls=(k(),v(K)),Bd=ce(),zV=WV(),{handleHDBError:jV,hdbErrors:Fde}=Ee(),{HTTP_STATUS_CODES:QV}=Fde,JV="cluster routes successfully set",XV="cluster routes successfully deleted";e1.exports={setRoutes:kde,getRoutes:Gde,deleteRoutes:qde};function Hde(e){let t=Ho.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=yO.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"?Ho.updateConfigValue(Ls.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Ho.updateConfigValue(Ls.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:JV,set:i,skipped:s}}o(Hde,"setRoutesNats");function kde(e){let t=zV.setRoutesValidator(e);if(t)throw jV(t,t.message,QV.BAD_REQUEST,void 0,void 0,!0);if(Bd.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED))return Hde(e);let r=[],n=[],s=Bd.get(Ls.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{ZV(s,i)?n.push(i):(s.push(i),r.push(i))}),Ho.updateConfigValue(Ls.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:JV,set:r,skipped:n}}o(kde,"setRoutes");function ZV(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(ZV,"existsInArray");function Gde(){if(Bd.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Ho.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Bd.get(Ls.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Gde,"getRoutes");function qde(e){let t=zV.deleteRoutesValidator(e);if(t)throw jV(t,t.message,QV.BAD_REQUEST,void 0,void 0,!0);if(Bd.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED))return $de(e);let r=[],n=[],s=Bd.get(Ls.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{ZV(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Ho.updateConfigValue(Ls.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:XV,deleted:r,skipped:n}}o(qde,"deleteRoutes");function $de(e){let t=Ho.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,h=r.length;m<h;m++){let p=r[m];if(d.host===p.host&&d.port===p.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let h=0,p=n.length;h<p;h++){let _=n[h];if(d.host===_.host&&d.port===_.port){n.splice(h,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=yO.isEmptyOrZeroLength(r)?null:r,Ho.updateConfigValue(Ls.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=yO.isEmptyOrZeroLength(n)?null:n,Ho.updateConfigValue(Ls.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:XV,deleted:s,skipped:i}}o($de,"deleteRoutesNats")});var r1=M((Yve,t1)=>{"use strict";var Qh=require("alasql"),Dl=require("recursive-iterator"),mi=z(),Vde=ie(),Jh=(k(),v(K)),AO=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Yde(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=>Jh.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=>!Jh.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][Jh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Kde(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!Jh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Qh.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Kde(e){return e.filter(t=>t[Jh.PERMS_CRUD_ENUM.READ])}o(Kde,"filterReadRestrictedAttrs");function Yde(e,t,r,n,s){Wde(e,t,r,n,s)}o(Yde,"interpretAST");function Xh(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(Xh,"addSchemaTableToMap");function Wde(e,t,r,n,s){if(!e){mi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Qh.yy.Insert?Jde(e,t,r):e instanceof Qh.yy.Select?zde(e,t,r,n,s):e instanceof Qh.yy.Update?jde(e,t,r):e instanceof Qh.yy.Delete?Qde(e,t,r):mi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Wde,"getRecordAttributesAST");function zde(e,t,r,n,s){if(!e){mi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Vde.isEmptyOrZeroLength(i)){mi.error("No schema specified");return}e.from.forEach(c=>{Xh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Xh(c.table,t,r,n,s)});let a=new Dl(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{mi.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 Dl(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{mi.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 Dl(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{mi.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 Dl(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{mi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(zde,"getSelectAttributes");function jde(e,t,r){if(!e){mi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Dl(e.columns),s=e.table.databaseid;Xh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&bO(e.table.tableid,s,i.columnid,t,r)}o(jde,"getUpdateAttributes");function Qde(e,t,r){if(!e){mi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Dl(e.where),s=e.table.databaseid;Xh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&bO(e.table.tableid,s,i.columnid,t,r)}o(Qde,"getDeleteAttributes");function Jde(e,t,r){if(!e){mi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Dl(e.columns),s=e.into.databaseid;Xh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&bO(e.into.tableid,s,i.columnid,t,r)}o(Jde,"getInsertAttributes");function bO(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(bO,"pushAttribute");t1.exports=AO});var s1=M((zve,n1)=>{"use strict";var zS=(k(),v(K)),jS=class{static{o(this,"BaseLicense")}constructor(t=0,r=zS.RAM_ALLOCATION_ENUM.DEFAULT,n=zS.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},IO=class extends jS{static{o(this,"ExtendedLicense")}constructor(t=0,r=zS.RAM_ALLOCATION_ENUM.DEFAULT,n=zS.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};n1.exports={BaseLicense:jS,ExtendedLicense:IO}});var kd=M((Qve,u1)=>{"use strict";var Hd=require("fs-extra"),QS=(cg(),v(ag)),o1=require("crypto"),Xde=require("moment"),Zde=require("uuid").v4,fn=z(),wO=require("path"),efe=ie(),Ml=(k(),v(K)),{totalmem:i1}=require("os"),tfe=s1().ExtendedLicense,Fd="invalid license key format",rfe="061183",nfe="mofi25",sfe="aes-256-cbc",ife=16,ofe=32,a1=ce(),{resolvePath:c1}=yt();a1.initSync();var NO;u1.exports={validateLicense:l1,generateFingerPrint:cfe,licenseSearch:PO,getLicense:dfe,checkMemoryLimit:ffe};function OO(){return wO.join(a1.getHdbBasePath(),Ml.LICENSE_KEY_DIR_NAME,Ml.LICENSE_FILE_NAME)}o(OO,"getLicenseDirPath");function afe(){let e=OO();return c1(wO.join(e,Ml.LICENSE_FILE_NAME))}o(afe,"getLicenseFilePath");function CO(){let e=OO();return c1(wO.join(e,Ml.REG_KEY_FILE_NAME))}o(CO,"getFingerPrintFilePath");async function cfe(){let e=CO();try{return await Hd.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await lfe();throw fn.error(`Error writing fingerprint file to ${e}`),fn.error(t),new Error("There was an error generating the fingerprint")}}o(cfe,"generateFingerPrint");async function lfe(){let e=Zde(),t=QS.hash(e,QS.HASH_FUNCTION.MD5),r=CO();try{await Hd.mkdirp(OO()),await Hd.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fn.error(`Error writing fingerprint file to ${r}`),fn.error(n),new Error("There was an error generating the fingerprint")}return t}o(lfe,"writeFingerprint");function l1(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Ml.RAM_ALLOCATION_ENUM.DEFAULT,version:Ml.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fn.error("empty license key passed to validate."),r;let n=CO(),s=!1;try{s=Hd.statSync(n)}catch(i){fn.error(i)}if(s){let i;try{i=Hd.readFileSync(n,"utf8")}catch{fn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(nfe),c=a[1];c=Buffer.concat([Buffer.from(c)],ife);let l=Buffer.concat([Buffer.from(i)],ofe),u=o1.createDecipheriv(sfe,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(a[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let h=ufe(a[0],i);if(h)d=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fd),fn.error(Fd),new Error(Fd)}let f;if(isNaN(d))try{f=JSON.parse(d),r.version=f.version,r.exp_date=f.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),f.ram_allocation&&(r.ram_allocation=f.ram_allocation)}catch{throw console.error(Fd),fn.error(Fd),new Error(Fd)}else r.exp_date=d;r.exp_date<Xde().valueOf()&&(r.valid_date=!1),QS.validate(a[1],`${rfe}${i}${t}`,QS.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||fn.error("Invalid licence"),r}o(l1,"validateLicense");function ufe(e,t){try{let r=o1.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fn.warn("Check old license failed")}}o(ufe,"checkOldLicense");function PO(){let e=new tfe,t=[];try{t=Hd.readFileSync(afe(),"utf-8").split(`\r
18
- `)}catch(r){r.code==="ENOENT"?fn.debug("no license file found"):fn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(efe.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=l1(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){fn.error("There was an error parsing the license string."),fn.error(s),e.ram_allocation=Ml.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return NO=e,e}o(PO,"licenseSearch");async function dfe(){return NO||await PO(),NO}o(dfe,"getLicense");function ffe(){let e=PO().ram_allocation,t=process.constrainedMemory?.()||i1();if(t=Math.round(Math.min(t,i1())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}o(ffe,"checkMemoryLimit")});var MO=M((Xve,h1)=>{var JS=kd(),d1=require("chalk"),ss=z(),f1=require("prompt"),{promisify:mfe}=require("util"),LO=(k(),v(K)),hfe=require("fs-extra"),pfe=require("path"),Efe=ie(),{packageJson:_fe}=Rt(),m1=ce();m1.initSync();var gfe=require("moment"),Sfe=mfe(f1.get),Tfe=pfe.join(m1.getHdbBasePath(),LO.LICENSE_KEY_DIR_NAME,LO.LICENSE_FILE_NAME,LO.LICENSE_FILE_NAME);h1.exports={getFingerprint:yfe,setLicense:Rfe,parseLicense:DO,register:Afe,getRegistrationInfo:Ife};async function Rfe(e){if(e&&e.key&&e.company){try{ss.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await DO(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ss.error(r),ss.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Rfe,"setLicense");async function yfe(){let e={};try{e=await JS.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ss.error(r),ss.error(t),new Error(r)}return e}o(yfe,"getFingerprint");async function DO(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ss.info("Validating license input...");let r=JS.validateLicense(e,t);if(ss.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ss.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ss.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ss.info("writing license to disk"),await hfe.writeFile(Tfe,JSON.stringify({license_key:e,company:t}))}catch(n){throw ss.error("Failed to write License"),n}return"Registration successful."}o(DO,"parseLicense");async function Afe(){let e=await bfe();return DO(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(Afe,"register");async function bfe(){let e=await JS.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:d1.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:d1.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{f1.start()}catch(n){ss.error(n)}let r;try{r=await Sfe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(bfe,"promptForRegistration");async function Ife(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await JS.getLicense()}catch(r){throw ss.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Efe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=_fe.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=gfe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(Ife,"getRegistrationInfo")});var E1=M((eUe,p1)=>{"use strict";var Nfe=It(),vO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,h,p){this.port=t,a===null&&(a=void 0),this.server_name=r+Nfe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:h},HDB:{users:p}},this.system_account="SYS"}};p1.exports=vO});var S1=M((rUe,g1)=>{"use strict";var _1=It(),UO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+_1.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+_1.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};g1.exports=UO});var R1=M((sUe,T1)=>{"use strict";var xO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};T1.exports=xO});var A1=M((oUe,y1)=>{"use strict";var wfe=It(),BO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+wfe.SERVER_SUFFIX.ADMIN,this.password=r}};y1.exports=BO});var tT=M((cUe,N1)=>{"use strict";var vl=require("path"),Ul=require("fs-extra"),Ofe=E1(),Cfe=S1(),Pfe=R1(),Lfe=A1(),FO=Jn(),qd=ie(),Un=yt(),ZS=(k(),v(K)),Zh=It(),{CONFIG_PARAMS:Zt}=ZS,$d=z(),ep=ce(),b1=xi(),HO=lr(),Dfe=rs(),Gd="clustering",Mfe=1e4,I1=50;N1.exports={generateNatsConfig:Ufe,removeNatsConfig:xfe,getHubConfigPath:vfe};function vfe(){let e=ep.get(Zt.ROOTPATH);return vl.join(e,Gd,Zh.NATS_CONFIG_FILES.HUB_SERVER)}o(vfe,"getHubConfigPath");async function Ufe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=ep.get(Zt.ROOTPATH);Ul.ensureDirSync(vl.join(r,"clustering","leaf")),ep.initSync();let n=Un.getConfigFromFile(Zt.CLUSTERING_TLS_CERT_AUTH),s=Un.getConfigFromFile(Zt.CLUSTERING_TLS_PRIVATEKEY),i=Un.getConfigFromFile(Zt.CLUSTERING_TLS_CERTIFICATE);!await Ul.exists(i)&&!await Ul.exists(!n)&&await Dfe.createNatsCerts();let a=vl.join(r,Gd,Zh.PID_FILES.HUB),c=vl.join(r,Gd,Zh.PID_FILES.LEAF),l=Un.getConfigFromFile(Zt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=vl.join(r,Gd,Zh.NATS_CONFIG_FILES.HUB_SERVER),d=vl.join(r,Gd,Zh.NATS_CONFIG_FILES.LEAF_SERVER),f=Un.getConfigFromFile(Zt.CLUSTERING_TLS_INSECURE),m=Un.getConfigFromFile(Zt.CLUSTERING_TLS_VERIFY),h=Un.getConfigFromFile(Zt.CLUSTERING_NODENAME),p=Un.getConfigFromFile(Zt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await HO.checkNATSServerInstalled()||eT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let _=await FO.listUsers(),g=Un.getConfigFromFile(Zt.CLUSTERING_USER),y=await FO.getClusterUser();(qd.isEmpty(y)||y.active!==!0)&&eT(`Invalid cluster user '${cluster_username}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await XS(Zt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await XS(Zt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await XS(Zt.CLUSTERING_HUBSERVER_NETWORK_PORT),await XS(Zt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],R=[];for(let[j,V]of _.entries())V.role?.role===ZS.ROLE_TYPES_ENUM.CLUSTER_USER&&V.active&&(T.push(new Lfe(V.username,b1.decrypt(V.hash))),R.push(new Pfe(V.username,b1.decrypt(V.hash))));let I=[],{hub_routes:P}=Un.getClusteringRoutes();if(!qd.isEmptyOrZeroLength(P))for(let j of P)I.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${j.host}:${j.port}`);let Y=new Ofe(Un.getConfigFromFile(Zt.CLUSTERING_HUBSERVER_NETWORK_PORT),h,a,i,s,n,f,m,p,Un.getConfigFromFile(Zt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Un.getConfigFromFile(Zt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,T,R);n==null&&(delete Y.tls.ca_file,delete Y.leafnodes.tls.ca_file),t=qd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ZS.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await Ul.writeJson(u,Y),$d.trace(`Hub server config written to ${u}`));let te=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,x=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,$=new Cfe(Un.getConfigFromFile(Zt.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,c,l,[te],[x],T,R,i,s,n,f);n==null&&delete $.tls.ca_file,(t===void 0||t===ZS.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await Ul.writeJson(d,$),$d.trace(`Leaf server config written to ${d}`))}o(Ufe,"generateNatsConfig");async function XS(e){let t=ep.get(e);return qd.isEmpty(t)&&eT(`port undefined for '${e}'`),await qd.isPortTaken(t)&&eT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(XS,"isPortAvailable");function eT(e){let t=`Error generating clustering config: ${e}`;$d.error(t),console.error(t),process.exit(1)}o(eT,"generateNatsConfigError");async function xfe(e){let{port:t,config_file:r}=HO.getServerConfig(e),{username:n,decrypt_hash:s}=await FO.getClusterUser(),i=0,a=2e3;for(;i<I1;){try{let d=await HO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){$d.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=I1)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&$d.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await qd.asyncSetTimeout(u)}let c="0".repeat(Mfe),l=vl.join(ep.get(Zt.ROOTPATH),Gd,r);await Ul.writeFile(l,c),await Ul.remove(l),$d.notify(e,"started.")}o(xfe,"removeNatsConfig")});var qO={};Ce(qO,{compactOnStart:()=>Bfe,copyDb:()=>D1});async function Bfe(){Qa.notify("Running compact on start"),console.log("Running compact on start");let e=(0,kO.get)(U.ROOTPATH),t=new Map,r=it();(0,GO.updateConfigValue)(U.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,rT.join)(e,"backup",n+".mdb"),a=(0,rT.join)(e,Cc,n+"-copy.mdb"),c=0;try{c=await w1(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Qa.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await D1(n,a),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{Zu()}catch(n){Qa.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,rT.join)(e,Cc,`${n}-copy.mdb-lock`));try{Zu()}catch(n){Qa.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Qa.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,GO.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,xl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw Zu(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await w1(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
16
+ `,"")}o(YG,"runCommand");async function oae(){try{await xoe.access(JN)}catch{return!1}let e=await YG(`${JN} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Boe.eq(t,sae)}o(oae,"checkNATSServerInstalled");async function rw(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let a=await VG.getClusterUser();if(Al(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}li.trace("create nats connection called");let i=await joe({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xr.get(Qe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),li.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(a=>{a&&li.error("Error with Nats client connection, connection closed",a),i===un&&WG()}),i}o(rw,"createConnection");function WG(){un=void 0,Tl=void 0,Rl=void 0,yl=void 0}o(WG,"clearClientCache");async function aae(){un&&(await un.drain(),un=void 0,Tl=void 0,Rl=void 0,yl=void 0)}o(aae,"closeConnection");var un,yl;async function Ih(){return yl||(yl=rw(xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),un=await yl),un||yl}o(Ih,"getConnection");async function Nh(){if(Tl)return Tl;Al(un)&&await Ih();let{domain:e}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Al(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Tl=await un.jetstreamManager({domain:e,timeout:6e4}),Tl}o(Nh,"getJetStreamManager");async function zG(){if(Rl)return Rl;Al(un)&&await Ih();let{domain:e}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Al(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Rl=un.jetstream({domain:e,timeout:6e4}),Rl}o(zG,"getJetStream");async function $i(){let e=un||await Ih(),t=Tl||await Nh(),r=Rl||await zG();return{connection:e,jsm:t,js:r}}o($i,"getNATSReferences");async function cae(e){let t=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await VG.getClusterUser(),s=await rw(t,r,n),i=tw(),a=s.subscribe(i),c=[],l,u=(async()=>{for await(let d of a){let f=KG.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 tS.asyncSetTimeout(e),await a.drain(),await s.close(),await u,c}o(cae,"getServerList");async function nw(e,t){let{jsm:r}=await $i(),n=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Qoe.File,retention:Joe.Limits,subjects:t,discard:Xoe.Old,maxMsgs:s,maxBytes:i,maxAge:n})}o(nw,"createLocalStream");async function jG(){let{jsm:e}=await $i(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}o(jG,"listStreams");async function lae(e){let{jsm:t}=await $i();await t.streams.delete(e)}o(lae,"deleteLocalStream");async function uae(e){let{connection:t}=await $i(),r=[],n=tw(),s=t.subscribe(n),i=(async()=>{for await(let a of s)r.push(KG.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}o(uae,"listRemoteStreams");async function dae(e,t=void 0,r=void 0){let{jsm:n,js:s}=await $i(),i=kG(),a={durable_name:i,ack_policy:ZN.Explicit};t&&(a.deliver_policy=ew.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let u=[];for await(let d of l){let f=XN(d.data),m={nats_timestamp:d.info.timestampNanos,nats_sequence:d.info.streamSequence,entry:f};if(d.headers&&(m.origin=d.headers.get(Wr.MSG_HEADERS.ORIGIN)),u.push(m),d.ack(),d.info.pending===0)break}return await c.delete(),u}o(dae,"viewStream");async function*fae(e,t=void 0,r=void 0){let{jsm:n,js:s}=await $i(),i=kG(),a={durable_name:i,ack_policy:ZN.Explicit};t&&(a.deliver_policy=ew.StartTime,a.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,a);let c=await s.consumers.get(e,i),l=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let u of l){let d=XN(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(Wr.MSG_HEADERS.ORIGIN)),yield m}if(u.ack(),u.info.pending===0)break}await c.delete()}o(fae,"viewStreamIterator");async function mae(e,t,r,n){li.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=QG(n,r);let{js:s}=await $i(),i=await nS(),a=`${e}.${i}`,c=await rae(()=>n instanceof Uint8Array?n:$G.encode(n));try{li.trace(`publishToStream publishing to subject: ${a}`),tae(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(a,c,{headers:r})}catch(l){if(l.code&&l.code.toString()==="503")return XG(async()=>{try{await s.publish(a,c,{headers:r})}catch{if(l.code&&l.code.toString()==="503"){li.trace(`publishToStream creating stream: ${t}`);let d=a.split(".");d[2]="*",await nw(t,[a]),await s.publish(a,c,{headers:r})}else throw l}});throw l}}o(mae,"publishToStream");function QG(e,t){t===void 0&&(t=eae());let r=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Wr.MSG_HEADERS.ORIGIN)&&r&&t.append(Wr.MSG_HEADERS.ORIGIN,r),t}o(QG,"addNatsMsgHeader");function fd(e){e=e.toLowerCase();let t=bh.join(xr.get(Qe.CONFIG_PARAMS.ROOTPATH),nae);if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Al(QN)&&(QN={port:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wr.SERVER_SUFFIX.HUB,config_file:Wr.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:bh.join(t,Wr.PID_FILES.HUB),hdbNatsPath:t}),QN;if(e===Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Al(jN)&&(jN={port:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wr.SERVER_SUFFIX.LEAF,config_file:Wr.NATS_CONFIG_FILES.LEAF_SERVER,domain:yh.getConfigFromFile(Qe.CONFIG_PARAMS.CLUSTERING_NODENAME)+Wr.SERVER_SUFFIX.LEAF,pid_file_path:bh.join(t,Wr.PID_FILES.LEAF),hdbNatsPath:t}),jN;li.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(fd,"getServerConfig");async function JG(e,t,r,n){try{await e.consumers.add(t,{ack_policy:ZN.Explicit,durable_name:r,deliver_policy:ew.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}o(JG,"createConsumer");async function hae(e,t,r){await e.consumers.delete(t,r)}o(hae,"removeConsumer");function pae(e){return e.split(".")[1]}o(pae,"extractServerName");async function Eae(e,t,r=6e4,n=tw()){if(!tS.isObject(t))throw new Error("data param must be an object");let s=$G.encode(t),{connection:i}=await $i(),a={timeout:r};n&&(a.reply=n,a.noMux=!0);let c=await i.request(e,s,a);return XN(c.data)}o(Eae,"request");function sw(e){return new Promise(async(t,r)=>{let n=Goe(JN,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",a=>{r(a)}),n.stdout.on("data",a=>{i+=a.toString()}),n.stderr.on("data",a=>{s+=a.toString()}),n.stderr.on("close",a=>{s&&r(s),t(i)})})}o(sw,"reloadNATS");async function _ae(){let{pid_file_path:e}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await sw(e)}o(_ae,"reloadNATSHub");async function gae(){let{pid_file_path:e}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await sw(e)}o(gae,"reloadNATSLeaf");function Sae(e,t,r){let n;switch(e.code){case HG.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case HG.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}o(Sae,"requestErrorHandler");async function Tae(e,t){let r=t+Wr.SERVER_SUFFIX.LEAF,{connection:n}=await $i(),{jsm:s}=await Oae(r),{schema:i,table:a}=e,c=rS.createNatsTableStreamName(i,a),l=e.start_time?e.start_time:new Date(Date.now()).toISOString();await XG(async()=>{if(e.subscribe===!0)await JG(s,c,n.info.server_name,l);else try{await hae(s,c,n.info.server_name)}catch(u){li.trace(u)}})}o(Tae,"updateRemoteConsumer");async function Rae(e,t,r,n){let s=rS.createNatsTableStreamName(e,t),i=r+Wr.SERVER_SUFFIX.LEAF,a={type:Qe.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!qG&&Woe()<xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=zN();await c(a)}await Koe(a),n==="stop"&&await tS.asyncSetTimeout(1e3)}o(Rae,"updateConsumerIterator");function XG(e){return Voe.writeTransaction(Qe.SYSTEM_SCHEMA_NAME,Qe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(XG,"exclusiveLock");async function ZG(e,t){let r=rS.createNatsTableStreamName(e,t),n=await nS(),s=Iae(e,t,n);await nw(r,[s])}o(ZG,"createLocalTableStream");async function yae(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await ZG(n,s)}}o(yae,"createTableStreams");async function eq(e,t,r=void 0){if(xr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=rS.createNatsTableStreamName(e,t),{domain:s}=fd(Qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Ih()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")li.warn(n);else throw n}}o(eq,"purgeTableStream");async function Aae(e,t){if(xr.get(Qe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await eq(e,t[r])}o(Aae,"purgeSchemaTableStreams");async function bae(e){return(await Nh()).streams.info(e)}o(bae,"getStreamInfo");function Iae(e,t,r){return`${Wr.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(Iae,"createSubjectName");async function nS(){if(Ah)return Ah;if(Ah=(await Nh())?.nc?.info?.server_name,Ah===void 0)throw new Error("Unable to get jetstream manager server name");return Ah}o(nS,"getJsmServerName");async function Nae(){let e=await Nh(),t=await nS(),r=await jG();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let a=wae(n),c=i.split(".");if(c[c.length-1]===t&&!a||s.name==="__HARPERDB_WORK_QUEUE__")continue;let u=i.split(".");u[u.length-1]=t;let d=u.join(".");li.trace(`Updating stream subject name from: ${i} to: ${d}`),s.subjects[0]=d,await e.streams.update(s.name,s)}}o(Nae,"updateLocalStreams");function wae(e){let{config:t}=e,r=!1,n=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xr.get(Qe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(wae,"updateStreamLimits");async function Oae(e){let t,r;try{t=await un.jetstream({domain:e}),r=await un.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw li.error("Unable to connect to:",e),n}return{js:t,jsm:r}}o(Oae,"connectToRemoteJS")});function iw(e){let t=e.get(sS),r=t?(0,md.unpack)(t):null;r||(r={remoteNameToId:{}});let n=rt(),s=!1;r.nodeName=rt();let i=r.remoteNameToId;if(i[n]!==0){let a=0,c;for(let l in i){let u=i[l];u===0?c=l:u>a&&(a=u)}if(c){a++,i[c]=a;let l=[Symbol.for("seq"),a];e.rootStore.dbisDb.transactionSync(()=>{e.rootStore.dbisDb.get(l)||e.rootStore.dbisDb.putSync(l,{seqId:Oh(e)??1,nodes:[]})})}i[n]=0,e.putSync(sS,(0,md.pack)(r))}return r}function wh(e){return iw(e).remoteNameToId}function nq(e,t){let r=iw(t),n=r.remoteNameToId,s=new Map,i=!1;for(let a in e){let c=e[a],l=n[a];if(l==null){let u=0;for(let d in n){let f=n[d];f>u&&(u=f)}l=u+1,n[a]=l,i=!0}s.set(c,l)}return i&&t.putSync(sS,(0,md.pack)(r)),s}function iS(e,t){let r=iw(t),n=r.remoteNameToId,s=n[e];if(s==null){let i=0;for(let a in n){let c=n[a];c>i&&(i=c)}s=i+1,n[e]=s,t.putSync(sS,(0,md.pack)(r))}return rq.trace?.("The remote node name map",e,n,s),s}var rq,md,sS,ow=fe(()=>{rq=w(Ni());es();md=require("msgpackr"),sS=Symbol.for("remote-ids");o(iw,"getIdMappingRecord");o(wh,"exportIdMapping");o(nq,"remoteToLocalNodeId");o(iS,"getIdOfRemoteNode")});var aw={};Ce(aw,{commitsAwaitingReplication:()=>pd,getHDBNodeTable:()=>$t,getReplicationSharedStatus:()=>Ed,iterateRoutes:()=>Ph,shouldReplicateToNode:()=>Ch,subscribeToNodeUpdates:()=>_d});function $t(){return sq||(sq=et({table:"hdb_nodes",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"url"},{attribute:"routes"},{attribute:"ca"},{attribute:"ca_info"},{attribute:"replicates"},{attribute:"revoked_certificates"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]}))}function Ed(e,t,r,n){return new Float64Array(e.getUserSharedBuffer(["replicated",t,r],new ArrayBuffer(48),n&&{callback:n}))}function _d(e){$t().subscribe({}).then(async t=>{for await(let r of t){let n=r?.value?.name;cq.debug?.("adding node",n,"on node",rt()," on process",process.pid),server.nodes=server.nodes.filter(i=>i.name!==n),r.type==="put"&&n!==rt()&&(r.value?server.nodes.push(r.value):console.error("Invalid node update event",r));let s=new Map;for await(let i of $t().search({}))if(i.shard!=null){let a=s.get(i.shard);a||s.set(i.shard,a=[]),a.push(i)}server.shards=s,(r.type==="put"||r.type==="delete")&&e(r.value,r.id)}})}function Ch(e,t){return(e.replicates===!0||e.replicates?.sends)&&databases[t]&&$t().primaryStore.get(rt())?.replicates||e.subscriptions?.some(r=>(r.database||r.schema)===t&&r.subscribe)}function Cae(){_d(e=>{Fa({},(t,r)=>{let n=e.name,s=iq.get(n);if(s||iq.set(n,s=new Map),s.has(r))return;let i;for(let a in t)if(i=t[a].auditStore,i)break;if(i){let a=Ed(i,r,n,()=>{let c=a[0],l=a.lastTime;for(let{txnTime:u,onConfirm:d}of pd.get(r)||[])u>l&&u<=c&&d();a.lastTime=c});a.lastTime=0,s.set(r,a)}})})}function*Ph(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=hd.default.get(U.REPLICATION_SECUREPORT)??(!hd.default.get(U.REPLICATION_PORT)&&hd.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),i;(i=n.match(/:(\d+)$/)?.[1])?n=n.slice(0,-i[0].length-1):t.port?i=t.port:i=s||hd.default.get(U.REPLICATION_PORT)||hd.default.get(U.OPERATIONSAPI_NETWORK_PORT);let a=i?.lastIndexOf?.(":");a>0&&(i=+i.slice(a+1).replace(/[\[\]]/g,"")),r=(s?"wss://":"ws://")+n+":"+i}if(!r){oq.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 oq,aq,hd,cq,sq,iq,pd,bl=fe(()=>{Le();es();Qf();oq=require("worker_threads"),aq=w(Ee()),hd=w(ce());k();cq=w(Ni());server.nodes=[];o($t,"getHDBNodeTable");o(Ed,"getReplicationSharedStatus");o(_d,"subscribeToNodeUpdates");o(Ch,"shouldReplicateToNode");iq=new Map;ov((e,t,r)=>{if(r>server.nodes.length)throw new aq.ClientError(`Cannot confirm replication to more nodes (${r}) than are in the network (${server.nodes.length})`);pd||(pd=new Map,Cae());let n=pd.get(e);return n||(n=[],pd.set(e,n)),new Promise(s=>{let i=0;n.push({txnTime:t,onConfirm:o(()=>{++i===r&&s()},"onConfirm")})})});o(Cae,"startSubscriptionToReplications");o(Ph,"iterateRoutes")});var fq={};Ce(fq,{connectedToNode:()=>Il,disconnectedFromNode:()=>Td,ensureNode:()=>Do,requestClusterStatus:()=>dq,startOnMainThread:()=>lw});async function lw(e){let t=0,r=it();for(let i of Object.getOwnPropertyNames(r)){let a=r[i];for(let c in a){let l=a[c];if(l.auditStore){oS.set(i,Oh(l.auditStore));break}}}Vi.whenThreadsStarted.then(async()=>{let i=[];for await(let l of r.system.hdb_nodes?.search([])||[])i.push(l);let a=rt();function c(){let l=$t().primaryStore.get(a);if(l!==null){let u=e.url??Ha();if(l===void 0||l.url!==u||l.shard!==e.shard)return Do(a,{name:a,url:u,shard:e.shard,replicates:!0})}}o(c,"ensureThisNode"),$t().primaryStore.get(a)&&c();for(let l of Ph(e))try{let u=!l.subscriptions;if(u&&await c(),u&&l.replicates==null&&(l.replicates=!0),i.find(d=>d.url===l.url))continue;s(l)}catch(u){console.error(u)}_d(s)});let n;function s(i,a=i?.name){let c=rt()&&a===rt()||Ha()&&i?.url===Ha();if(c){let f=!!i?.replicates;if(n!==void 0&&n!==f)for(let m of $t().search([]))m.replicates&&m.name!==a&&s(m,m.name);n=f}if(ut.trace("Setting up node replication for",i),!i){for(let[f,m]of Lo){let h;for(let[p,{worker:_,nodes:g}]of m){let y=g[0];if(y&&y.name==a){h=!0;for(let[T,{worker:R}]of m)m.delete(T),ut.warn("Node was deleted, unsubscribing from node",a,T,f),R?.postMessage({type:"unsubscribe-from-node",node:a,database:T,url:f});break}}if(h){Lo.get(f).iterator.remove(),Lo.delete(f);return}}return}if(c)return;if(!i.url){ut.info(`Node ${i.name} is missing url`);return}let l=Lo.get(i.url);if(l&&l.iterator.remove(),!(i.replicates===!0||i.replicates?.sends)&&!i.subscriptions?.length&&!l)return;if(ut.info(`Added node ${i.name} at ${i.url} for process ${rt()}`),i.replicates&&i.subscriptions&&(i={...i,subscriptions:null}),i.name){for(let[f,m]of gd)if(i.url===m.url){gd.delete(f);break}gd.set(i.name,i)}let u=it();if(l||(l=new Map,Lo.set(i.url,l)),l.iterator=Fa(e,(f,m,h)=>{h?d(m,!0):d(m,!1)}),i.subscriptions)for(let f of i.subscriptions){let m=f.database||f.schema;u[m]||(ut.warn(`Database ${m} not found for node ${i.name}, making a subscription anyway`),d(m,!1))}function d(f,m){ut.trace("Setting up replication for database",f,"on node",i.name);let h=l.get(f),p,_=[{replicateByDefault:m,...i}];oS.has(f)&&(_.push({replicateByDefault:m,name:rt(),startTime:oS.get(f),endTime:Date.now(),replicates:!0}),oS.delete(f));let g=Ch(i,f),y=Vi.workers.filter(T=>T.name==="http");if(h?(p=h.worker,h.nodes=_):g&&(t=t%y.length,p=y[t++],l.set(f,{worker:p,nodes:_,url:i.url}),p?.on("exit",()=>{l.get(f)?.worker===p&&(l.delete(f),d(f,m))})),g)setTimeout(()=>{let T={type:"subscribe-to-node",database:f,nodes:_};p?p.postMessage(T):Sd(T)},Pae);else{ut.info("Node no longer should be used, unsubscribing from node",{replicates:i.replicates,databaseName:f,node:i,subscriptions:i.subscriptions,hasDatabase:!!u[f],thisReplicates:$t().primaryStore.get(rt())?.replicates}),$t().primaryStore.get(rt())?.replicates||(n=!1,ut.info("Disabling replication, this node name",rt(),$t().primaryStore.get(rt()),f));let T={type:"unsubscribe-from-node",database:f,url:i.url,name:i.name};p?p.postMessage(T):cS(T)}}o(d,"onDatabase")}o(s,"onNodeUpdate"),Td=o(function(i){try{ut.info("Disconnected from node",i.name,i.url,"finished",!!i.finished);let a=Array.from(gd.keys()),c=a.sort(),l=c.indexOf(i.name||ui(i.url));if(l===-1){ut.warn("Disconnected node not found in node map",i.name,a);return}let u=Lo.get(i.url),d=u?.get(i.database);if(!d){ut.warn("Disconnected node not found in replication map",i.database,u);return}if(d.connected=!1,i.finished)return;let f=d.nodes[0];if(!(f.replicates===!0||f.replicates?.sends||f.subscriptions?.length))return;let m=(l+1)%c.length;for(;l!==m;){let h=c[m],p=gd.get(h);u=Lo.get(p.url);let _=u?.get(i.database);if(!_){m=(m+1)%c.length;continue}let{worker:g,nodes:y}=_,T=!1;for(let R of d.nodes){if(y.some(I=>I.name===R.name)){ut.info(`Disconnected node is already failing over to ${h} for ${i.database}`);continue}y.push(R),T=!0}if(!T){ut.info(`Disconnected node ${i.name} has no nodes to fail over to ${h}`);return}d.redirectingTo=_,ut.info(`Failing over ${i.database} from ${i.name} to ${h}`),g?g.postMessage({type:"subscribe-to-node",database:i.database,nodes:y}):Sd({database:i.database,nodes:y});return}ut.warn("Unable to find any other node to fail over to",i.name,i.url)}catch(a){ut.error("Error failing over node",a)}},"disconnectedFromNode"),Il=o(function(i){let a=Lo.get(i.url),c=a?.get(i.database);if(!c){ut.warn("Connected node not found in replication map, this may be because the node is being removed",i.database,a);return}if(c.connected=!0,c.latency=i.latency,c.redirectingTo){let{worker:l,nodes:u}=c.redirectingTo,d=u.find(f=>f.name===i.name);c.redirectingTo=null,d&&(u.splice(u.indexOf(d),1),l?l.postMessage({type:"subscribe-to-node",database:i.database,nodes:u}):Sd({database:i.database,nodes:u}))}},"connectedToNode"),(0,Vi.onMessageByType)("disconnected-from-node",Td),(0,Vi.onMessageByType)("connected-to-node",Il),(0,Vi.onMessageByType)("request-cluster-status",dq)}function dq(e,t){let r=[];for(let[n,s]of gd)try{let i=Lo.get(s.url);ut.info("Getting cluster status for",n,s.url,"has dbs",i?.size);let a=[];if(i){for(let[l,{worker:u,connected:d,nodes:f,latency:m}]of i)a.push({database:l,connected:d,latency:m,threadId:u?.threadId,nodes:f.map(h=>h.name)});let c=(0,cw.cloneDeep)(s);c.database_sockets=a,delete c.ca,delete c.node_name,delete c.__updatedtime__,delete c.__createdtime__,r.push(c)}}catch(i){ut.warn("Error getting cluster status for",s?.url,i)}return t?.postMessage({type:"cluster-status",connections:r}),{connections:r}}async function Do(e,t){let r=$t();e=e??ui(t.url),t.name=e;try{if(t.ca){let s=new uq.X509Certificate(t.ca);t.ca_info={issuer:s.issuer.replace(/\n/g," "),subject:s.subject.replace(/\n/g," "),subjectAltName:s.subjectAltName,serialNumber:s.serialNumber,validFrom:s.validFrom,validTo:s.validTo}}}catch(s){ut.error("Error parsing replication CA info for hdb_nodes table",s.message)}let n=r.primaryStore.get(e);if(ut.debug(`Ensuring node ${e} at ${t.url}, existing record:`,n,"new record:",t),!n)await r.patch(t);else{t.replicates&&!lq.default.get(U.CLUSTERING_ENABLED)&&(t.subscriptions=null);for(let s in t)if(n[s]!==t[s]&&s==="subscriptions"&&t[s]&&n[s]){let i=[],a=(0,cw.cloneDeep)(n[s]);for(let c of t[s]){let l=!1;for(let u of a)if((c.database??c.schema)===(u.database??u.schema)&&c.table===u.table){u.publish=c.publish,u.subscribe=c.subscribe,l=!0;break}l||i.push(c)}t.subscriptions=[...a,...i];break}if(Array.isArray(t.revoked_certificates)){let s=n.revoked_certificates||[];t.revoked_certificates=[...new Set([...s,...t.revoked_certificates])]}ut.info(`Updating node ${e} at ${t.url}`),await r.patch(t)}}var Vi,aS,ut,cw,lq,uq,Pae,Lo,Td,Il,gd,oS,Lh=fe(()=>{Le();Vi=w(st());es();aS=require("worker_threads");bl();ut=w(z()),cw=require("lodash"),lq=w(ce());k();uq=require("crypto"),Pae=200,Lo=new Map,gd=new Map,oS=new Map;o(lw,"startOnMainThread");o(dq,"requestClusterStatus");aS.parentPort&&(Td=o(e=>{aS.parentPort.postMessage({type:"disconnected-from-node",...e})},"disconnectedFromNode"),Il=o(e=>{aS.parentPort.postMessage({type:"connected-to-node",...e})},"connectedToNode"),(0,Vi.onMessageByType)("subscribe-to-node",e=>{Sd(e)}),(0,Vi.onMessageByType)("unsubscribe-from-node",e=>{cS(e)}));o(Do,"ensureNode")});var rs=M(Vt=>{"use strict";var ur=require("path"),{watch:Lae}=require("chokidar"),vn=require("fs-extra"),Rd=require("node-forge"),gq=require("net"),{generateKeyPair:uw,X509Certificate:Mo,createPrivateKey:Sq}=require("crypto"),Dae=require("util");uw=Dae.promisify(uw);var Nt=Rd.pki,di=require("joi"),{v4:Tq}=require("uuid"),{validateBySchema:hw}=at(),{forComponent:Mae}=z(),ts=ce(),Os=(k(),v(K)),{CONFIG_PARAMS:wl}=Os,fi=Fy(),{ClientError:Ga}=Ee(),uS=require("node:tls"),{relative:Rq,join:vae}=require("node:path"),{CERT_PREFERENCE_APP:zDe,CERTIFICATE_VALUES:mq}=fi,Uae=Lc(),dw=yt(),{table:xae,getDatabases:Bae,databases:lS}=(Le(),v(ft)),{getJWTRSAKeys:hq}=(cd(),v(Th)),mt=Mae("tls");Vt.generateKeys=_w;Vt.updateConfigCert=Cq;Vt.createCsr=Vae;Vt.signCertificate=Kae;Vt.setCertTable=yd;Vt.loadCertificates=Nq;Vt.reviewSelfSignedCert=Sw;Vt.createTLSSelector=Lq;Vt.listCertificates=Mq;Vt.addCertificate=Jae;Vt.removeCertificate=Zae;Vt.createNatsCerts=zae;Vt.generateCertsKeys=Wae;Vt.getReplicationCert=Mh;Vt.getReplicationCertAuth=$ae;Vt.renewSelfSigned=jae;Vt.hostnamesFromCert=Rw;Vt.getKey=ece;Vt.getHostnamesFromCertificate=tce;Vt.getPrimaryHostName=Tw;var{urlToNodeName:yq,getThisNodeUrl:Fae,getThisNodeName:fS,clearThisNodeName:Hae}=(es(),v(vo)),{readFileSync:kae,statSync:Aq}=require("node:fs"),jDe=ce(),{getTicketKeys:Gae,onMessageFromWorkers:qae}=st(),ka=z(),{isMainThread:bq}=require("worker_threads"),{TLSSocket:Iq,createSecureContext:QDe}=require("node:tls"),pw=3650,Dh=["127.0.0.1","localhost","::1"],Ew=[{name:"countryName",value:"USA"},{name:"stateOrProvinceName",value:"Colorado"},{name:"localityName",value:"Denver"},{name:"organizationName",value:"HarperDB, Inc."}];qae(async e=>{e.type===Os.ITC_EVENT_TYPES.RESTART&&(ts.initSync(!0),await Sw())});var zr;function $a(){return zr||(zr=Bae().system.hdb_certificate,zr||(zr=xae({table:"hdb_certificate",database:"system",attributes:[{name:"name",isPrimaryKey:!0},{attribute:"uses"},{attribute:"certificate"},{attribute:"is_authority"},{attribute:"private_key_name"},{attribute:"details"},{attribute:"is_self_signed"},{attribute:"__updatedtime__"}]}))),zr}o($a,"getCertTable");async function Mh(){let e=Lq("operations-api"),t={secureContexts:null,setSecureContext:o(s=>{},"setSecureContext")};await e.initialize(t);let r=t.secureContexts.get(fS());if(!r)return;let n=new Mo(r.options.cert);return r.cert_parsed=n,r.issuer=n.issuer,r}o(Mh,"getReplicationCert");async function $ae(){$a();let e=(await Mh()).options.cert,r=new Mo(e).issuer.match(/CN=(.*)/)?.[1];return zr.get(r)}o($ae,"getReplicationCertAuth");var pq,qa=new Map;function Nq(){if(pq)return;pq=!0;let e=[{configKey:wl.TLS},{configKey:wl.OPERATIONSAPI_TLS}];$a();let t=ur.dirname(dw.getConfigFilePath()),r;for(let{configKey:n}of e){let s=dw.getConfigFromFile(n);if(s){Array.isArray(s)||(s=[s]);for(let i of s){let a=i.privateKey,c=a&&Rq(vae(t,"keys"),a);c&&Eq(a,l=>{qa.set(c,l)},"private key");for(let l of[!1,!0]){let u=i[l?"certificateAuthority":"certificate"];if(u&&bq){let d;Eq(u,f=>{if(mq.cert===f)return;let m=i.hostname??i.hostnames??i.host??i.hosts;m&&!Array.isArray(m)&&(m=[m]);let h=Pq(u),p=new Mo(h),_;try{_=Tw(p)}catch(R){mt.error("error extracting host name from certificate",R);return}if(_==null){mt.error("No host name found on certificate");return}if(p.checkIssued(new Mo(mq.cert)))return;let g=zr.primaryStore.get(_),y=Aq(u).mtimeMs,T=!g||g.is_self_signed?1:g.file_timestamp??g.__updatedtime__;if(g&&y<=T){y<T&&mt.info(`Certificate ${_} at ${u} is older (${new Date(y)}) than the certificate in the database (${T>1?new Date(T):"only self signed certificate available"})`);return}r=zr.put({name:_,uses:["https",...n.includes("operations")?["operations"]:[]],ciphers:i.ciphers,certificate:h,private_key_name:c,is_authority:l,hostnames:m,fileTimestamp:y,details:{issuer:p.issuer.replace(/\n/g," "),subject:p.subject.replace(/\n/g," "),subject_alt_name:p.subjectAltName,serial_number:p.serialNumber,valid_from:p.validFrom,valid_to:p.validTo}})},l?"certificate authority":"certificate")}}}}}return r}o(Nq,"loadCertificates");function Eq(e,t,r){let n,s=o((i,a)=>{try{let c=a.mtimeMs;c&&c!==n&&(n&&bq&&mt.warn(`Reloading ${r}:`,i),n=c,t(Pq(i)))}catch(c){mt.error(`Error loading ${r}:`,i,c)}},"loadFile");vn.existsSync(e)?s(e,Aq(e)):mt.error(`${r} file not found:`,e),Lae(e,{persistent:!1}).on("change",s)}o(Eq,"loadAndWatch");function fw(){let e=Fae();if(e==null){let t=Dh[0];return mt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return yq(e)}o(fw,"getHost");function dS(){let e=fS();if(e==null){let t=Dh[0];return mt.info("replication url is missing from harperdb-config.yaml, using default host"+t),t}return e}o(dS,"getCommonName");async function Vae(){let e=await Mh(),t=Nt.certificateFromPem(e.options.cert),r=Nt.privateKeyFromPem(e.options.key);mt.info("Creating CSR with cert named:",e.name);let n=Nt.createCertificationRequest();n.publicKey=t.publicKey;let s=[{name:"commonName",value:dS()},...Ew];mt.info("Creating CSR with subject",s),n.setSubject(s);let i=[{name:"unstructuredName",value:"HarperDB, Inc."},{name:"extensionRequest",extensions:wq()}];return mt.info("Creating CSR with attributes",i),n.setAttributes(i),n.sign(r),Rd.pki.certificationRequestToPem(n)}o(Vae,"createCsr");function wq(){let e=Dh.includes(dS())?Dh:[...Dh,dS()];return e.includes(fw())||e.push(fw()),[{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=>gq.isIP(t)?{type:7,ip:t}:{type:2,value:t})}]}o(wq,"certExtensions");async function Kae(e){let t={},r=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME);if(e.csr){let n,s;$a();for await(let d of zr.search([]))if(d.is_authority&&!d.details.issuer.includes("HarperDB-Certificate-Authority")){if(qa.has(d.private_key_name)){n=qa.get(d.private_key_name),s=d;break}else if(d.private_key_name&&await vn.exists(ur.join(r,d.private_key_name))){n=vn.readFile(ur.join(r,d.private_key_name)),s=d;break}}if(!n){let d=await mw();s=d.ca,n=d.private_key}n=Nt.privateKeyFromPem(n),t.signingCA=s.certificate;let i=Nt.certificateFromPem(s.certificate);mt.info("Signing CSR with cert named",s.name);let a=Nt.certificationRequestFromPem(e.csr);try{a.verify()}catch(d){return mt.error(d),new Error("Error verifying CSR: "+d.message)}let c=Rd.pki.createCertificate();c.serialNumber="0"+Math.random().toString().slice(2,9),c.validity.notBefore=new Date;let l=new Date;c.validity.notAfter=l,c.validity.notAfter.setDate(l.getDate()+pw),mt.info("sign cert setting validity:",c.validity),mt.info("sign cert setting subject from CSR:",a.subject.attributes),c.setSubject(a.subject.attributes),mt.info("sign cert setting issuer:",i.subject.attributes),c.setIssuer(i.subject.attributes);let u=a.getAttribute({name:"extensionRequest"}).extensions;mt.info("sign cert adding extensions from CSR:",u),c.setExtensions(u),c.publicKey=a.publicKey,c.sign(n,Rd.md.sha256.create()),t.certificate=Nt.certificateToPem(c)}else mt.info("Sign cert did not receive a CSR from:",e.url,"only the CA will be returned");return t}o(Kae,"signCertificate");async function Yae(e,t){await yd({name:fS(),uses:["https","wss"],certificate:e,private_key_name:"privateKey.pem",is_authority:!1,is_self_signed:!0}),await yd({name:t.subject.getField("CN").value,uses:["https","wss"],certificate:Nt.certificateToPem(t),private_key_name:"privateKey.pem",is_authority:!0,is_self_signed:!0})}o(Yae,"createCertificateTable");async function yd(e){let t=new Mo(e.certificate);e.details={issuer:t.issuer.replace(/\n/g," "),subject:t.subject.replace(/\n/g," "),subject_alt_name:t.subjectAltName,serial_number:t.serialNumber,valid_from:t.validFrom,valid_to:t.validTo},$a(),await zr.patch(e)}o(yd,"setCertTable");async function _w(){let e=await uw("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:Nt.publicKeyFromPem(e.publicKey),privateKey:Nt.privateKeyFromPem(e.privateKey)}}o(_w,"generateKeys");async function gw(e,t,r){let n=Nt.createCertificate();if(!t){let a=await Mh();t=Nt.certificateFromPem(a.options.cert).publicKey}n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+pw);let i=[{name:"commonName",value:dS()},...Ew];return n.setSubject(i),n.setIssuer(r.subject.attributes),n.setExtensions(wq()),n.sign(e,Rd.md.sha256.create()),Nt.certificateToPem(n)}o(gw,"generateCertificates");async function mw(){let e=await Mq(),t;for(let r of e){if(!r.is_authority)continue;let n=await Dq(r.private_key_name);if(r.private_key_name&&n&&new Mo(r.certificate).checkPrivateKey(Sq(n))){mt.trace(`CA named: ${r.name} found with matching private key`),t={ca:r,private_key:n};break}}if(t)return t;mt.trace("No CA found with matching private key")}o(mw,"getCertAuthority");async function Oq(e,t,r=!0){let n=Nt.createCertificate();n.publicKey=t,n.serialNumber="0"+Math.random().toString().slice(2,9),n.validity.notBefore=new Date;let s=new Date;n.validity.notAfter=s,n.validity.notAfter.setDate(s.getDate()+pw);let i=[{name:"commonName",value:`HarperDB-Certificate-Authority-${ts.get(wl.REPLICATION_HOSTNAME)??yq(ts.get(wl.REPLICATION_URL))??Tq().split("-")[0]}`},...Ew];n.setSubject(i),n.setIssuer(i),n.setExtensions([{name:"basicConstraints",cA:!0,critical:!0},{name:"keyUsage",keyCertSign:!0,critical:!0}]),n.sign(e,Rd.md.sha256.create());let a=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME),c=ur.join(a,fi.PRIVATEKEY_PEM_NAME);return r&&await vn.writeFile(c,Nt.privateKeyToPem(e)),n}o(Oq,"generateCertAuthority");async function Wae(){let{privateKey:e,publicKey:t}=await _w(),r=await Oq(e,t),n=await gw(e,t,r);await Yae(n,r),Cq()}o(Wae,"generateCertsKeys");async function zae(){let e=await gw(Nt.privateKeyFromPem(fi.CERTIFICATE_VALUES.key),void 0,Nt.certificateFromPem(fi.CERTIFICATE_VALUES.cert)),t=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME),r=ur.join(t,fi.NATS_CERTIFICATE_PEM_NAME);await vn.exists(r)||await vn.writeFile(r,e);let n=ur.join(t,fi.NATS_CA_PEM_NAME);await vn.exists(n)||await vn.writeFile(n,fi.CERTIFICATE_VALUES.cert)}o(zae,"createNatsCerts");async function jae(){$a();for await(let e of zr.search([{attribute:"is_self_signed",value:!0}]))await zr.delete(e.name);await Sw()}o(jae,"renewSelfSigned");async function Sw(){Hae(),await Nq(),$a();let e=await mw();if(!e){mt.notify("A matching Certificate Authority and key was not found. A new CA will be created in advance, so it's available if needed.");let r=o(u=>{try{return{key:Nt.privateKeyFromPem(vn.readFileSync(u)),keyPath:u}}catch(d){return mt.warn(`Failed to parse private key from ${u}:`,d.message),{key:null,keyPath:u}}},"tryToParseKey"),n=ts.get(wl.TLS),s,i;if(Array.isArray(n)){for(let u of n)if(u.privateKey){let d=r(u.privateKey);if(s=d.key,i=d.keyPath,d.key)break}}else{let u=ts.get(wl.TLS_PRIVATEKEY),d=r(u);s=d.key,i=d.keyPath}let a=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME),c=Rq(a,i);s||(mt.warn("Unable to parse the TLS key",i,"A new key will be generated and used to create Certificate Authority"),{privateKey:s}=await _w(),vn.existsSync(ur.join(a,fi.PRIVATEKEY_PEM_NAME))&&(c=`privateKey${Tq().split("-")[0]}.pem`),await vn.writeFile(ur.join(a,c),Nt.privateKeyToPem(s)));let l=await Oq(s,Nt.setRsaPublicKey(s.n,s.e),!1);await yd({name:l.subject.getField("CN").value,uses:["https"],certificate:Nt.certificateToPem(l),private_key_name:c,is_authority:!0,is_self_signed:!0})}if(!await Mh()){let r=fS();mt.notify(`A suitable replication certificate was not found, creating new self singed cert named: ${r}`),e=e??await mw();let n=Nt.certificateFromPem(e.ca.certificate),s=n.publicKey,i=await gw(Nt.privateKeyFromPem(e.private_key),s,n);await yd({name:r,uses:["https","operations","wss"],certificate:i,is_authority:!1,private_key_name:e.ca.private_key_name,is_self_signed:!0})}}o(Sw,"reviewSelfSignedCert");function Cq(){let e=Uae(Object.keys(Os.CONFIG_PARAM_MAP),!0),t=ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME),r=ur.join(t,fi.PRIVATEKEY_PEM_NAME),n=ur.join(t,fi.NATS_CERTIFICATE_PEM_NAME),s=ur.join(t,fi.NATS_CA_PEM_NAME),i=Os.CONFIG_PARAMS,a={[i.TLS_PRIVATEKEY]:e[i.TLS_PRIVATEKEY.toLowerCase()]?e[i.TLS_PRIVATEKEY.toLowerCase()]:r};e[i.TLS_CERTIFICATE.toLowerCase()]&&(a[i.TLS_CERTIFICATE]=e[i.TLS_CERTIFICATE.toLowerCase()]),e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.TLS_CERTIFICATEAUTHORITY]=e[i.TLS_CERTIFICATEAUTHORITY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATE]=e[i.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_PRIVATEKEY]=e[i.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(a[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=e[i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),(e[i.CLUSTERING_ENABLED.toLowerCase()]||e.clustering)&&(a[i.CLUSTERING_TLS_CERTIFICATE]=e[i.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]??n,a[i.CLUSTERING_TLS_CERT_AUTH]=e[i.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]??s,a[i.CLUSTERING_TLS_PRIVATEKEY]=e[i.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]??r),dw.updateConfigValue(void 0,void 0,a,!1,!0)}o(Cq,"updateConfigCert");function Pq(e){return e.startsWith("-----BEGIN")?e:kae(e,"utf8")}o(Pq,"readPEM");var _q=uS.createSecureContext;uS.createSecureContext=function(e){if(!e.cert||!e.key)return _q(e);let t={...e};delete t.key,delete t.cert;let r=_q(t);return r.context.setCert(e.cert),r.context.setKey(e.key,void 0),r};var Qae=Iq.prototype._init;Iq.prototype._init=function(e,t){Qae.call(this,e,t);let r=this;this._handle.oncertcb=function(n){let s=n.servername;r._SNICallback(s,(i,a)=>{this.sni_context=a?.context||a,this.certCbDone()})}};var Nl=new Map;function Lq(e,t){let r=new Map,n,s=!1;return i.initialize=a=>i.ready?i.ready:(a&&(a.secureContexts=r,a.secureContextsListeners=[]),i.ready=new Promise((c,l)=>{async function u(){try{r.clear(),Nl.clear();let d=0;if(lS===void 0){c();return}for await(let f of lS.system.hdb_certificate.search([])){let m=f.certificate,h=new Mo(m);f.is_authority&&(h.asString=m,Nl.set(h.subject,m))}for await(let f of lS.system.hdb_certificate.search([]))try{if(f.is_authority)continue;let m=e==="operations-api",h=f.is_self_signed?1:2;m&&f.uses?.includes?.("operations")&&(h+=1);let p=await Dq(f.private_key_name),_=f.certificate,g=new Mo(_);if(Nl.has(g.issuer)&&(_+=`
17
+ `+Nl.get(g.issuer)),!p||!_)throw new Error("Missing private key or certificate for secure server");let y={ciphers:f.ciphers,ticketKeys:Gae(),availableCAs:Nl,ca:t&&Array.from(Nl.values()),cert:_,key:p,key_file:f.private_key_name,is_self_signed:f.is_self_signed};a&&(y.sessionIdContext=a.sessionIdContext);let T=uS.createSecureContext(y);T.name=f.name,T.options=y,T.quality=h,T.certificateAuthorities=Array.from(Nl),T.certStart=_.toString().slice(0,100);let R=f.hostnames??Rw(g);Array.isArray(R)||(R=[R]);let I;for(let P of R)if(P){P[0]==="*"&&(s=!0,P=P.slice(1)),P===fw()&&(h+=2),gq.isIP(P)&&(I=!0);let Y=r.get(P)?.quality??0;h>Y&&r.set(P,T)}else ka.error("No hostname found for certificate at",uS.certificate);ka.trace("Adding TLS",T.name,"for",a.ports||"client","cert named",f.name,"hostnames",R,"quality",h,"best quality",d),h>d&&(i.defaultContext=n=T,d=h,a&&(a.defaultContext=T))}catch(m){ka.error("Error applying TLS for",f.name,m)}a?.secureContextsListeners.forEach(f=>f()),c(n)}catch(d){l(d)}}o(u,"updateTLS"),lS?.system.hdb_certificate.subscribe({listener:o(()=>setTimeout(()=>u(),1500).unref(),"listener"),omitCurrent:!0}),u()})),i;function i(a,c){ka.info("TLS requested for",a||"(no SNI)");let l=a;for(;;){let d=r.get(l);if(d)return ka.debug("Found certificate for",a,d.certStart),d.updatedContext&&(d=d.updatedContext),c(null,d);if(s&&l){let f=l.indexOf(".",1);f<0?l="":l=l.slice(f)}else break}a?ka.debug("No certificate found to match",a,"using the default certificate"):ka.debug("No SNI, using the default certificate",n?.name);let u=n;u?u.updatedContext&&(u=u.updatedContext):ka.info("No default certificate found"),c(null,u)}o(i,"SNICallback")}o(Lq,"createTLSSelector");async function Dq(e){let t=qa.get(e);return!t&&e?await vn.readFile(ur.join(ts.get(wl.ROOTPATH),Os.LICENSE_KEY_DIR_NAME,e),"utf8"):t}o(Dq,"getPrivateKeyByName");async function Mq(){$a();let e=[];for await(let t of zr.search([]))e.push(t);return e}o(Mq,"listCertificates");async function Jae(e){let t=hw(e,di.object({name:di.string().required(),certificate:di.string().required(),is_authority:di.boolean().required(),private_key:di.string(),hosts:di.array(),uses:di.array()}));if(t)throw new Ga(t.message);let{name:r,certificate:n,private_key:s,is_authority:i}=e,a=new Mo(n),c=!1,l=!1,u;for(let[h,p]of qa)!s&&!c&&a.checkPrivateKey(Sq(p))&&(c=!0,u=h),s&&s===p&&(l=!0,u=h);if(!i&&!s&&!c)throw new Ga("A suitable private key was not found for this certificate");let d;if(!r){try{d=Tw(a)}catch(h){mt.error(h)}if(d==null)throw new Ga("Error extracting certificate host name, please provide a name parameter")}let f=Xae(r??d);s&&!c&&!l&&(await vn.writeFile(ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME,f+".pem"),s),qa.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 yd(m),"Successfully added certificate: "+f}o(Jae,"addCertificate");function Xae(e){return e.replace(/[^a-z0-9\.]/gi,"-")}o(Xae,"sanitizeName");async function Zae(e){let t=hw(e,di.object({name:di.string().required()}));if(t)throw new Ga(t.message);let{name:r}=e;$a();let n=await zr.get(r);if(!n)throw new Ga(r+" not found");let{private_key_name:s}=n;if(s){let i=Array.from(await zr.search([{attribute:"private_key_name",value:s}]));i.length===1&&i[0].name===r&&(mt.info("Removing private key named",s),await vn.remove(ur.join(ts.getHdbBasePath(),Os.LICENSE_KEY_DIR_NAME,s)))}return await zr.delete(r),"Successfully removed "+r}o(Zae,"removeCertificate");function Tw(e){let t=e.subject.match(/CN=(.*)/)?.[1];return t||Rw(e)[0]}o(Tw,"getPrimaryHostName");function Rw(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=certObj.subject.match(/CN=(.*)/)?.[1];return t?[t]:[]}o(Rw,"hostnamesFromCert");async function ece(e){if(e.bypass_auth!==!0)throw new Ga("Unauthorized","401");let t=hw(e,di.object({name:di.string().required()}));if(t)throw new Ga(t.message);let{name:r}=e;if(r===".jwtPrivate")return(await hq()).privateKey;if(r===".jwtPublic")return(await hq()).publicKey;if(qa.get(r))return qa.get(e.name);throw new Ga("Key not found")}o(ece,"getKey");function tce(e){return[e.subject?.CN,...e.subjectaltname.split(",").filter(t=>t.trim().startsWith("DNS:")).map(t=>t.trim().substring(4))]}o(tce,"getHostnamesFromCertificate")});var Zq={};Ce(Zq,{CONFIRMATION_STATUS_POSITION:()=>Xq,LATENCY_POSITION:()=>gS,NodeReplicationConnection:()=>vh,OPERATION_REQUEST:()=>Iw,RECEIVED_TIME_POSITION:()=>ww,RECEIVED_VERSION_POSITION:()=>Nw,SENDING_TIME_POSITION:()=>_S,createWebSocket:()=>SS,databaseSubscriptions:()=>Ka,replicateOverWS:()=>Uh,tableUpdateListeners:()=>Cw});async function SS(e,t){let{authorization:r,rejectUnauthorized:n}=t||{},s=rt(),i;if(e==null)throw new TypeError(`Invalid URL: Expected a string URL for node "${s}" but received ${e}`);if(e.includes("wss://")){if(!Aw){let l=(0,zq.createTLSSelector)("operations-api"),u={secureContexts:null};await l.initialize(u),Aw=u.secureContexts}if(i=Aw.get(s),i&&me.debug?.("Creating web socket for URL",e,"with certificate named:",i.name),!i&&n!==!1)throw new Error("Unable to find a valid certificate to use for replication to connect to "+e)}let a={};r&&(a.Authorization=r);let c={headers:a,localAddress:s?.startsWith("127.0")?s:void 0,servername:(0,Qq.isIP)(t?.serverName)?void 0:t?.serverName,noDelay:!0,highWaterMark:128*1024,rejectUnauthorized:n!==!1,secureContext:void 0};return i&&(c.secureContext=jq.createSecureContext({...i.options,ca:[...Cl,...i.options.availableCAs.values()]})),new Yq.WebSocket(e,"harperdb-replication-v1",c)}function Uh(e,t,r){let n=t.port||t.securePort,s=Ol.pid%1e3+"-"+Wq.threadId+(n?"s:"+n:"c:"+t.url?.slice(-4))+" "+Math.random().toString().slice(2,3);me.debug?.(s,"Initializing replication connection",r);let i=0,a=Buffer.allocUnsafeSlow(1024),c=0,l=new DataView(a.buffer,0,1024),u=t.database,d=t.databaseSubscriptions||Ka,f,m,h=!1,p=t.subscription;p?.then&&p.then(E=>{p=E,p.auditStore&&(f=p.auditStore)});let _=t.tables||u&&it()[u],g;if(!r){me.error?.(s,"No authorization provided"),Es(1008,"Unauthorized");return}let y=new Map,T=[];g=r.name,g&&t.connection&&(t.connection.nodeName=g);let R,I,P,Y,te,x,$,j=5e3,V,le=0,re=0,se=0,_e=new Map,Ne=[],Fe=0,He;if(t.url){let E=o(()=>{te&&re===e._socket?.bytesRead&&se===e._socket?.bytesWritten?e.terminate():(te=performance.now(),e.ping(),re=e._socket?.bytesRead,se=e._socket?.bytesWritten)},"sendPing");P=setInterval(E,$q).unref(),E()}else _r();e._socket?.setMaxListeners(200);function _r(){clearTimeout(Y),re=e._socket?.bytesRead,se=e._socket?.bytesWritten,Y=setTimeout(()=>{re===e._socket?.bytesRead&&se===e._socket?.bytesWritten&&(me.warn?.(`Timeout waiting for ping from ${g}, terminating connection and reconnecting`),e.terminate())},$q*2).unref()}o(_r,"resetPingTimer");function pt(){if(!(!g||!u))return m||(m=Ed(f,u,g)),m}o(pt,"getSharedStatus"),u&&Pf(u);let gr,wr,ou=[],au=[],Ft,Nf=[],wf=[],hE=[],Ty=150,pE=25,cu=0,Me=0,Of=!1,oo,Or,Sr,Cf;e.on("message",E=>{le=performance.now();try{let S=E.dataView=new $c(E.buffer,E.byteOffset,E.byteLength);if(E[0]>127){let C=(0,nt.decode)(E),[O,D,F]=C;switch(O){case Uq:{if(D){if(g){if(g!==D){me.error?.(s,`Node name mismatch, expecting to connect to ${g}, but peer reported name as ${D}, disconnecting`),e.send((0,nt.encode)([Ad])),Es(1008,"Node name mismatch");return}}else if(g=D,t.connection?.tentativeNode){let B=t.connection.tentativeNode;B.name=g,t.connection.tentativeNode=null,Do(g,B)}if(t.connection&&(t.connection.nodeName=g),me.debug?.(s,"received node name:",g,"db:",u??C[2]),!u)try{Pf(u=C[2]),u==="system"&&(gr=Fa(t,(B,ue)=>{Ac(ue)&&lu(ue)}),e.on("close",()=>{gr?.remove()}))}catch(B){me.warn?.(s,"Error setting database",B),e.send((0,nt.encode)([Ad])),Es(1008,B.message);return}yc()}break}case Gq:{me.debug?.(s,"Received table definitions for",D.map(B=>B.table));for(let B of D){let ue=C[2];B.database=ue;let ae;Ac(ue)&&(ue==="system"?Ge[ue]?.[B.table]||(ae=q(B,Ge[ue]?.[B.table])):ae=q(B,Ge[ue]?.[B.table]),f||(f=ae?.auditStore),_||(_=it()?.[ue]))}break}case Ad:Es();break;case Iw:try{let B=r?.replicates||r?.subscribers||r?.name;me.debug?.("Received operation request",D,"from",g),server.operation(D,{user:r},!B).then(ue=>{Array.isArray(ue)&&(ue={results:ue}),ue.requestId=D.requestId,e.send((0,nt.encode)([hS,ue]))},ue=>{e.send((0,nt.encode)([hS,{requestId:D.requestId,error:(0,bd.errorToString)(ue)}]))})}catch(B){e.send((0,nt.encode)([hS,{requestId:D.requestId,error:(0,bd.errorToString)(B)}]))}break;case hS:let{resolve:L,reject:H}=y.get(D.requestId);D.error?H(new Error(D.error)):L(D),y.delete(D.requestId);break;case yw:let W=C[3];if(!_){u?me.error?.(s,"No database found for",u):me.error?.(s,"Database name never received"),Es();return}let ee=_[W];ee=q({table:W,database:u,attributes:D.attributes,schemaDefined:D.schemaDefined},ee),ou[F]={name:W,decoder:new nt.Packr({useBigIntExtension:!0,randomAccessStructure:!0,freezeData:!0,typedStructs:D.typedStructs,structures:D.structures}),getEntry(B){return ee.primaryStore.getEntry(B)},rootStore:ee.primaryStore.rootStore};break;case xq:Cf=f?nq(D,f):new Map,Ft=C[2],me.debug?.(s,`Acknowledged subscription request, receiving messages for nodes: ${Ft}`);break;case Bq:let oe=F;hE[oe]=D;break;case kq:pt()[Xq]=D,me.trace?.(s,"received and broadcasting committed update",D),pt().buffer.notify();break;case Hq:R=D,p.send({type:"end_txn",localTime:R,remoteNodeIds:T});break;case pS:{let B=C[1],{fileId:ue,size:ae,finished:ge,error:X}=B,de=_e.get(ue);me.debug?.("Received blob",ue,"has stream",!!de,"connectedToBlob",!!de?.connectedToBlob,"length",C[2].length,"finished",ge),de||(de=new bw.PassThrough,de.expectedSize=ae,_e.set(ue,de)),de.lastChunk=Date.now(),ge?(X?(de.on("error",()=>{}),de.destroy(new Error("Blob error: "+X))):de.end(C[2]),de.connectedToBlob&&_e.delete(ue)):de.write(C[2]);break}case Fq:{let B=D,ue;try{let ae=C[3],ge=au[F]||(au[F]=_[C[4]]);if(!ge)return me.warn?.("Unknown table id trying to handle record request",F);let X=ge.primaryStore.getBinaryFast(Symbol.for("structures")),de=X?.length??0;if(de!==Me){Me=de;let he=(0,nt.decode)(X);e.send((0,nt.encode)([yw,{typedStructs:he.typed,structures:he.named},F,ge.tableName]))}let ne=ge.primaryStore.getBinaryFast(ae);if(ne){let he=ge.primaryStore.decoder.decode(ne,{valueAsBuffer:!0}),Ae=ct||{};Ae.version=(0,Jq.getLastVersion)(),ct&&ct[Ru]&Nn&&(he=Buffer.from(he),r_(()=>ge.primaryStore.decoder.decode(ne),Tc,ge.primaryStore.rootStore)),ue=(0,nt.encode)([mS,B,{value:he,expiresAt:Ae.expiresAt,version:Ae.version,residencyId:Ae.residencyId,nodeId:Ae.nodeId,user:Ae.user}])}else ue=(0,nt.encode)([mS,B])}catch(ae){ue=(0,nt.encode)([mS,B,{error:ae.message}])}e.send(ue);break}case mS:{let{resolve:B,reject:ue,tableId:ae,key:ge}=y.get(C[1]),X=C[2];if(X?.error)ue(new Error(X.error));else if(X){let de;t_(()=>{let ne=ou[ae].decoder.decode(X.value);X.value=ne,X.key=ge,B(X)||de&&de.forEach(XE)},ne=>{let he=Rc(ne);return de||(de=[]),de.push(he),he})}else B();y.delete(C[1]);break}case vq:{Sr=D;let B,ue,ae=!1;if(p){if(u!==p.databaseName&&!p.then){me.error?.("Subscription request for wrong database",u,p.databaseName);return}}else p=d.get(u);if(me.debug?.(s,"received subscription request for",u,"at",Sr),!p){let ye;p=new Promise(We=>{me.debug?.("Waiting for subscription to database "+u),ye=We}),p.ready=ye,Ka.set(u,p)}if(r.name)ue=$t().subscribe(r.name),ue.then(async ye=>{B=ye;for await(let We of B){let Xe=We.value;if(!(Xe?.replicates===!0||Xe?.replicates?.receives||Xe?.subscriptions?.some(jt=>(jt.database||jt.schema)===u&&jt.publish!==!1))){ae=!0,e.send((0,nt.encode)([Ad])),Es(1008,`Unauthorized database subscription to ${u}`);return}}},ye=>{me.error?.(s,"Error subscribing to HDB nodes",ye)});else if(!(r?.role?.permission?.super_user||r.replicates)){e.send((0,nt.encode)([Ad])),Es(1008,`Unauthorized database subscription to ${u}`);return}if(Or&&(me.debug?.(s,"stopping previous subscription",u),Or.emit("close")),Sr.length===0)return;let ge=Sr[0],X=o(ye=>{if(ye&&(ge.replicateByDefault?!ge.tables.includes(ye.tableName):ge.tables.includes(ye.tableName)))return{table:ye}},"tableToTableEntry"),de={txnTime:0},ne,he,Ae=1/0,Oe,ze=o((ye,We)=>{if(ye.type==="end_txn"){de.txnTime&&(a[i]!==66&&me.error?.("Invalid encoding of message"),Nc(9),Nc(f_),wc(Oe=We),kr()),i=c,de.txnTime=0;return}let Xe=ye.nodeId,jt=ye.tableId,Dt=he[jt];if(!Dt&&(Dt=he[jt]=X(p.tableById[jt]),!Dt))return me.debug?.("Not subscribed to table",jt);let Zr=Dt.table,ma=Zr.primaryStore,Ht=ma.encoder;(ye.extendedType&E_||!Ht.typedStructs)&&(Ht._mergeStructures(Ht.getStructures()),Ht.typedStructs&&(Ht.lastTypedStructuresLength=Ht.typedStructs.length));let _E=ne[Xe];if(!(_E&&_E.startTime<We&&(!_E.endTime||_E.endTime>We)))return ES&&me.trace?.(s,"skipping replication update",ye.recordId,"to:",g,"from:",Xe,"subscribed:",ne),BD();ES&&me.trace?.(s,"sending replication update",ye.recordId,"to:",g,"from:",Xe,"subscribed:",ne);let Ry=ye.version;de.txnTime!==Ry&&(de.txnTime&&(ES&&me.trace?.(s,"new txn time, sending queued txn",de.txnTime),a[i]!==66&&me.error?.("Invalid encoding of message"),kr()),de.txnTime=Ry,i=c,wc(Ry));let Oc=ye.residencyId,yy=Cr(Oc,Zr),gE;if(yy&&!yy.includes(g)){let Cc=Cr(ye.previousResidencyId,Zr);if(Cc&&!Cc.includes(g)&&(ye.type==="put"||ye.type==="patch")||Zr.getResidencyById)return BD();let Lf=ye.recordId;me.trace?.(s,"sending invalidation",Lf,g,"from",Xe);let Iy=0;Oc&&(Iy|=Vc),ye.previousResidencyId&&(Iy|=Kc);let Ny,SE=null;for(let FD in Zr.indices){if(!SE){if(Ny=ye.getValue(ma,!0),!Ny)break;SE={}}SE[FD]=Ny[FD]}gE=Su(ye.version,jt,Lf,null,Xe,ye.user,ye.type==="put"||ye.type==="patch"?"invalidate":ye.type,Ht.encode(SE),Iy,Oc,ye.previousResidencyId,ye.expiresAt)}function BD(){me.trace?.(s,"skipping audit record",ye.recordId),x||(x=setTimeout(()=>{x=null,(Oe||0)+qq/2<Ae&&(ES&&me.trace?.(s,"sending skipped sequence update",Ae),e.send((0,nt.encode)([Hq,Ae])))},qq).unref())}o(BD,"skipAuditRecord");let Ay=Ht.typedStructs,by=Ht.structures;if((Ay?.length!=Dt.typed_length||by?.length!=Dt.structure_length)&&(Dt.typed_length=Ay?.length,Dt.structure_length=by.length,me.debug?.(s,"send table struct",Dt.typed_length,Dt.structure_length),Dt.sentName||(Dt.sentName=!0),e.send((0,nt.encode)([yw,{typedStructs:Ay,structures:by,attributes:Zr.attributes,schemaDefined:Zr.schemaDefined},jt,Dt.table.tableName]))),Oc&&!wf[Oc]&&(e.send((0,nt.encode)([Bq,yy,Oc])),wf[Oc]=!0),gE)Nc(gE.length),EE(gE);else{let Cc=ye.encoded;ye.extendedType&Nn&&r_(()=>ye.getValue(ma),Tc,ma.rootStore);let Lf=Cc[0]===66?8:0;Nc(Cc.length-Lf),EE(Cc,Lf),me.trace?.("wrote record",ye.recordId,"length:",Cc.length)}},"sendAuditRecord"),kr=o(()=>{c-i>8?(e.send(a.subarray(i,c)),me.debug?.(s,"Sent message, size:",c-i)):me.debug?.(s,"skipping empty transaction")},"sendQueuedData");Or=new Ow.EventEmitter,Or.once("close",()=>{ae=!0,B?.end()});for(let{startTime:ye}of Sr)ye<Ae&&(Ae=ye);(ue||Promise.resolve()).then(async()=>{p=await p,f=p.auditStore,he=p.tableById.map(X),ne=[];for(let{name:We,startTime:Xe,endTime:jt}of Sr){let Dt=iS(We,f);me.debug?.("subscription to",We,"using local id",Dt,"starting",Xe),ne[Dt]={startTime:Xe,endTime:jt}}lu(u),gr||(gr=gl(We=>{We.databaseName===u&&lu(u)}),wr=fh(We=>{We===u&&(e.send((0,nt.encode)([Ad])),Es())}),e.on("close",()=>{gr?.remove(),wr?.remove()})),e.send((0,nt.encode)([xq,wh(p.auditStore),Sr.map(({name:We})=>We)]));let ye=!0;do{isFinite(Ae)||(me.warn?.("Invalid sequence id "+Ae),Es(1008,"Invalid sequence id"+Ae));let We;if(ye&&!ae&&(ye=!1,!(OA(f)<=Ae)&&(Kq.default.get(U.REPLICATION_COPYTABLESTOCATCHUP)??rce)&&server.nodes[0]?.name===g)){me.info?.("Replicating all tables to",g);let jt=Ae,Dt=TS(f);for(let Zr in _){if(!X(Zr))continue;let ma=_[Zr];for(let Ht of ma.primaryStore.getRange({snapshot:!1})){if(ae)return;Ht.localTime>=Ae&&(me.trace?.(s,"Copying record from",u,Zr,Ht.key,Ht.localTime),jt=Math.max(Ht.localTime,jt),We=!0,pt()[_S]=1,ze({recordId:Ht.key,tableId:ma.tableId,type:"put",getValue(){return Ht.value},encoded:ma.primaryStore.getBinary(Ht.key),version:Ht.version,residencyId:Ht.residencyId,nodeId:Dt,extendedType:Ht.metadataFlags},Ht.localTime))}}Ae=jt}for(let{key:Xe,value:jt}of f.getRange({start:Ae||1,exclusiveStart:!0,snapshot:!1})){if(ae)return;let Dt=Ut(jt);me.debug?.("sending audit record",new Date(Xe)),pt()[_S]=Xe,Ae=Xe,ze(Dt,Xe),e._socket.writableNeedDrain?await new Promise(Zr=>{me.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",Zr)}):Fe>pE?await new Promise(Zr=>{He=Zr}):await new Promise(setImmediate),Or.startTime=Xe,We=!0}We&&ze({type:"end_txn"},Ae),pt()[_S]=0,await IU(f)}while(!ae)}).catch(ye=>{me.error?.(s,"Error handling subscription to node",ye),Es(1008,"Error handling subscription to node")});break}}return}S.position=8;let A=!0,N,b;do{pt();let C=S.readInt();if(C===9&&S.getUint8(S.position)==f_){S.position++,R=b=S.readFloat64(),m[Nw]=R,m[ww]=Date.now(),me.trace?.("received remote sequence update",R,u);break}let O=S.position,D=Ut(E,O,O+C),F=ou[D.tableId];F||me.error?.(`No table found with an id of ${D.tableId}`);let L;D.residencyId&&(L=hE[D.residencyId],me.trace?.(s,"received residency list",L,D.type,D.recordId));try{t_(()=>{N={table:F.name,id:D.recordId,type:D.type,nodeId:Cf.get(D.nodeId),residencyList:L,timestamp:D.version,value:D.getValue(F),user:D.user,beginTxn:A,expiresAt:D.expiresAt}},Rc)}catch(H){throw H.message+="typed structures for current decoder"+JSON.stringify(F.decoder.typedStructs),H}A=!1,me.trace?.(s,"received replication message",D.type,"id",N.id,"version",new Date(D.version),"nodeId",N.nodeId),m[Nw]=D.version,m[ww]=Date.now(),p.send(N),S.position=O+C}while(S.position<E.byteLength);cu++,gt(E.byteLength,"bytes-received",`${g}.${u}.${N?.table||"unknown_table"}`,"replication","ingest"),cu>Ty&&!Of&&(Of=!0,e.pause(),me.debug?.(`Commit backlog causing replication back-pressure, requesting that ${g} pause replication`)),p.send({type:"end_txn",localTime:R,remoteNodeIds:T,async onCommit(){if(N){let C=Date.now()-N.timestamp;gt(C,"replication-latency",g+"."+u+"."+N.table,N.type,"ingest")}cu--,Of&&(Of=!1,e.resume(),me.debug?.(`Replication resuming ${g}`)),Ne.length>0&&await Promise.all(Ne),me.trace?.("All blobs finished"),!I&&b&&(me.trace?.(s,"queuing confirmation of a commit at",b),setTimeout(()=>{e.send((0,nt.encode)([kq,I])),me.trace?.(s,"sent confirmation of a commit at",I),I=null},nce)),I=b,me.debug?.("last sequence committed",new Date(b),u)}})}catch(S){me.error?.(s,"Error handling incoming replication message",S)}}),e.on("ping",_r),e.on("pong",()=>{if(t.connection){let E=performance.now()-te;t.connection.latency=E,pt()&&(m[gS]=E),Il({name:g,database:u,url:t.url,latency:E})}te=null}),e.on("close",(E,S)=>{clearInterval(P),clearTimeout(Y),clearInterval($),Or&&Or.emit("close"),oo&&oo.end();for(let[A,{reject:N}]of y)N(new Error(`Connection closed ${S?.toString()} ${E}`));me.debug?.(s,"closed",E,S?.toString())});function Es(E,S){try{e.isFinished=!0,me.debug?.(s,"closing",g,u,E,S),e.close(E,S),t.connection?.emit("finished")}catch(A){me.error?.(s,"Error closing connection",A)}}o(Es,"close");async function Tc(E){let S=ZE(E);try{let A;Fe++;for await(let N of E.stream())A&&(me.debug?.("Sending blob chunk",S,"length",A.length),e.send((0,nt.encode)([pS,{fileId:S,size:E.size},A]))),A=N,e._socket.writableNeedDrain&&(me.debug?.("draining",S),await new Promise(b=>e._socket.once("drain",b)),me.debug?.("drained",S));me.debug?.("Sending final blob chunk",S,"length",A.length),e.send((0,nt.encode)([pS,{fileId:S,size:E.size,finished:!0},A]))}catch(A){me.debug?.("Error sending blob",A),e.send((0,nt.encode)([pS,{fileId:S,finished:!0,error:(0,bd.errorToString)(A)},Buffer.alloc(0)]))}finally{Fe--,Fe<pE&&He?.()}}o(Tc,"sendBlobs");function Rc(E){let S=ZE(E),A=_e.get(S);me.debug?.("Received transaction with blob",S,"has stream",!!A,"ended",!!A?.writableEnded),A?A.writableEnded&&_e.delete(S):(A=new bw.PassThrough,_e.set(S,A)),A.connectedToBlob=!0,A.lastChunk=Date.now(),E.size===void 0&&A.expectedSize&&(E.size=A.expectedSize);let N=createBlob(A,E),b=N.save({primaryStore:p.auditStore});return b&&(b.blobId=S,Ne.push(b),b.finally(()=>{me.debug?.(`Finished receiving blob stream ${S}`),Ne.splice(Ne.indexOf(b),1)})),N}o(Rc,"receiveBlobs");function yc(){if(h||(h=!0,t.connection?.on("subscriptions-updated",yc)),!f&&p&&(f=p.auditStore),t.connection?.isFinished)throw new Error("Can not make a subscription request on a connection that is already closed");let E=new Map;try{for(let N of p?.dbisDB?.getRange({start:Symbol.for("seq"),end:[Symbol.for("seq"),Buffer.from([255])]})||[])for(let b of N.value.nodes||[])b.lastTxnTime>(E.get(b.id)??0)&&E.set(b.id,b.lastTxnTime)}catch(N){if(!N.message.includes("Can not re"))throw N}let S=t.connection?.nodeSubscriptions?.[0];T=[];let A=t.connection?.nodeSubscriptions.map((N,b)=>{let C=[],{replicateByDefault:O}=N;if(N.subscriptions){for(let H of N.subscriptions)if(H.subscribe&&(H.schema||H.database)===u){let W=H.table;_?.[W]?.replicate!==!1&&C.push(W)}O=!1}else for(let H in _)(O?_[H].replicate===!1:_[H].replicate)&&C.push(H);let D=f&&iS(N.name,f),F=p?.dbisDB?.get([Symbol.for("seq"),D])??1,L=Math.max(F?.seqId??1,(typeof N.startTime=="string"?new Date(N.startTime).getTime():N.startTime)??1);if(me.debug?.("Starting time recorded in db",N.name,D,u,F?.seqId,"start time:",L,new Date(L)),S!==N){let H=f&&iS(S.name,f),W=p?.dbisDB?.get([Symbol.for("seq"),H])??1;for(let ee of W?.nodes||[])ee.name===N.name&&(L=ee.seqId,me.debug?.("Using sequence id from proxy node",S.name,L))}return T.push(D),E.get(D)>L&&(L=E.get(D),me.debug?.("Updating start time from more recent txn recorded",S.name,L)),{name:N.name,replicateByDefault:O,tables:C,startTime:L,endTime:N.endTime}});if(A)if(me.debug?.(s,"sending subscription request",A,p?.dbisDB?.path),clearTimeout(V),A.length>0)e.send((0,nt.encode)([vq,A]));else{let N=o(()=>{let b=performance.now();V=setTimeout(()=>{le<=b?Es(1008,"Connection has no subscriptions and is no longer used"):N()},j).unref()},"scheduleClose");N()}}o(yc,"sendSubscriptionRequestUpdate");function Cr(E,S){if(!E)return;let A=Nf[E];return A||(A=S.getResidencyRecord(E),Nf[E]=A),A}o(Cr,"getResidence");function Ac(E){return!(Va&&Va!="*"&&!Va[E]&&!Va.includes?.(E)&&!Va.some?.(S=>S.name===E))}o(Ac,"checkDatabaseAccess");function Pf(E){if(p=p||d.get(E),!Ac(E))throw new Error(`Access to database "${E}" is not permitted`);p||me.warn?.(`No database named "${E}" was declared and registered`),f=p?.auditStore,_||(_=it()?.[E]);let S=rt();if(S===g)throw S?new Error("Should not connect to self",S):new Error("Node name not defined");return bc(S,E),!0}o(Pf,"setDatabase");function bc(E,S){let A=it()?.[S],N=[];for(let b in A){let C=A[b];N.push({table:b,schemaDefined:C.schemaDefined,attributes:C.attributes.map(O=>({name:O.name,type:O.type,isPrimaryKey:O.isPrimaryKey}))})}me.trace?.("Sending database info for node",E,"database name",S),e.send((0,nt.encode)([Uq,E,S,N]))}o(bc,"sendNodeDBName");function lu(E){let S=it()?.[E],A=[];for(let N in S){if(Sr&&!Sr.some(C=>C.replicateByDefault?!C.tables.includes(N):C.tables.includes(N)))continue;let b=S[N];A.push({table:N,schemaDefined:b.schemaDefined,attributes:b.attributes.map(C=>({name:C.name,type:C.type,isPrimaryKey:C.isPrimaryKey}))})}e.send((0,nt.encode)([Gq,A,E]))}o(lu,"sendDBSchema"),$=setInterval(()=>{for(let[E,S]of _e)S.lastChunk+3e4<Date.now()&&(me.warn?.(`Timeout waiting for blob stream to finish ${E} from ${g}`),_e.delete(E),S.end())},3e4).unref();let Ic=1,da=[];return{end(){oo&&oo.end(),Or&&Or.emit("close")},getRecord(E){let S=Ic++;return new Promise((A,N)=>{let b=[Fq,S,E.table.tableId,E.id];da[E.table.tableId]||(b.push(E.table.tableName),da[E.table.tableId]=!0),e.send((0,nt.encode)(b)),le=performance.now(),y.set(S,{tableId:E.table.tableId,key:E.id,resolve(C){let{table:O,entry:D}=E;if(A(C),C)return O._recordRelocate(D,C)},reject:N})})},sendOperation(E){let S=Ic++;return E.requestId=S,e.send((0,nt.encode)([Iw,E])),new Promise((A,N)=>{y.set(S,{resolve:A,reject:N})})}};function Nc(E){fa(5),E<128?a[c++]=E:E<16384?(l.setUint16(c,E|32768),c+=2):E<1056964608?(l.setUint32(c,E|3221225472),c+=4):(a[c]=255,l.setUint32(c+1,E),c+=5)}function EE(E,S=0,A=E.length){let N=A-S;fa(N),E.copy(a,c,S,A),c+=N}function wc(E){fa(8),l.setFloat64(c,E),c+=8}function fa(E){if(E+16>a.length-c){let S=Buffer.allocUnsafeSlow(c+E-i+65536>>10<<11);a.copy(S,0,i,c),c=c-i,i=0,a=S,l=new DataView(a.buffer,0,a.length)}}function q(E,S){let A=E.database??"data";if(A!=="data"&&!Ge[A]){me.warn?.("Database not found",E.database);return}S||(S={});let N=S.schemaDefined,b=!1,C=E.schemaDefined,O=S.attributes||[];for(let D=0;D<E.attributes?.length;D++){let F=E.attributes[D],L=O.find(H=>H.name===F.name);(!L||L.type!==F.type)&&(N?me.error?.(`Schema for '${database_name}.${table_definition.table}' is defined locally, but attribute '${ensure_attribute.name}: ${ensure_attribute.type}' from '${g}' does not match local attribute ${existing_attribute?"'"+L.name+": "+L.type+"'":"which does not exist"}`):(b=!0,C||(F.indexed=!0),L?O[O.indexOf(L)]=F:O.push(F)))}return b?(me.debug?.("(Re)creating",E),et({table:E.table,database:E.database,schemaDefined:E.schemaDefined,attributes:O,...S})):S}}var Kq,nt,Yq,Wq,bd,Ow,zq,jq,Ol,Qq,bw,Jq,me,vq,Uq,xq,Ad,Bq,yw,Fq,mS,Iw,hS,Hq,kq,Gq,pS,Xq,Nw,ww,_S,gS,rce,Cw,Ka,ES,qq,nce,$q,Aw,Vq,vh,Pw=fe(()=>{Le();uo();ow();WA();es();Kq=w(ce());k();Yc();nt=require("msgpackr"),Yq=require("ws"),Wq=require("worker_threads"),bd=w(z());Lh();Ow=require("events"),zq=w(rs()),jq=w(require("node:tls"));bl();Ol=w(require("node:process")),Qq=require("node:net");Hi();Ts();bw=require("node:stream"),Jq=require("lmdb"),me=(0,bd.forComponent)("replication").conditional,vq=129,Uq=140,xq=141,Ad=142,Bq=130,yw=132,Fq=133,mS=134,Iw=136,hS=137,Hq=143,kq=144,Gq=145,pS=146,Xq=0,Nw=1,ww=2,_S=3,gS=4,rce=Ol.env.HDB_LEADER_URL||Ol.argv.includes("--HDB_LEADER_URL"),Cw=new Map,Ka=new Map,ES=!0,qq=300,nce=2,$q=3e4;o(SS,"createWebSocket");Vq=1e3,vh=class extends Ow.EventEmitter{static{o(this,"NodeReplicationConnection")}socket;startTime;retryTime=Vq;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??ui(t)}async connect(){this.session||this.resetSession();let t=[];this.socket=await SS(this.url,{serverName:this.nodeName,authorization:this.authorization});let r;me.debug?.(`Connecting to ${this.url}, db: ${this.databaseName}, process ${Ol.pid}`),this.socket.on("open",()=>{this.socket._socket.unref(),me[this.isConnected?"info":"warn"]?.(`Connected to ${this.url}, db: ${this.databaseName}`),this.retries=0,this.retryTime=Vq,Il({name:this.nodeName,database:this.databaseName,url:this.url}),this.isConnected=!0,r=Uh(this.socket,{database:this.databaseName,subscription:this.subscription,url:this.url,connection:this},{replicates:!0}),this.sessionResolve(r)}),this.socket.on("error",n=>{n.code==="SELF_SIGNED_CERT_IN_CHAIN"?(me.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"?me.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`):me.error?.(`Error in connection to ${this.url} due to ${n.message}`)),this.sessionReject(n)}),this.socket.on("close",(n,s)=>{if(this.isConnected&&(Td({name:this.nodeName,database:this.databaseName,url:this.url,finished:this.socket.isFinished}),this.isConnected=!1),this.socket.isFinished){this.isFinished=!0,r?.end(),this.emit("finished");return}if(++this.retries%20===1){let i=s?.toString();me.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>>3})}resetSession(){this.session=new Promise((t,r)=>{this.sessionResolve=t,this.sessionReject=r})}subscribe(t,r){this.nodeSubscriptions=t,this.replicateTablesByDefault=r,this.emit("subscriptions-updated",t)}unsubscribe(){this.socket.isFinished=!0,this.socket.close(1008,"No longer subscribed")}getRecord(t){return this.session.then(r=>r.getRecord(t))}};o(Uh,"replicateOverWS")});var vo={};Ce(vo,{clearThisNodeName:()=>dce,disableReplication:()=>ace,enabledDatabases:()=>Va,forEachReplicatedDatabase:()=>Fa,getThisNodeId:()=>TS,getThisNodeName:()=>rt,getThisNodeUrl:()=>Ha,hostnameToUrl:()=>bS,lastTimeInAuditStore:()=>Oh,monitorNodeCAs:()=>c$,replicateOperation:()=>mce,replicationCertificateAuthorities:()=>Cl,sendOperationToNode:()=>Bh,servers:()=>ice,setReplicator:()=>u$,start:()=>oce,startOnMainThread:()=>lw,subscribeToNode:()=>Sd,unsubscribeFromNode:()=>cS,urlToNodeName:()=>ui});function oce(e){if(!e.port&&!e.securePort&&(e.port=Cs.default.get(U.OPERATIONSAPI_NETWORK_PORT),e.securePort=Cs.default.get(U.OPERATIONSAPI_NETWORK_SECUREPORT)),!rt())throw new Error("Can not load replication without a url (see replication.url in the config)");let t=new Map;for(let s of Ph(e))t.set(ui(s.url),s);cce(e),e={mtls:!0,isOperationsServer:!0,maxPayload:10*1024*1024*1024,...e};let r=ve.ws(async(s,i,a,c)=>{if(wt.debug("Incoming WS connection received "+i.url),i.headers.get("sec-websocket-protocol")!=="harperdb-replication-v1")return c(s,i,a);await a,s._socket.unref(),Uh(s,e,i?.user),s.on("error",l=>{l.code!=="ECONNREFUSED"&&wt.error("Error in connection to "+this.url,l.message)})},e);e.runFirst=!0,ve.http((s,i)=>{if(s.isWebSocket&&s.headers.get("Sec-WebSocket-Protocol")==="harperdb-replication-v1"){wt.debug("Incoming replication WS connection received, authorized: "+s.authorized),!s.authorized&&s._nodeRequest.socket.authorizationError&&wt.error(`Incoming client connection from ${s.ip} did not have valid certificate, you may need turn on enableRootCAs in the config if you are using a publicly signed certificate, or add the CA to the server's trusted CAs`,s._nodeRequest.socket.authorizationError);let a=$t().primaryStore;if(s.authorized&&s.peerCertificate.subjectaltname){let c=(0,o$.getHostnamesFromCertificate)(s.peerCertificate),l;for(let u of c)if(l=u&&(a.get(u)||t.get(u)),l)break;if(l)if(l?.revoked_certificates?.includes(s.peerCertificate.serialNumber)){wt.warn("Revoked certificate used in attempt to connect to node",l.name,"certificate serial number",s.peerCertificate.serialNumber);return}else s.user=l;else wt.warn(`No node found for certificate common name/SANs: ${c}, available nodes are ${Array.from(a.getRange({}).filter(({value:u})=>u).map(({key:u})=>u)).join(", ")} and routes ${Array.from(t.keys()).join(", ")}, connection will require credentials.`)}else{let c=a.get(s.ip)||t.get(s.ip);c?s.user=c:wt.warn(`No node found for IP address ${s.ip}, available nodes are ${Array.from(new Set([...a.getKeys(),...t.keys()])).join(", ")}, connection will require credentials.`)}}return i(s)},e);let n=[];for(let s of r)if(s.secureContexts){let i=o(()=>{let a=new Set(s.secureContexts.values());s.defaultContext&&a.add(s.defaultContext);for(let c of a)try{let l=Array.from(Cl);c.options.availableCAs&&l.push(...c.options.availableCAs.values());let u={...c.options,ca:l};c.updatedContext=AS.createSecureContext(u)}catch(l){wt.error("Error creating replication TLS config",l)}},"updateContexts");s.secureContextsListeners.push(i),n.push(i),Cs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1&&i()}c$(()=>{for(let s of n)s()})}function c$(e){let t=0;_d(r=>{r?.ca&&(Cl.add(r.ca),Cl.size!==t&&(t=Cl.size,e?.()))})}function ace(e=!0){a$=e}function cce(e){a$||(it(),Va=e.databases,Fa(e,(t,r)=>{if(!t){let n=e.databaseSubscriptions||Ka;for(let[s,i]of xh){let a=i.get(r);a&&(a.subscribe([],!1),i.delete(r))}n.delete(r);return}for(let n in t){let s=t[n];u$(r,s,e),Cw.get(s)?.forEach(i=>i(s))}}))}function u$(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 l$ extends Dr{static{o(this,"Replicator")}static connection;static subscription;static async subscribe(){let i=r.databaseSubscriptions||Ka,a=i.get(e),c=a?.tableById||[];c[t.tableId]=t;let l=a?.ready;if(wt.trace("Setting up replicator subscription to database",e),!a?.auditStore)return this.subscription=a=new $n,i.set(e,a),a.tableById=c,a.auditStore=t.auditStore,a.dbisDB=t.dbisDB,a.databaseName=e,l&&l(a),a;this.subscription=a}static subscribeOnThisThread(i,a){return!0}static async load(i){if(i){let a=i.residencyId,c=i.residency||t.dbisDB.get([Symbol.for("residency_by_id"),a]);if(c){let l,u=new Set;do{let d,f="",m=1/0;for(let p of c){if(u.has(p))continue;let _=lce(p,l$.subscription,e);if(_?.isConnected){let g=Ed(t.auditStore,e,p)[gS];(!d||g<m)&&(d=_,f=p,m=g)}}if(!d)throw l||new s$.ServerError(`No connection to any other nodes are available: ${c}`,502);let h={requestId:sce++,table:t,entry:i,id:i.key};u.add(f);try{return await d.getRecord(h)}catch(p){if(d.isConnected)throw p;wt.warn("Error in load from node",yS,p),l||(l=p)}}while(!0)}}}static isReplicator=!0},{intermediateSource:!0})}function d$(e,t,r,n,s){let i=xh.get(e);i||xh.set(e,i=new Map);let a=i.get(r);if(a)return a;if(t)return i.set(r,a=new vh(e,t,r,n,s)),a.connect(),a.once("finished",()=>i.delete(r)),a}function lce(e,t,r){let s=e$.get(e)?.get(r);if(s)return s;let i=$t().primaryStore.get(e);return i?.url&&(s=d$(i.url,t,r,e,i.authorization),e$.set(e,xh.get(i.url))),s}async function Bh(e,t,r){r||(r={}),r.serverName=e.name;let n=await SS(e.url,r),s=Uh(n,{},{});return new Promise((i,a)=>{n.on("open",()=>{wt.debug("Sending operation connection to "+e.url+" opened",t),i(s.sendOperation(t))}),n.on("error",c=>{a(c)}),n.on("close",c=>{wt.info("Sending operation connection to "+e.url+" closed",c)})}).finally(()=>{n.close()})}function Sd(e){try{i$.isMainThread&&wt.trace("Subscribing on main thread (should not happen in multi-threaded instance)",e.nodes[0].url,e.database);let t=Ka.get(e.database);if(!t){let n;t=new Promise(s=>{wt.info("Waiting for subscription to database "+e.database),n=s}),t.ready=n,Ka.set(e.database,t)}let r=d$(e.nodes[0].url,t,e.database,e.nodes[0].name,e.nodes[0].authorization);e.nodes[0].name===void 0?r.tentativeNode=e.nodes[0]:r.nodeName=e.nodes[0].name,r.subscribe(e.nodes.filter(n=>Ch(n,e.database)),e.replicateByDefault)}catch(t){wt.error("Error in subscription to node",e.nodes[0]?.url,t)}}async function cS({name:e,url:t,database:r}){wt.trace("Unsubscribing from node",e,t,r,"nodes",Array.from($t().primaryStore.getRange({})));let n=xh.get(t);if(n){let s=n.get(r);s&&(s.unsubscribe(),n.delete(r))}}function uce(){if(Lw!==void 0)return Lw;let e=Cs.default.get(U.OPERATIONSAPI_TLS_CERTIFICATE)||Cs.default.get(U.TLS_CERTIFICATE);if(e)return Lw=new r$.X509Certificate((0,n$.readFileSync)(e)).subject.match(/CN=(.*)/)?.[1]??null}function rt(){return yS||(yS=Cs.default.get("replication_hostname")??ui(Cs.default.get("replication_url"))??uce()??t$("operationsapi_network_secureport")??t$("operationsapi_network_port")??"127.0.0.1")}function dce(){yS=void 0}function t$(e){let t=Cs.default.get(e),r=t?.lastIndexOf?.(":");if(r>0)return t.slice(0,r)}function RS(e){let t=Cs.default.get(e),r=t?.lastIndexOf?.(":");return r>0?+t.slice(r+1).replace(/[\[\]]/g,""):+t}function TS(e){return wh(e)?.[rt()]}function Ha(){let e=Cs.default.get("replication_url");return e||bS(rt())}function bS(e){let t=RS("replication_port");if(t)return`ws://${e}:${t}`;if(t=RS("replication_secureport"),t)return`wss://${e}:${t}`;if(t=RS("operationsapi_network_port"),t)return`ws://${e}:${t}`;if(t=RS("operationsapi_network_secureport"),t)return`wss://${e}:${t}`}function ui(e){if(e)return new URL(e).hostname}function Fa(e,t){for(let n of Object.getOwnPropertyNames(Ge))r(n);return fh(n=>{r(n)}),gl((n,s)=>{r(n.databaseName)});function r(n){let s=Ge[n];wt.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):fce(n)&&t(s,n,!1)}o(r,"forDatabase")}function fce(e){let t=Ge[e];for(let r in t)if(t[r].replicate)return!0}function Oh(e){for(let t of e.getKeys({limit:1,reverse:!0}))return t}async function mce(e){let t={message:""};if(e.replicated){e.replicated=!1,wt.trace?.("Replicating operation",e.operation,"to nodes",ve.nodes.map(n=>n.name));let r=await Promise.allSettled(ve.nodes.map(n=>Bh(n,e)));t.replicated=r.map((n,s)=>{let i=n.status==="rejected"?{status:"failed",reason:n.reason.toString()}:n.value;return i.node=ve.nodes[s]?.name,i})}return t}var Cs,wt,r$,n$,AS,s$,i$,o$,a$,sce,ice,Cl,Va,xh,e$,Lw,yS,es=fe(()=>{Le();ba();pu();Pw();Pr();Cs=w(ce()),wt=w(z()),r$=require("crypto"),n$=require("fs");Lh();bl();k();ow();AS=w(require("node:tls")),s$=w(Ee()),i$=require("worker_threads"),o$=w(rs()),sce=1,ice=[],Cl=Cs.default.get(U.REPLICATION_ENABLEROOTCAS)!==!1?new Set(AS.rootCertificates):new Set;o(oce,"start");o(c$,"monitorNodeCAs");o(ace,"disableReplication");o(cce,"assignReplicationSource");o(u$,"setReplicator");xh=new Map;o(d$,"getConnection");e$=new Map;o(lce,"getConnectionByName");o(Bh,"sendOperationToNode");o(Sd,"subscribeToNode");o(cS,"unsubscribeFromNode");o(uce,"getCommonNameFromCert");o(rt,"getThisNodeName");o(dce,"clearThisNodeName");Object.defineProperty(ve,"hostname",{get(){return rt()}});o(t$,"getHostFromListeningPort");o(RS,"getPortFromListeningPort");o(TS,"getThisNodeId");ve.replication={getThisNodeId:TS,exportIdMapping:wh};o(Ha,"getThisNodeUrl");o(bS,"hostnameToUrl");o(ui,"urlToNodeName");o(Fa,"forEachReplicatedDatabase");o(fce,"hasExplicitlyReplicatedTable");o(Oh,"lastTimeInAuditStore");o(mce,"replicateOperation")});var CS=M((RMe,E$)=>{"use strict";var Id=NG(),{validateBySchema:Fh}=at(),{commonValidators:Nd,schemaRegex:Dw}=Di(),dr=require("joi"),hce=z(),pce=require("uuid").v4,wS=bo(),wd=(k(),v(K)),Ece=require("util"),Ya=jn(),{handleHDBError:Uo,hdbErrors:_ce,ClientError:Hh}=Ee(),{HDB_ERROR_MSGS:IS,HTTP_STATUS_CODES:xo}=_ce,{SchemaEventMsg:OS}=ti(),f$=lr(),{getDatabases:gce}=(Le(),v(ft)),{transformReq:Od}=ie(),{replicateOperation:m$}=(es(),v(vo)),NS=dr.string().min(1).max(Nd.schema_length.maximum).pattern(Dw).messages({"string.pattern.base":"{:#label} "+Nd.schema_format.message}),Sce=dr.string().min(1).max(Nd.schema_length.maximum).pattern(Dw).messages({"string.pattern.base":"{:#label} "+Nd.schema_format.message}).required(),Tce=dr.string().min(1).max(Nd.schema_length.maximum).pattern(Dw).messages({"string.pattern.base":"{:#label} "+Nd.schema_format.message,"any.required":"'primary_key' is required","string.base":"'primary_key' must be a string"}).required();E$.exports={createSchema:Rce,createSchemaStructure:h$,createTable:yce,createTableStructure:p$,createAttribute:wce,dropSchema:Ace,dropTable:bce,dropAttribute:Ice,getBackup:Oce};async function Rce(e){let t=await h$(e);return wS.signalSchemaChange(new OS(process.pid,e.operation,e.schema)),t}o(Rce,"createSchema");async function h$(e){let t=Fh(e,dr.object({database:NS,schema:NS}));if(t)throw new Hh(t.message);if(Od(e),!await Id.checkSchemaExists(e.schema))throw Uo(new Error,IS.SCHEMA_EXISTS_ERR(e.schema),xo.BAD_REQUEST,wd.LOG_LEVELS.ERROR,IS.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ya.createSchema(e),`database '${e.schema}' successfully created`}o(h$,"createSchemaStructure");async function yce(e){return Od(e),e.hash_attribute=e.primary_key??e.hash_attribute,await p$(e)}o(yce,"createTable");async function p$(e){let t=Fh(e,dr.object({database:NS,schema:NS,table:Sce,residence:dr.array().items(dr.string().min(1)).optional(),hash_attribute:Tce}));if(t)throw new Hh(t.message);if(!await Id.checkSchemaTableExists(e.schema,e.table))throw Uo(new Error,IS.TABLE_EXISTS_ERR(e.schema,e.table),xo.BAD_REQUEST,wd.LOG_LEVELS.ERROR,IS.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:pce(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ya.createTable(n,e);else throw Uo(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",xo.BAD_REQUEST);else await Ya.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}o(p$,"createTableStructure");async function Ace(e){let t=Fh(e,dr.object({database:dr.string(),schema:dr.string()}).or("database","schema").messages({"object.missing":"'database' is required"}));if(t)throw new Hh(t.message);Od(e);let r=await Id.checkSchemaExists(e.schema);if(r)throw Uo(new Error,r,xo.NOT_FOUND,wd.LOG_LEVELS.ERROR,r,!0);let n=await Id.schemaDescribe.describeSchema({schema:e.schema}),s=Object.keys(global.hdb_schema[e.schema]);await Ya.dropSchema(e),wS.signalSchemaChange(new OS(process.pid,e.operation,e.schema)),await f$.purgeSchemaTableStreams(e.schema,s);let i=await m$(e);return i.message=`successfully deleted '${e.schema}'`,i}o(Ace,"dropSchema");async function bce(e){let t=Fh(e,dr.object({database:dr.string(),schema:dr.string(),table:dr.string().required()}));if(t)throw new Hh(t.message);Od(e);let r=await Id.checkSchemaTableExists(e.schema,e.table);if(r)throw Uo(new Error,r,xo.NOT_FOUND,wd.LOG_LEVELS.ERROR,r,!0);await Ya.dropTable(e),await f$.purgeTableStream(e.schema,e.table);let n=await m$(e);return n.message=`successfully deleted table '${e.schema}.${e.table}'`,n}o(bce,"dropTable");async function Ice(e){let t=Fh(e,dr.object({database:dr.string(),schema:dr.string(),table:dr.string().required(),attribute:dr.string().required()}));if(t)throw new Hh(t.message);Od(e);let r=await Id.checkSchemaTableExists(e.schema,e.table);if(r)throw Uo(new Error,r,xo.NOT_FOUND,wd.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Uo(new Error,"You cannot drop a hash attribute",xo.BAD_REQUEST,void 0,void 0,!0);if(wd.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Uo(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,xo.BAD_REQUEST,void 0,void 0,!0);try{return await Ya.dropAttribute(e),Nce(e),wS.signalSchemaChange(new OS(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw hce.error(`Got an error deleting attribute ${Ece.inspect(e)}.`),n}}o(Ice,"dropAttribute");function Nce(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}o(Nce,"dropAttributeFromGlobal");async function wce(e){Od(e);let t=gce()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Uo(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,xo.BAD_REQUEST,void 0,void 0,!0);return await Ya.createAttribute(e),wS.signalSchemaChange(new OS(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(wce,"createAttribute");function Oce(e){return Ya.getBackup(e)}o(Oce,"getBackup")});var g$=M((AMe,_$)=>{"use strict";var{OPERATIONS_ENUM:Cce}=(k(),v(K)),Mw=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Cce.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};_$.exports=Mw});var vw=M((NMe,A$)=>{"use strict";var Pce=jn(),IMe=g$(),PS=ie(),LS=(k(),v(K)),Lce=ce(),{handleHDBError:S$,hdbErrors:Dce}=Ee(),{HDB_ERROR_MSGS:T$,HTTP_STATUS_CODES:R$}=Dce,Mce=Object.values(LS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),y$="To use this operation audit log must be enabled in harperdb-config.yaml";A$.exports=vce;async function vce(e){if(PS.isEmpty(e.schema))throw new Error(T$.SCHEMA_REQUIRED_ERR);if(PS.isEmpty(e.table))throw new Error(T$.TABLE_REQUIRED_ERR);if(!Lce.get(LS.CONFIG_PARAMS.LOGGING_AUDITLOG))throw S$(new Error,y$,R$.BAD_REQUEST,LS.LOG_LEVELS.ERROR,y$,!0);let t=PS.checkSchemaTableExist(e.schema,e.table);if(t)throw S$(new Error,t,R$.NOT_FOUND,LS.LOG_LEVELS.ERROR,t,!0);if(!PS.isEmpty(e.search_type)&&Mce.indexOf(e.search_type)<0)throw new Error(`Invalid searchType '${read_audit_log_object.search_type}'`);return await Pce.readAuditLog(e)}o(vce,"readAuditLog")});var I$=M((OMe,b$)=>{"use strict";var{OPERATIONS_ENUM:Uce}=(k(),v(K)),Uw=class{static{o(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=Uce.GET_BACKUP,this.schema=t,this.table=r}};b$.exports=Uw});var O$=M((DMe,w$)=>{"use strict";var xce=jn(),PMe=I$(),xw=ie(),Bce=(k(),v(K)),LMe=ce(),{handleHDBError:Fce,hdbErrors:Hce}=Ee(),{HDB_ERROR_MSGS:N$,HTTP_STATUS_CODES:kce}=Hce;w$.exports=Gce;async function Gce(e){if(xw.isEmpty(e.schema))throw new Error(N$.SCHEMA_REQUIRED_ERR);if(xw.isEmpty(e.table))throw new Error(N$.TABLE_REQUIRED_ERR);let t=xw.checkSchemaTableExist(e.schema,e.table);if(t)throw Fce(new Error,t,kce.NOT_FOUND,Bce.LOG_LEVELS.ERROR,t,!0);return await xce.getBackup(readAuditLogObject)}o(Gce,"getBackup")});var D$=M((vMe,L$)=>{"use strict";var qce=ce(),Wa=require("joi"),$ce=at(),C$=require("moment"),Vce=require("fs-extra"),Bw=require("path"),Kce=require("lodash"),kh=(k(),v(K)),{LOG_LEVELS:Pl}=(k(),v(K)),Yce="YYYY-MM-DD hh:mm:ss",Wce=Bw.resolve(__dirname,"../logs");L$.exports=function(e){return $ce.validateBySchema(e,zce)};var zce=Wa.object({from:Wa.custom(P$),until:Wa.custom(P$),level:Wa.valid(Pl.NOTIFY,Pl.FATAL,Pl.ERROR,Pl.WARN,Pl.INFO,Pl.DEBUG,Pl.TRACE),order:Wa.valid("asc","desc"),limit:Wa.number().min(1),start:Wa.number().min(0),log_name:Wa.custom(jce)});function P$(e,t){if(C$(e,C$.ISO_8601).format(Yce)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(P$,"validateDatetime");function jce(e,t){if(Kce.invert(kh.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=qce.get(kh.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?kh.LOG_NAMES.HDB:e,i=s===kh.LOG_NAMES.INSTALL?Bw.join(Wce,kh.LOG_NAMES.INSTALL):Bw.join(n,s);return Vce.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(jce,"validateReadLogPath")});var Hw=M((xMe,v$)=>{"use strict";var DS=(k(),v(K)),Qce=z(),Jce=ce(),Xce=D$(),Fw=require("path"),M$=require("fs-extra"),{once:Zce}=require("events"),{handleHDBError:ele,hdbErrors:tle}=Ee(),{PACKAGE_ROOT:rle}=Rt(),{replicateOperation:nle}=(es(),v(vo)),sle=Fw.join(rle,"logs"),ile=1e3,ole=200;v$.exports=ale;async function ale(e){let t=Xce(e);if(t)throw ele(t,t.message,tle.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nle(e),n=Jce.get(DS.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?DS.LOG_NAMES.HDB:e.log_name,i=s===DS.LOG_NAMES.INSTALL?Fw.join(sle,DS.LOG_NAMES.INSTALL):Fw.join(n,s),a=e.level!==void 0,c=a?e.level:void 0,l=e.from!==void 0,u=l?new Date(e.from):void 0,d=e.until!==void 0,f=d?new Date(e.until):void 0,m=e.limit===void 0?ile:e.limit,h=e.order===void 0?void 0:e.order,p=e.start===void 0?0:e.start,_=p+m,g=0;h==="desc"&&!u&&!f&&(g=Math.max(M$.statSync(i).size-(_+5)*ole,0));let y=M$.createReadStream(i,{start:g});y.on("error",x=>{Qce.error(x)});let T=0,R=[],I="",P;y.on("data",x=>{let $=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;x=I+x;let j=0,V;for(;(V=$.exec(x))&&!y.destroyed;){P&&(P.message=x.slice(j,V.index),Y(P));let[le,re,se]=V,_e=se.split("] ["),Ne=_e[0],Fe=_e[1];_e.splice(0,2),P={timestamp:re,thread:Ne,level:Fe,tags:_e,message:""},j=V.index+le.length}I=x.slice(j)}),y.on("end",x=>{y.destroyed||P&&(P.message=I.trim(),Y(P))}),y.resume();function Y(x){let $,j,V;switch(!0){case(a&&l&&d):$=new Date(x.timestamp),j=new Date(u),V=new Date(f),x.level===c&&$>=j&&$<=V&&T<p?T++:x.level===c&&$>=j&&$<=V&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case(a&&l):$=new Date(x.timestamp),j=new Date(u),x.level===c&&$>=j&&T<p?T++:x.level===c&&$>=j&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case(a&&d):$=new Date(x.timestamp),V=new Date(f),x.level===c&&$<=V&&T<p?T++:x.level===c&&$<=V&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case(l&&d):$=new Date(x.timestamp),j=new Date(u),V=new Date(f),$>=j&&$<=V&&T<p?T++:$>=j&&$<=V&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case a:x.level===c&&T<p?T++:x.level===c&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case l:$=new Date(x.timestamp),j=new Date(u),$>=j&&T<p?T++:$>=j&&T>=p&&(Ki(x,h,R),T++,T===_&&y.destroy());break;case d:$=new Date(x.timestamp),V=new Date(f),$<=V&&T<p?T++:$<=V&&T>=p&&(Ki(x,h,R),T++,T===_&&y.destroy());break;default:T<p?T++:(Ki(x,h,R),T++,T===_&&y.destroy())}}o(Y,"onLogMessage"),await Zce(y,"close");let te=await r;if(te.replicated){for(let x of R)x.node=server.hostname;for(let x of te.replicated){let $=x.node;if(x.status==="failed")Ki({timestamp:new Date().toISOString(),level:"error",node:$,message:`Error retrieving logs: ${x.reason}`},h,R);else for(let j of x.results)j.node=$,Ki(j,h,R)}}return R}o(ale,"readLog");function Ki(e,t,r){t==="desc"?cle(e,r):t==="asc"?lle(e,r):r.push(e)}o(Ki,"pushLineToResult");function cle(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}o(cle,"insertDescending");function lle(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}o(lle,"insertAscending")});var MS=M((qMe,F$)=>{"use strict";var kw=require("joi"),{string:Cd,boolean:U$,date:ule}=kw.types(),dle=at(),{validateSchemaExists:FMe,validateTableExists:HMe,validateSchemaName:kMe}=Di(),fle=(k(),v(K)),mle=It(),x$=ce();x$.initSync();var GMe=Cd.invalid(x$.get(fle.CONFIG_PARAMS.CLUSTERING_NODENAME)??"node_name").pattern(mle.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),B$={operation:Cd.valid("add_node","update_node","set_node_replication"),node_name:Cd.optional(),subscriptions:kw.array().items({table:Cd.optional(),schema:Cd.optional(),database:Cd.optional(),subscribe:U$.required(),publish:U$.required().custom(ple),start_time:ule.iso()})};function hle(e){return dle.validateBySchema(e,kw.object(B$))}o(hle,"addUpdateNodeValidator");function ple(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}o(ple,"checkForFalsy");F$.exports={addUpdateNodeValidator:hle,validationSchema:B$}});var Pd=M((VMe,H$)=>{"use strict";var Gw=class{static{o(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},qw=class{static{o(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};H$.exports={Node:Gw,NodeSubscription:qw}});var G$=M((YMe,k$)=>{"use strict";var Ele=(k(),v(K)).OPERATIONS_ENUM,$w=class{static{o(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=Ele.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};k$.exports=$w});var Gh=M((zMe,q$)=>{"use strict";var Vw=class{static{o(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},Kw=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,a,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=a,c!==void 0&&(this.attributes=c)}};q$.exports={RemotePayloadObject:Vw,RemotePayloadSubscription:Kw}});var V$=M((QMe,$$)=>{"use strict";var Yw=class{static{o(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,a=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=a}};$$.exports=Yw});var Y$=M((rve,K$)=>{"use strict";var _le=V$(),XMe=kt(),ZMe=_t(),gle=z(),{getSchemaPath:eve,getTransactionAuditStorePath:tve}=At(),{getDatabases:Sle}=(Le(),v(ft));K$.exports=Tle;async function Tle(e){let t=new _le;try{let r=Sle()[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){gle.warn(`unable to stat table dbi due to ${r}`)}return t}o(Tle,"lmdbGetTableSize")});var z$=M((sve,W$)=>{"use strict";var Ww=class{static{o(this,"SystemInformationObject")}constructor(t,r,n,s,i,a,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=a,this.harperdb_processes=c}};W$.exports=Ww});var Dd=M((uve,X$)=>{"use strict";var Rle=require("fs-extra"),yle=require("path"),dn=require("systeminformation"),za=z(),j$=lr(),ove=It(),Ld=(k(),v(K)),Ale=Y$(),ble=Pa(),{getThreadInfo:Q$}=st(),qh=ce();qh.initSync();var Ile=z$(),{openEnvironment:ave}=_t(),{getSchemaPath:cve}=At(),{database:lve,databases:zw}=(Le(),v(ft)),vS;X$.exports={getHDBProcessInfo:Xw,getNetworkInfo:eO,getDiskInfo:Zw,getMemoryInfo:Jw,getCPUInfo:Qw,getTimeInfo:jw,getSystemInformation:tO,systemInformation:Nle,getTableSize:rO,getMetrics:nO};function jw(){return dn.time()}o(jw,"getTimeInfo");async function Qw(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:a,governor:c,socket:l,cache:u,...d}=await dn.cpu();d.cpu_speed=await dn.cpuCurrentSpeed();let{rawCurrentload:f,rawCurrentloadIdle:m,rawCurrentloadIrq:h,rawCurrentloadNice:p,rawCurrentloadSystem:_,rawCurrentloadUser:g,cpus:y,...T}=await dn.currentLoad();return T.cpus=[],y.forEach(R=>{let{rawLoad:I,rawLoadIdle:P,rawLoadIrq:Y,rawLoadNice:te,rawLoadSystem:x,rawLoadUser:$,...j}=R;T.cpus.push(j)}),d.current_load=T,d}catch(e){return za.error(`error in getCPUInfo: ${e}`),{}}}o(Qw,"getCPUInfo");async function Jw(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await dn.mem();return Object.assign(s,process.memoryUsage())}catch(e){return za.error(`error in getMemoryInfo: ${e}`),{}}}o(Jw,"getMemoryInfo");async function Xw(){let e={core:[],clustering:[]};try{let t=await dn.processes(),r;try{r=Number.parseInt(await Rle.readFile(yle.join(qh.get(Ld.CONFIG_PARAMS.ROOTPATH),Ld.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Ld.NODE_ERROR_CODES.ENOENT)za.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 za.error(`error in getHDBProcessInfo: ${t}`),e}}o(Xw,"getHDBProcessInfo");async function Zw(){let e={};try{if(!qh.get(Ld.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_DISK))return e;let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await dn.disksIO();e.io=i;let{rxSec:a,txSec:c,wxSec:l,...u}=await dn.fsStats();return e.read_write=u,e.size=await dn.fsSize(),e}catch(t){return za.error(`error in getDiskInfo: ${t}`),e}}o(Zw,"getDiskInfo");async function eO(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return qh.get(Ld.CONFIG_PARAMS.OPERATIONSAPI_SYSINFO_NETWORK)&&(e.default_interface=await dn.networkInterfaceDefault(),e.latency=await dn.inetChecksite("google.com"),(await dn.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:a,dhcp:c,dnsSuffix:l,ieee8021xAuth:u,ieee8021xState:d,carrierChanges:f,...m}=n;e.interfaces.push(m)}),(await dn.networkStats()).forEach(n=>{let{rxSec:s,txSec:i,ms:a,...c}=n;e.stats.push(c)})),e}catch(t){return za.error(`error in getNetworkInfo: ${t}`),e}}o(eO,"getNetworkInfo");async function tO(){if(vS!==void 0)return vS;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:a,...c}=await dn.osInfo();e=c;let l=await dn.versions("node, npm");return e.node_version=l.node,e.npm_version=l.npm,vS=e,vS}catch(t){return za.error(`error in getSystemInformation: ${t}`),e}}o(tO,"getSystemInformation");async function rO(){let e=[],t=await ble.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await Ale(n));return e}o(rO,"getTableSize");async function nO(){let e={};for(let t in zw){let r=e[t]={},n=r.tables={};for(let s in zw[t])try{let i=zw[t][s];if(!r.readers&&(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(l=>{let[u,d,f]=l.trim().split(" ");return{pid:u,thread:d,txnid:f}}),i.auditStore)){let{treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}=i.auditStore.getStats();r.audit={treeDepth:l,treeBranchPageCount:u,treeLeafPageCount:d,entryCount:f,overflowPages:m}}let a=i.primaryStore.getStats(),c={};for(let l of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[l]=a[l];n[s]=c}catch(i){za.notify(`Error getting stats for table ${s}: ${i}`)}}return e}o(nO,"getMetrics");async function J$(){if(qh.get(Ld.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await j$.getNATSReferences(),t=await j$.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let a={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(a)}return r}}o(J$,"getNatsStreamInfo");async function Nle(e){let t=new Ile;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tO(),t.time=jw(),t.cpu=await Qw(),t.memory=await Jw(),t.disk=await Zw(),t.network=await eO(),t.harperdb_processes=await Xw(),t.table_size=await rO(),t.metrics=await nO(),t.threads=await Q$(),t.replication=await J$(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tO();break;case"time":t.time=jw();break;case"cpu":t.cpu=await Qw();break;case"memory":t.memory=await Jw();break;case"disk":t.disk=await Zw();break;case"network":t.network=await eO();break;case"harperdb_processes":t.harperdb_processes=await Xw();break;case"table_size":t.table_size=await rO();break;case"database_metrics":case"metrics":t.metrics=await nO();break;case"threads":t.threads=await Q$();break;case"replication":t.replication=await J$();break;default:break}return t}o(Nle,"systemInformation")});var Bo=M((pve,rV)=>{"use strict";var wle=Mn(),sO=ie(),Ole=require("util"),Ll=(k(),v(K)),Z$=ce();Z$.initSync();var Cle=HN(),eV=on(),{Node:fve,NodeSubscription:mve}=Pd(),Ple=Bu(),Lle=G$(),{RemotePayloadObject:Dle,RemotePayloadSubscription:Mle}=Gh(),{handleHDBError:vle,hdbErrors:Ule}=Ee(),{HTTP_STATUS_CODES:xle,HDB_ERROR_MSGS:Ble}=Ule,Fle=ri(),Hle=Dd(),{packageJson:kle}=Rt(),{getDatabases:Gle}=(Le(),v(ft)),hve=Ole.promisify(Cle.authorize),qle=eV.searchByHash,$le=eV.searchByValue;rV.exports={isEmpty:Vle,getNodeRecord:Kle,upsertNodeRecord:Yle,buildNodePayloads:Wle,checkClusteringEnabled:zle,getAllNodeRecords:jle,getSystemInfo:Qle,reverseSubscription:tV};function Vle(e){return e==null}o(Vle,"isEmpty");async function Kle(e){let t=new Ple(Ll.SYSTEM_SCHEMA_NAME,Ll.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return qle(t)}o(Kle,"getNodeRecord");async function Yle(e){let t=new Lle(Ll.SYSTEM_SCHEMA_NAME,Ll.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return wle.upsert(t)}o(Yle,"upsertNodeRecord");function tV(e){if(sO.isEmpty(e.subscribe)||sO.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}o(tV,"reverseSubscription");function Wle(e,t,r,n){let s=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:l,table:u}=c,d=sO.getTableHashAttribute(l,u),{subscribe:f,publish:m}=tV(c),h=Gle()[l]?.[u],p=new Mle(l,u,d,m,f,c.start_time,h.schemaDefined?h.attributes:void 0);s.push(p)}return new Dle(r,t,s,n)}o(Wle,"buildNodePayloads");function zle(){if(!Z$.get(Ll.CONFIG_PARAMS.CLUSTERING_ENABLED))throw vle(new Error,Ble.CLUSTERING_NOT_ENABLED,xle.BAD_REQUEST,void 0,void 0,!0)}o(zle,"checkClusteringEnabled");async function jle(){let e=new Fle(Ll.SYSTEM_SCHEMA_NAME,Ll.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await $le(e))}o(jle,"getAllNodeRecords");async function Qle(){let e=await Hle.getSystemInformation();return{hdb_version:kle.version,node_version:e.node_version,platform:e.platform}}o(Qle,"getSystemInfo")});var iO=M((_ve,uV)=>{"use strict";var US=lr(),nV=ie(),sV=It(),iV=(k(),v(K)),xS=z(),oV=CS(),Jle=Um(),{RemotePayloadObject:Xle}=Gh(),{handleHDBError:aV,hdbErrors:Zle}=Ee(),{HTTP_STATUS_CODES:cV}=Zle,{NodeSubscription:lV}=Pd();uV.exports=eue;async function eue(e,t){let r;try{r=await US.request(`${t}.${sV.REQUEST_SUFFIX}`,new Xle(iV.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),xS.trace("Response from remote describe all request:",r)}catch(a){xS.error(`addNode received error from describe all request to remote node: ${a}`);let c=US.requestErrorHandler(a,"add_node",t);throw aV(new Error,c,cV.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===sV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw aV(new Error,a,cV.INTERNAL_SERVER_ERROR,"error",a)}let n=r.message,s=[],i=[];for(let a of e){let{table:c}=a,l=a.database??a.schema??"data";if(l===iV.SYSTEM_SCHEMA_NAME){await US.createLocalTableStream(l,c);let p=new lV(l,c,a.publish,a.subscribe);p.start_time=a.start_time,i.push(p);continue}let u=nV.doesSchemaExist(l),d=n[l]!==void 0,f=c?nV.doesTableExist(l,c):!0,m=c?n?.[l]?.[c]!==void 0:!0;if(!u&&!d||!f&&!m){s.push(a);continue}if(!u&&d&&(xS.trace(`addNode creating schema: ${l}`),await oV.createSchema({operation:"create_schema",schema:l})),!f&&m){xS.trace(`addNode creating table: ${c} in schema: ${l} with attributes ${JSON.stringify(n[l][c].attributes)}`);let p=new Jle(l,c,n[l][c].hash_attribute);n[l][c].attributes&&(p.attributes=n[l][c].attributes),await oV.createTable(p)}await US.createLocalTableStream(l,c);let h=new lV(l,c,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h)}return{added:i,skipped:s}}o(eue,"reviewSubscriptions")});var Md={};Ce(Md,{addNodeBack:()=>oO,removeNodeBack:()=>aO,setNode:()=>sue});async function sue(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=ui(t)):t=bS(r);let n=(0,fV.validateBySchema)(e,nue);if(n)throw(0,Fo.handleHDBError)(n,n.message,rue.BAD_REQUEST,void 0,void 0,!0);if(e.operation==="remove_node"){if(!t&&!r)throw new Fo.ClientError("url or hostname is required for remove_node operation");let h=r,p=$t(),_=await p.get(h);if(!_)throw new Fo.ClientError(h+" does not exist");try{await Bh({url:_.url},{operation:G.REMOVE_NODE_BACK,name:_?.subscriptions?.length>0?rt():h},void 0)}catch(g){ns.warn(`Error removing node from target node ${h}, 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 p.delete(h),`Successfully removed '${h}' from cluster`}if(!t)throw new Fo.ClientError("url required for this operation");let s=Ha();if(s==null)throw new Fo.ClientError("replication url is missing from harperdb-config.yaml");let i,a,c;if(t?.startsWith("wss:")){i=await(0,Ps.getReplicationCert)();let h=await(0,Ps.getReplicationCertAuth)();if(!i)throw new Error("Unable to find a certificate to use for replication");i.options.is_self_signed?(a=await(0,Ps.createCsr)(),ns.info("Sending CSR to target node:",t)):h&&(c=h.certificate,ns.info("Sending CA named",h.name,"to target node",t))}let l={operation:G.ADD_NODE_BACK,hostname:(0,Qa.get)(U.REPLICATION_HOSTNAME),target_hostname:r,url:s,csr:a,cert_auth:c,authorization:e.retain_authorization?e.authorization:null};if((0,Qa.get)(U.REPLICATION_SHARD)!==void 0&&(l.shard=(0,Qa.get)(U.REPLICATION_SHARD)),e.subscriptions?l.subscriptions=e.subscriptions.map(dV):l.subscriptions=null,e.hasOwnProperty("subscribe")||e.hasOwnProperty("publish")){let h=dV(e);l.subscribe=h.subscribe,l.publish=h.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 Bh({url:t},l,e)}catch(h){h.message=`Error returned from ${t}: `+h.message,ns.warn("Error adding node:",t,"to cluster:",h),d=h}if(a&&(!u?.certificate||!u?.certificate?.includes?.("BEGIN CERTIFICATE")))throw d?(d.message+=" and connection was required to sign certificate",d):new Error(`Unexpected certificate signature response from node ${t} response: ${JSON.stringify(u)}`);a&&(ns.info("CSR response received from node:",t,"saving certificate and CA in hdb_certificate"),await(0,Ps.setCertTable)({name:tue.certificateFromPem(u.signingCA).issuer.getField("CN").value,certificate:u.signingCA,is_authority:!0}),u.certificate&&await(0,Ps.setCertTable)({name:rt(),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),e.shard!==void 0&&(f.shard=e.shard),f.replicates){let h={url:s,ca:c,replicates:!0,subscriptions:null};(0,Qa.get)(U.REPLICATION_SHARD)!==void 0&&(h.shard=(0,Qa.get)(U.REPLICATION_SHARD)),e.retain_authorization&&(h.authorization=e.authorization),e.start_time&&(h.start_time=e.start_time),await Do(rt(),h)}await Do(u?u.nodeName:f.name??ui(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 oO(e){ns.trace("addNodeBack received request:",e);let t=await(0,Ps.signCertificate)(e),r;e.csr?(r=t.signingCA,ns.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,ns.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,Ps.getReplicationCertAuth)();if(n.replicates){let i={url:Ha(),ca:s?.certificate,replicates:!0,subscriptions:null};(0,Qa.get)(U.REPLICATION_SHARD)!==void 0&&(i.shard=(0,Qa.get)(U.REPLICATION_SHARD)),e.start_time&&(i.start_time=e.start_time),e.authorization&&(i.authorization=e.authorization),await Do(rt(),i)}return await Do(e.hostname,n),t.nodeName=rt(),t.usingCA=s?.certificate,ns.info("addNodeBack responding to:",e.url,"with CA named:",s?.name),t}async function aO(e){ns.trace("removeNodeBack received request:",e),await $t().delete(e.name)}function dV(e){let{subscribe:t,publish:r}=e;return{...e,subscribe:r,publish:t}}var Ps,fV,ja,Qa,ns,Fo,tue,rue,nue,vd=fe(()=>{Ps=w(rs()),fV=w(at()),ja=w(require("joi")),Qa=w(ce());k();Lh();bl();es();ns=w(z()),Fo=w(Ee()),{pki:tue}=require("node-forge"),{HTTP_STATUS_CODES:rue}=Fo.hdbErrors,nue=ja.default.object({hostname:ja.default.string(),verify_tls:ja.default.boolean(),replicates:ja.default.boolean(),subscriptions:ja.default.array(),revoked_certificates:ja.default.array(),shard:ja.default.number()});o(sue,"setNode");o(oO,"addNodeBack");o(aO,"removeNodeBack");o(dV,"reverseSubscription")});var GS=M((Nve,hV)=>{"use strict";var{handleHDBError:BS,hdbErrors:iue}=Ee(),{HTTP_STATUS_CODES:FS}=iue,{addUpdateNodeValidator:oue}=MS(),HS=z(),kS=(k(),v(K)),mV=It(),aue=ie(),$h=lr(),Vh=Bo(),cO=ce(),cue=iO(),{Node:lue,NodeSubscription:uue}=Pd(),{broadcast:due}=st(),{setNode:fue}=(vd(),v(Md)),bve=ce(),Ive=(k(),v(K)),mue="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",hue="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",pue=cO.get(kS.CONFIG_PARAMS.CLUSTERING_NODENAME);hV.exports=Eue;async function Eue(e,t=!1){if(HS.trace("addNode called with:",e),cO.get(kS.CONFIG_PARAMS.REPLICATION_URL)||cO.get(kS.CONFIG_PARAMS.REPLICATION_HOSTNAME))return fue(e);Vh.checkClusteringEnabled();let r=oue(e);if(r)throw BS(r,r.message,FS.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let f=await Vh.getNodeRecord(n);if(!aue.isEmptyOrZeroLength(f))throw BS(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,FS.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await cue(e.subscriptions,n),a={message:void 0,added:s,skipped:i};if(s.length===0)return a.message=mue,a;let c=Vh.buildNodePayloads(s,pue,kS.OPERATIONS_ENUM.ADD_NODE,await Vh.getSystemInfo()),l=[];for(let f=0,m=s.length;f<m;f++){let h=s[f];s[f].start_time===void 0&&delete s[f].start_time,l.push(new uue(h.schema,h.table,h.publish,h.subscribe))}HS.trace("addNode sending remote payload:",c);let u;try{u=await $h.request(`${n}.${mV.REQUEST_SUFFIX}`,c)}catch(f){HS.error(`addNode received error from request: ${f}`);for(let h=0,p=s.length;h<p;h++){let _=s[h];_.publish=!1,_.subscribe=!1,await $h.updateRemoteConsumer(_,n)}let m=$h.requestErrorHandler(f,"add_node",n);throw BS(new Error,m,FS.INTERNAL_SERVER_ERROR,"error",m)}if(u.status===mV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let f=`Error returned from remote node ${n}: ${u.message}`;throw BS(new Error,f,FS.INTERNAL_SERVER_ERROR,"error",f)}HS.trace(u);for(let f=0,m=s.length;f<m;f++){let h=s[f];await $h.updateRemoteConsumer(h,n),h.subscribe===!0&&await $h.updateConsumerIterator(h.schema,h.table,n,"start")}let d=new lue(n,l,u.system_info);return await Vh.upsertNodeRecord(d),due({type:"nats_update"}),i.length>0?a.message=hue:a.message=`Successfully added '${n}' to manifest`,a}o(Eue,"addNode")});var fO=M((Cve,EV)=>{"use strict";var{handleHDBError:lO,hdbErrors:_ue}=Ee(),{HTTP_STATUS_CODES:uO}=_ue,{addUpdateNodeValidator:gue}=MS(),Kh=z(),qS=(k(),v(K)),pV=It(),Ove=ie(),Yh=lr(),Wh=Bo(),dO=ce(),{cloneDeep:Sue}=require("lodash"),Tue=iO(),{Node:Rue,NodeSubscription:yue}=Pd(),{broadcast:Aue}=st(),{setNode:bue}=(vd(),v(Md)),Iue="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Nue="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",wue=dO.get(qS.CONFIG_PARAMS.CLUSTERING_NODENAME);EV.exports=Oue;async function Oue(e){if(Kh.trace("updateNode called with:",e),dO.get(qS.CONFIG_PARAMS.REPLICATION_URL)??dO.get(qS.CONFIG_PARAMS.REPLICATION_HOSTNAME))return bue(e);Wh.checkClusteringEnabled();let t=gue(e);if(t)throw lO(t,t.message,uO.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Wh.getNodeRecord(r);s.length>0&&(n=Sue(s));let{added:i,skipped:a}=await Tue(e.subscriptions,r),c={message:void 0,updated:i,skipped:a};if(i.length===0)return c.message=Iue,c;let l=Wh.buildNodePayloads(i,wue,qS.OPERATIONS_ENUM.UPDATE_NODE,await Wh.getSystemInfo());for(let d=0,f=i.length;d<f;d++){let m=i[d];Kh.trace(`updateNode updating work stream for node: ${r} subscription:`,m),i[d].start_time===void 0&&delete i[d].start_time}Kh.trace("updateNode sending remote payload:",l);let u;try{u=await Yh.request(`${r}.${pV.REQUEST_SUFFIX}`,l)}catch(d){Kh.error(`updateNode received error from request: ${d}`);let f=Yh.requestErrorHandler(d,"update_node",r);throw lO(new Error,f,uO.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===pV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${r}: ${u.message}`;throw lO(new Error,d,uO.INTERNAL_SERVER_ERROR,"error",d)}Kh.trace(u);for(let d=0,f=i.length;d<f;d++){let m=i[d];await Yh.updateRemoteConsumer(m,r),m.subscribe===!0?await Yh.updateConsumerIterator(m.schema,m.table,r,"start"):await Yh.updateConsumerIterator(m.schema,m.table,r,"stop")}return n||(n=[new Rue(r,[],u.system_info)]),await Cue(n[0],i,u.system_info),a.length>0?c.message=Nue:c.message=`Successfully updated '${r}'`,c}o(Oue,"updateNode");async function Cue(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let a=t[s],c=!1;for(let l=0,u=e.subscriptions.length;l<u;l++){let d=n.subscriptions[l];if(d.schema===a.schema&&d.table===a.table){d.publish=a.publish,d.subscribe=a.subscribe,c=!0;break}}c||n.subscriptions.push(new yue(a.schema,a.table,a.publish,a.subscribe))}n.system_info=r,await Wh.upsertNodeRecord(n),Aue({type:"nats_update"})}o(Cue,"updateNodeTable")});var RV=M((Lve,TV)=>{"use strict";var SV=require("joi"),{string:_V}=SV.types(),Pue=at(),gV=(k(),v(K)),Lue=ce(),Due=It();TV.exports=Mue;function Mue(e){let t=_V.invalid(Lue.get(gV.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Due.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=SV.object({operation:_V.valid(gV.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return Pue.validateBySchema(e,r)}o(Mue,"removeNodeValidator")});var $S=M((Mve,NV)=>{"use strict";var{handleHDBError:yV,hdbErrors:vue}=Ee(),{HTTP_STATUS_CODES:AV}=vue,Uue=RV(),zh=z(),bV=Bo(),xue=ie(),Ud=(k(),v(K)),IV=It(),mO=lr(),hO=ce(),{RemotePayloadObject:Bue}=Gh(),{NodeSubscription:Fue}=Pd(),Hue=vm(),kue=dl(),{broadcast:Gue}=st(),{setNode:que}=(vd(),v(Md)),$ue=hO.get(Ud.CONFIG_PARAMS.CLUSTERING_NODENAME);NV.exports=Vue;async function Vue(e){if(zh.trace("removeNode called with:",e),hO.get(Ud.CONFIG_PARAMS.REPLICATION_URL)??hO.get(Ud.CONFIG_PARAMS.REPLICATION_HOSTNAME))return que(e);bV.checkClusteringEnabled();let t=Uue(e);if(t)throw yV(t,t.message,AV.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await bV.getNodeRecord(r);if(xue.isEmptyOrZeroLength(n))throw yV(new Error,`Node '${r}' was not found.`,AV.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new Bue(Ud.OPERATIONS_ENUM.REMOVE_NODE,$ue,[]),i,a=!1;for(let l=0,u=n.subscriptions.length;l<u;l++){let d=n.subscriptions[l];d.subscribe===!0&&await mO.updateConsumerIterator(d.schema,d.table,r,"stop");try{await mO.updateRemoteConsumer(new Fue(d.schema,d.table,!1,!1),r)}catch(f){zh.error(f)}}try{i=await mO.request(`${r}.${IV.REQUEST_SUFFIX}`,s),zh.trace("Remove node reply from remote node:",r,i)}catch(l){zh.error("removeNode received error from request:",l),a=!0}let c=new Hue(Ud.SYSTEM_SCHEMA_NAME,Ud.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await kue.deleteRecord(c),Gue({type:"nats_update"}),i?.status===IV.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(zh.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}o(Vue,"removeNode")});var CV=M((Uve,OV)=>{"use strict";var wV=require("joi"),{string:Kue,array:Yue}=wV.types(),Wue=at(),zue=MS();OV.exports=jue;function jue(e){let t=wV.object({operation:Kue.valid("configure_cluster").required(),connections:Yue.items(zue.validationSchema).required()});return Wue.validateBySchema(e,t)}o(jue,"configureClusterValidator")});var pO=M((Bve,vV)=>{"use strict";var PV=(k(),v(K)),VS=z(),Que=ie(),Jue=ce(),Xue=$S(),Zue=GS(),ede=Bo(),tde=CV(),{handleHDBError:LV,hdbErrors:rde}=Ee(),{HTTP_STATUS_CODES:DV}=rde,nde="Configure cluster complete.",sde="Failed to configure the cluster. Check the logs for more details.",ide="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";vV.exports=ode;async function ode(e){VS.trace("configure cluster called with:",e);let t=tde(e);if(t)throw LV(t,t.message,DV.BAD_REQUEST,void 0,void 0,!0);let r=await ede.getAllNodeRecords(),n=[];if(Jue.get(PV.CONFIG_PARAMS.CLUSTERING_ENABLED)){for(let d=0,f=r.length;d<f;d++){let m=await MV(Xue,{operation:PV.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[d].name},r[d].name);n.push(m)}VS.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 MV(Zue,f,f.node_name);s.push(m)}VS.trace("All results from configure_cluster add node:",s);let a=[],c=[],l=!1,u=n.concat(s);for(let d=0,f=u.length;d<f;d++){let m=u[d];m.status==="rejected"&&(VS.error(m.node_name,m?.error?.message,m?.error?.stack),a.includes(m.node_name)||a.push(m.node_name)),(m?.result?.message?.includes?.("Successfully")||m?.result?.includes?.("Successfully"))&&(l=!0),!(typeof m.result=="string"&&m.result.includes("Successfully removed")||m.status==="rejected")&&c.push({node_name:m?.node_name,response:m?.result})}if(Que.isEmptyOrZeroLength(a))return{message:nde,connections:c};if(l)return{message:ide,failed_nodes:a,connections:c};throw LV(new Error,sde,DV.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(ode,"configureCluster");async function MV(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}o(MV,"functionWrapper")});var FV=M((Hve,BV)=>{"use strict";var jh=require("joi"),ade=at(),{validateSchemaExists:UV,validateTableExists:cde,validateSchemaName:xV}=Di(),lde=jh.object({operation:jh.string().valid("purge_stream"),schema:jh.string().custom(UV).custom(xV).optional(),database:jh.string().custom(UV).custom(xV).optional(),table:jh.string().custom(cde).required()});function ude(e){return ade.validateBySchema(e,lde)}o(ude,"purgeStreamValidator");BV.exports=ude});var EO=M((Gve,HV)=>{"use strict";var{handleHDBError:dde,hdbErrors:fde}=Ee(),{HTTP_STATUS_CODES:mde}=fde,hde=FV(),pde=lr(),Ede=Bo();HV.exports=_de;async function _de(e){e.schema=e.schema??e.database;let t=hde(e);if(t)throw dde(t,t.message,mde.BAD_REQUEST,void 0,void 0,!0);Ede.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await pde.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}o(_de,"purgeStream")});var SO=M(($ve,YV)=>{"use strict";var gO=Bo(),gde=lr(),YS=ce(),xd=(k(),v(K)),Dl=It(),Sde=ie(),_O=z(),{RemotePayloadObject:Tde}=Gh(),{ErrorCode:kV}=require("nats"),{parentPort:GV}=require("worker_threads"),{onMessageByType:Rde}=st(),{getThisNodeName:yde}=(es(),v(vo)),{requestClusterStatus:Ade}=(Lh(),v(fq)),{getReplicationSharedStatus:bde,getHDBNodeTable:Ide}=(bl(),v(aw)),{CONFIRMATION_STATUS_POSITION:Nde,RECEIVED_VERSION_POSITION:wde,RECEIVED_TIME_POSITION:Ode,SENDING_TIME_POSITION:Cde}=(Pw(),v(Zq)),qV=YS.get(xd.CONFIG_PARAMS.CLUSTERING_ENABLED),$V=YS.get(xd.CONFIG_PARAMS.CLUSTERING_NODENAME);YV.exports={clusterStatus:Pde,buildNodeStatus:KV};var VV;Rde("cluster-status",async e=>{VV(e)});async function Pde(){if(YS.get(xd.CONFIG_PARAMS.REPLICATION_URL)||YS.get(xd.CONFIG_PARAMS.REPLICATION_HOSTNAME)){let n;if(GV){GV.postMessage({type:"request-cluster-status"}),n=await new Promise(i=>{VV=i});for(let i of n.connections){let a=i.name;for(let c of i.database_sockets){let l=c.database,u;for(let f of Object.values(databases[l]||{}))if(u=f.auditStore,u)break;if(!u)continue;let d=bde(u,l,a);c.lastCommitConfirmed=KS(d[Nde]),c.lastReceivedRemoteTime=KS(d[wde]),c.lastReceivedLocalTime=KS(d[Ode]),c.sendingMessage=KS(d[Cde])}}}else n=Ade();n.node_name=yde();let s=Ide().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:$V,is_enabled:qV,connections:[]};if(!qV)return e;let t=await gO.getAllNodeRecords();if(Sde.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(KV(t[n],e.connections));return await Promise.allSettled(r),e}o(Pde,"clusterStatus");function KS(e){return e?e===1?"Copying":new Date(e).toUTCString():void 0}o(KS,"asDate");async function KV(e,t){let r=e.name,n=new Tde(xd.OPERATIONS_ENUM.CLUSTER_STATUS,$V,void 0,await gO.getSystemInfo()),s,i,a=Dl.CLUSTER_STATUS_STATUSES.OPEN;try{let l=Date.now();s=await gde.request(Dl.REQUEST_SUBJECT(r),n),i=Date.now()-l,s.status===Dl.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=Dl.CLUSTER_STATUS_STATUSES.CLOSED,_O.error(`Error getting node status from ${r} `,s))}catch(l){_O.warn(`Error getting node status from ${r}`,l),l.code===kV.NoResponders?a=Dl.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:l.code===kV.Timeout?a=Dl.CLUSTER_STATUS_STATUSES.TIMEOUT:a=Dl.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Lde(r,a,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let l={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==xd.PRE_4_0_0_VERSION&&await gO.upsertNodeRecord(l)}catch(l){_O.error("Cluster status encountered an error updating system info for node:",r,l)}t.push(c)}o(KV,"buildNodeStatus");function Lde(e,t,r,n,s,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=a,this.system_info=c}o(Lde,"NodeStatusObject")});var RO=M((Kve,WV)=>{"use strict";var{handleHDBError:Dde,hdbErrors:Mde}=Ee(),{HTTP_STATUS_CODES:vde}=Mde,Ude=lr(),xde=Bo(),TO=ie(),WS=require("joi"),Bde=at(),Fde=2e3,Hde=WS.object({timeout:WS.number().min(1),connected_nodes:WS.boolean(),routes:WS.boolean()});WV.exports=kde;async function kde(e){xde.checkClusteringEnabled();let t=Bde.validateBySchema(e,Hde);if(t)throw Dde(t,t.message,vde.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||TO.autoCastBoolean(n),a=s===void 0||TO.autoCastBoolean(s),c={nodes:[]},l=await Ude.getServerList(r??Fde),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,h=l[d].data;if(m.name.endsWith("-hub")){let p={name:m.name.slice(0,-4),response_time:l[d].response_time};i&&(p.connected_nodes=[],u[m.name]&&u[m.name].forEach(_=>{p.connected_nodes.includes(_.name.slice(0,-4))||p.connected_nodes.push(_.name.slice(0,-4))})),a&&(p.routes=h.cluster?.urls?h.cluster?.urls.map(_=>({host:_.split(":")[0],port:TO.autoCast(_.split(":")[1])})):[]),c.nodes.push(p)}}return c}o(kde,"clusterNetwork")});var JV=M((Wve,QV)=>{"use strict";var yO=require("joi"),zV=at(),{routeConstraints:jV}=ky();QV.exports={setRoutesValidator:Gde,deleteRoutesValidator:qde};function Gde(e){let t=yO.object({server:yO.valid("hub","leaf"),routes:jV.required()});return zV.validateBySchema(e,t)}o(Gde,"setRoutesValidator");function qde(e){let t=yO.object({routes:jV.required()});return zV.validateBySchema(e,t)}o(qde,"deleteRoutesValidator")});var zS=M((jve,s1)=>{"use strict";var Ho=yt(),AO=ie(),Ls=(k(),v(K)),Bd=ce(),XV=JV(),{handleHDBError:ZV,hdbErrors:$de}=Ee(),{HTTP_STATUS_CODES:e1}=$de,t1="cluster routes successfully set",r1="cluster routes successfully deleted";s1.exports={setRoutes:Kde,getRoutes:Yde,deleteRoutes:Wde};function Vde(e){let t=Ho.getClusteringRoutes(),r=e.server==="hub"?t.hub_routes:t.leaf_routes,n=e.server==="hub"?t.leaf_routes:t.hub_routes,s=[],i=[];for(let a=0,c=e.routes.length;a<c;a++){let l=e.routes[a];l.port=AO.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"?Ho.updateConfigValue(Ls.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r):Ho.updateConfigValue(Ls.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,r),{message:t1,set:i,skipped:s}}o(Vde,"setRoutesNats");function Kde(e){let t=XV.setRoutesValidator(e);if(t)throw ZV(t,t.message,e1.BAD_REQUEST,void 0,void 0,!0);if(Bd.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED))return Vde(e);let r=[],n=[],s=Bd.get(Ls.CONFIG_PARAMS.REPLICATION_ROUTES)??[];return e.routes.forEach(i=>{n1(s,i)?n.push(i):(s.push(i),r.push(i))}),Ho.updateConfigValue(Ls.CONFIG_PARAMS.REPLICATION_ROUTES,s),{message:t1,set:r,skipped:n}}o(Kde,"setRoutes");function n1(e,t){return typeof t=="string"?e.includes(t):typeof t=="object"&&t!==null?e.some(r=>(r.host===t.host||r.hostname===t.hostname)&&r.port===t.port):!1}o(n1,"existsInArray");function Yde(){if(Bd.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED)){let e=Ho.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}else return Bd.get(Ls.CONFIG_PARAMS.REPLICATION_ROUTES)??[]}o(Yde,"getRoutes");function Wde(e){let t=XV.deleteRoutesValidator(e);if(t)throw ZV(t,t.message,e1.BAD_REQUEST,void 0,void 0,!0);if(Bd.get(Ls.CONFIG_PARAMS.CLUSTERING_ENABLED))return zde(e);let r=[],n=[],s=Bd.get(Ls.CONFIG_PARAMS.REPLICATION_ROUTES)??[],i=[];return s.forEach(a=>{n1(e.routes,a)?r.push(a):(i.push(a),n.push(a))}),Ho.updateConfigValue(Ls.CONFIG_PARAMS.REPLICATION_ROUTES,i),{message:r1,deleted:r,skipped:n}}o(Wde,"deleteRoutes");function zde(e){let t=Ho.getClusteringRoutes(),r=t.hub_routes,n=t.leaf_routes,s=[],i=[],a=!1,c=!1;for(let l=0,u=e.routes.length;l<u;l++){let d=e.routes[l],f=!1;for(let m=0,h=r.length;m<h;m++){let p=r[m];if(d.host===p.host&&d.port===p.port){r.splice(m,1),f=!0,a=!0,s.push(d);break}}if(!f){let m=!0;for(let h=0,p=n.length;h<p;h++){let _=n[h];if(d.host===_.host&&d.port===_.port){n.splice(h,1),c=!0,m=!1,s.push(d);break}}m&&i.push(d)}}return a&&(r=AO.isEmptyOrZeroLength(r)?null:r,Ho.updateConfigValue(Ls.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,r)),c&&(n=AO.isEmptyOrZeroLength(n)?null:n,Ho.updateConfigValue(Ls.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:r1,deleted:s,skipped:i}}o(zde,"deleteRoutesNats")});var o1=M((Jve,i1)=>{"use strict";var Qh=require("alasql"),Ml=require("recursive-iterator"),mi=z(),jde=ie(),Jh=(k(),v(K)),bO=class{static{o(this,"sqlStatementBucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Jde(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=>Jh.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=>!Jh.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,a=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][Jh.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=Qde(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(u=>({attribute_name:u.attribute}));let l=this.affected_attributes.get(i).get(a).filter(u=>!Jh.SEARCH_WILDCARDS.includes(u));c.forEach(({attribute_name:u})=>{let d=new Qh.yy.Column({columnid:u});s.tableid&&(d.tableid=s.tableid),this.ast.columns.push(d),l.includes(u)||l.push(u)}),this.affected_attributes.get(i).set(a,l)}}),this.ast}};function Qde(e){return e.filter(t=>t[Jh.PERMS_CRUD_ENUM.READ])}o(Qde,"filterReadRestrictedAttrs");function Jde(e,t,r,n,s){Xde(e,t,r,n,s)}o(Jde,"interpretAST");function Xh(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,a=e.tableid;e.as&&(a=e.as),s.set(a,i)}}o(Xh,"addSchemaTableToMap");function Xde(e,t,r,n,s){if(!e){mi.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Qh.yy.Insert?rfe(e,t,r):e instanceof Qh.yy.Select?Zde(e,t,r,n,s):e instanceof Qh.yy.Update?efe(e,t,r):e instanceof Qh.yy.Delete?tfe(e,t,r):mi.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(Xde,"getRecordAttributesAST");function Zde(e,t,r,n,s){if(!e){mi.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(jde.isEmptyOrZeroLength(i)){mi.error("No schema specified");return}e.from.forEach(c=>{Xh(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Xh(c.table,t,r,n,s)});let a=new Ml(e.columns);for(let{node:c}of a)if(c&&c.columnid){let l=c.tableid,u=n.has(l)?n.get(l):i;if(l||(l=e.from[0].tableid),!t.get(u).has(l))if(r.has(l))l=r.get(l);else{mi.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 Ml(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{mi.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 Ml(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{mi.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 Ml(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{mi.info(`table specified as ${u} not found.`);return}t.get(d).get(u).indexOf(l.columnid)<0&&t.get(d).get(u).push(l.columnid)}}}o(Zde,"getSelectAttributes");function efe(e,t,r){if(!e){mi.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new Ml(e.columns),s=e.table.databaseid;Xh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IO(e.table.tableid,s,i.columnid,t,r)}o(efe,"getUpdateAttributes");function tfe(e,t,r){if(!e){mi.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new Ml(e.where),s=e.table.databaseid;Xh(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&IO(e.table.tableid,s,i.columnid,t,r)}o(tfe,"getDeleteAttributes");function rfe(e,t,r){if(!e){mi.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new Ml(e.columns),s=e.into.databaseid;Xh(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&IO(e.into.tableid,s,i.columnid,t,r)}o(rfe,"getInsertAttributes");function IO(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}o(IO,"pushAttribute");i1.exports=bO});var c1=M((Zve,a1)=>{"use strict";var jS=(k(),v(K)),QS=class{static{o(this,"BaseLicense")}constructor(t=0,r=jS.RAM_ALLOCATION_ENUM.DEFAULT,n=jS.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},NO=class extends QS{static{o(this,"ExtendedLicense")}constructor(t=0,r=jS.RAM_ALLOCATION_ENUM.DEFAULT,n=jS.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};a1.exports={BaseLicense:QS,ExtendedLicense:NO}});var kd=M((tUe,h1)=>{"use strict";var Hd=require("fs-extra"),JS=(cg(),v(ag)),u1=require("crypto"),nfe=require("moment"),sfe=require("uuid").v4,fn=z(),OO=require("path"),ife=ie(),vl=(k(),v(K)),{totalmem:l1}=require("os"),ofe=c1().ExtendedLicense,Fd="invalid license key format",afe="061183",cfe="mofi25",lfe="aes-256-cbc",ufe=16,dfe=32,d1=ce(),{resolvePath:f1}=yt();d1.initSync();var wO;h1.exports={validateLicense:m1,generateFingerPrint:mfe,licenseSearch:LO,getLicense:Efe,checkMemoryLimit:_fe};function CO(){return OO.join(d1.getHdbBasePath(),vl.LICENSE_KEY_DIR_NAME,vl.LICENSE_FILE_NAME)}o(CO,"getLicenseDirPath");function ffe(){let e=CO();return f1(OO.join(e,vl.LICENSE_FILE_NAME))}o(ffe,"getLicenseFilePath");function PO(){let e=CO();return f1(OO.join(e,vl.REG_KEY_FILE_NAME))}o(PO,"getFingerPrintFilePath");async function mfe(){let e=PO();try{return await Hd.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await hfe();throw fn.error(`Error writing fingerprint file to ${e}`),fn.error(t),new Error("There was an error generating the fingerprint")}}o(mfe,"generateFingerPrint");async function hfe(){let e=sfe(),t=JS.hash(e,JS.HASH_FUNCTION.MD5),r=PO();try{await Hd.mkdirp(CO()),await Hd.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw fn.error(`Error writing fingerprint file to ${r}`),fn.error(n),new Error("There was an error generating the fingerprint")}return t}o(hfe,"writeFingerprint");function m1(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:vl.RAM_ALLOCATION_ENUM.DEFAULT,version:vl.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return fn.error("empty license key passed to validate."),r;let n=PO(),s=!1;try{s=Hd.statSync(n)}catch(i){fn.error(i)}if(s){let i;try{i=Hd.readFileSync(n,"utf8")}catch{fn.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(cfe),c=a[1];c=Buffer.concat([Buffer.from(c)],ufe);let l=Buffer.concat([Buffer.from(i)],dfe),u=u1.createDecipheriv(lfe,l,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let d=null;try{d=u.update(a[0],"hex","utf8"),d.trim(),d+=u.final("utf8")}catch{let h=pfe(a[0],i);if(h)d=h;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Fd),fn.error(Fd),new Error(Fd)}let f;if(isNaN(d))try{f=JSON.parse(d),r.version=f.version,r.exp_date=f.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),f.ram_allocation&&(r.ram_allocation=f.ram_allocation)}catch{throw console.error(Fd),fn.error(Fd),new Error(Fd)}else r.exp_date=d;r.exp_date<nfe().valueOf()&&(r.valid_date=!1),JS.validate(a[1],`${afe}${i}${t}`,JS.HASH_FUNCTION.MD5)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||fn.error("Invalid licence"),r}o(m1,"validateLicense");function pfe(e,t){try{let r=u1.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{fn.warn("Check old license failed")}}o(pfe,"checkOldLicense");function LO(){let e=new ofe,t=[];try{t=Hd.readFileSync(ffe(),"utf-8").split(`\r
18
+ `)}catch(r){r.code==="ENOENT"?fn.debug("no license file found"):fn.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(ife.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=m1(s.license_key,s.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(s){fn.error("There was an error parsing the license string."),fn.error(s),e.ram_allocation=vl.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return wO=e,e}o(LO,"licenseSearch");async function Efe(){return wO||await LO(),wO}o(Efe,"getLicense");function _fe(){let e=LO().ram_allocation,t=process.constrainedMemory?.()||l1();if(t=Math.round(Math.min(t,l1())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}o(_fe,"checkMemoryLimit")});var vO=M((nUe,g1)=>{var XS=kd(),p1=require("chalk"),ss=z(),E1=require("prompt"),{promisify:gfe}=require("util"),DO=(k(),v(K)),Sfe=require("fs-extra"),Tfe=require("path"),Rfe=ie(),{packageJson:yfe}=Rt(),_1=ce();_1.initSync();var Afe=require("moment"),bfe=gfe(E1.get),Ife=Tfe.join(_1.getHdbBasePath(),DO.LICENSE_KEY_DIR_NAME,DO.LICENSE_FILE_NAME,DO.LICENSE_FILE_NAME);g1.exports={getFingerprint:wfe,setLicense:Nfe,parseLicense:MO,register:Ofe,getRegistrationInfo:Pfe};async function Nfe(e){if(e&&e.key&&e.company){try{ss.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await MO(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw ss.error(r),ss.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(Nfe,"setLicense");async function wfe(){let e={};try{e=await XS.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw ss.error(r),ss.error(t),new Error(r)}return e}o(wfe,"getFingerprint");async function MO(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");ss.info("Validating license input...");let r=XS.validateLicense(e,t);if(ss.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(ss.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(ss.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{ss.info("writing license to disk"),await Sfe.writeFile(Ife,JSON.stringify({license_key:e,company:t}))}catch(n){throw ss.error("Failed to write License"),n}return"Registration successful."}o(MO,"parseLicense");async function Ofe(){let e=await Cfe();return MO(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(Ofe,"register");async function Cfe(){let e=await XS.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:p1.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:p1.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{E1.start()}catch(n){ss.error(n)}let r;try{r=await bfe(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}o(Cfe,"promptForRegistration");async function Pfe(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await XS.getLicense()}catch(r){throw ss.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Rfe.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=yfe.version,e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Afe.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(Pfe,"getRegistrationInfo")});var T1=M((iUe,S1)=>{"use strict";var Lfe=It(),UO=class{static{o(this,"HubConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f,m,h,p){this.port=t,a===null&&(a=void 0),this.server_name=r+Lfe.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l},this.leafnodes={port:u,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c}},this.cluster={name:d,port:f,routes:m,tls:{cert_file:s,key_file:i,ca_file:a,insecure:c,verify:l}},this.accounts={SYS:{users:h},HDB:{users:p}},this.system_account="SYS"}};S1.exports=UO});var A1=M((aUe,y1)=>{"use strict";var R1=It(),xO=class{static{o(this,"LeafConfigObject")}constructor(t,r,n,s,i,a,c,l,u,d,f){this.port=t,f===null&&(f=void 0),this.server_name=r+R1.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+R1.SERVER_SUFFIX.LEAF},this.tls={cert_file:u,key_file:d,ca_file:f,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:f,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:f,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:l,jetstream:"enabled"}},this.system_account="SYS"}};y1.exports=xO});var I1=M((lUe,b1)=>{"use strict";var BO=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};b1.exports=BO});var w1=M((dUe,N1)=>{"use strict";var Dfe=It(),FO=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+Dfe.SERVER_SUFFIX.ADMIN,this.password=r}};N1.exports=FO});var rT=M((mUe,P1)=>{"use strict";var Ul=require("path"),xl=require("fs-extra"),Mfe=T1(),vfe=A1(),Ufe=I1(),xfe=w1(),HO=Jn(),qd=ie(),Un=yt(),eT=(k(),v(K)),Zh=It(),{CONFIG_PARAMS:Zt}=eT,$d=z(),ep=ce(),O1=xi(),kO=lr(),Bfe=rs(),Gd="clustering",Ffe=1e4,C1=50;P1.exports={generateNatsConfig:kfe,removeNatsConfig:Gfe,getHubConfigPath:Hfe};function Hfe(){let e=ep.get(Zt.ROOTPATH);return Ul.join(e,Gd,Zh.NATS_CONFIG_FILES.HUB_SERVER)}o(Hfe,"getHubConfigPath");async function kfe(e=!1,t=void 0){console.error("Warning: NATS replication is deprecated and will be removed in version 5.0 of Harper");let r=ep.get(Zt.ROOTPATH);xl.ensureDirSync(Ul.join(r,"clustering","leaf")),ep.initSync();let n=Un.getConfigFromFile(Zt.CLUSTERING_TLS_CERT_AUTH),s=Un.getConfigFromFile(Zt.CLUSTERING_TLS_PRIVATEKEY),i=Un.getConfigFromFile(Zt.CLUSTERING_TLS_CERTIFICATE);!await xl.exists(i)&&!await xl.exists(!n)&&await Bfe.createNatsCerts();let a=Ul.join(r,Gd,Zh.PID_FILES.HUB),c=Ul.join(r,Gd,Zh.PID_FILES.LEAF),l=Un.getConfigFromFile(Zt.CLUSTERING_LEAFSERVER_STREAMS_PATH),u=Ul.join(r,Gd,Zh.NATS_CONFIG_FILES.HUB_SERVER),d=Ul.join(r,Gd,Zh.NATS_CONFIG_FILES.LEAF_SERVER),f=Un.getConfigFromFile(Zt.CLUSTERING_TLS_INSECURE),m=Un.getConfigFromFile(Zt.CLUSTERING_TLS_VERIFY),h=Un.getConfigFromFile(Zt.CLUSTERING_NODENAME),p=Un.getConfigFromFile(Zt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await kO.checkNATSServerInstalled()||tT("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let _=await HO.listUsers(),g=Un.getConfigFromFile(Zt.CLUSTERING_USER),y=await HO.getClusterUser();(qd.isEmpty(y)||y.active!==!0)&&tT(`Invalid cluster user '${cluster_username}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await ZS(Zt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ZS(Zt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ZS(Zt.CLUSTERING_HUBSERVER_NETWORK_PORT),await ZS(Zt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let T=[],R=[];for(let[j,V]of _.entries())V.role?.role===eT.ROLE_TYPES_ENUM.CLUSTER_USER&&V.active&&(T.push(new xfe(V.username,O1.decrypt(V.hash))),R.push(new Ufe(V.username,O1.decrypt(V.hash))));let I=[],{hub_routes:P}=Un.getClusteringRoutes();if(!qd.isEmptyOrZeroLength(P))for(let j of P)I.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${j.host}:${j.port}`);let Y=new Mfe(Un.getConfigFromFile(Zt.CLUSTERING_HUBSERVER_NETWORK_PORT),h,a,i,s,n,f,m,p,Un.getConfigFromFile(Zt.CLUSTERING_HUBSERVER_CLUSTER_NAME),Un.getConfigFromFile(Zt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,T,R);n==null&&(delete Y.tls.ca_file,delete Y.leafnodes.tls.ca_file),t=qd.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===eT.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await xl.writeJson(u,Y),$d.trace(`Hub server config written to ${u}`));let te=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,x=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${p}`,$=new vfe(Un.getConfigFromFile(Zt.CLUSTERING_LEAFSERVER_NETWORK_PORT),h,c,l,[te],[x],T,R,i,s,n,f);n==null&&delete $.tls.ca_file,(t===void 0||t===eT.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await xl.writeJson(d,$),$d.trace(`Leaf server config written to ${d}`))}o(kfe,"generateNatsConfig");async function ZS(e){let t=ep.get(e);return qd.isEmpty(t)&&tT(`port undefined for '${e}'`),await qd.isPortTaken(t)&&tT(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}o(ZS,"isPortAvailable");function tT(e){let t=`Error generating clustering config: ${e}`;$d.error(t),console.error(t),process.exit(1)}o(tT,"generateNatsConfigError");async function Gfe(e){let{port:t,config_file:r}=kO.getServerConfig(e),{username:n,decrypt_hash:s}=await HO.getClusterUser(),i=0,a=2e3;for(;i<C1;){try{let d=await kO.createConnection(t,n,s,!1);if(d.protocol.connected===!0){d.close();break}}catch(d){$d.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${d}`)}if(i++,i>=C1)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);let u=a*(i*2);u>3e4&&$d.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await qd.asyncSetTimeout(u)}let c="0".repeat(Ffe),l=Ul.join(ep.get(Zt.ROOTPATH),Gd,r);await xl.writeFile(l,c),await xl.remove(l),$d.notify(e,"started.")}o(Gfe,"removeNatsConfig")});var $O={};Ce($O,{compactOnStart:()=>qfe,copyDb:()=>x1});async function qfe(){Ja.notify("Running compact on start"),console.log("Running compact on start");let e=(0,GO.get)(U.ROOTPATH),t=new Map,r=it();(0,qO.updateConfigValue)(U.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,nT.join)(e,"backup",n+".mdb"),a=(0,nT.join)(e,Pc,n+"-copy.mdb"),c=0;try{c=await L1(n),console.log("Database",n,"before compact has a total record count of",c)}catch(l){Ja.error("Error getting record count for database",n,l),console.error("Error getting record count for database",n,l)}t.set(n,{dbPath:s,copyDest:a,backupDest:i,recordCount:c}),await x1(n,a),console.log("Backing up",n,"to",i);try{await(0,Bl.move)(s,i,{overwrite:!0})}catch(l){console.log("Error moving database",s,"to",i,l)}}try{Zu()}catch(n){Ja.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,Bl.move)(i,s,{overwrite:!0}),await(0,Bl.remove)((0,nT.join)(e,Pc,`${n}-copy.mdb-lock`));try{Zu()}catch(n){Ja.error("Error resetting databases after backup",n),console.error("Error resetting databases after backup",n),process.exit(0)}}catch(n){Ja.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,qO.updateConfigValue)(U.STORAGE_COMPACTONSTART,!1);for(let[s,{dbPath:i,backupDest:a}]of t){console.error("Moving backup database",a,"back to",i);try{await(0,Bl.move)(a,i,{overwrite:!0})}catch(c){console.error(c)}}throw Zu(),n}for(let[n,{backupDest:s,recordCount:i}]of t){let a=!0,c=await L1(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){a=!1;let l=`There is a discrepancy between pre and post compact record count for database ${n}.
19
19
  Total record count before compaction: ${i}, total after: ${c}.
20
- Database backup has not been removed and can be found here: ${s}`;Qa.error(l),console.error(l)}(0,kO.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,xl.remove)(s))}}async function w1(e){let t=await(0,L1.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function D1(e,t){console.log("copyDb start");let r=it()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,a=(0,O1.open)(new C1.default(t)),c=a.openDB(nT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:h}of s.getRange({transaction:d})){let p=h.is_hash_attribute||h.isPrimaryKey,_,g;if(p&&(_=h.compression,g=Lg(),g?h.compression=g:delete h.compression,_?.dictionary?.toString()===g?.dictionary?.toString()&&(_=null,g=null)),c.put(m,h),!(p||h.indexed))continue;let y=new P1.default(!p,p);y.encoding="binary",y.compression=_;let T=n.openDB(m,y);T.decoder=null,T.decoderCopies=!1,T.encoding="binary",y.compression=g;let R=a.openDB(m,y);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(T,R,p,d)}if(i){let m=n.openDB(nT.AUDIT_STORE_NAME,um);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,h,p,_){let g=0,y=0,T=1e7,R=null;for(;T-- >0;)try{for(let I of m.getKeys({start:R,transaction:_}))try{R=I;let{value:P,version:Y}=m.getEntry(I,{transaction:_});l=h.put(I,P,p?Y:void 0),g++,_.openTimer&&(_.openTimer=0),y+=(I?.length||10)+P.length,u++>5e3&&(await l,console.log("copied",g,"entries",y,"bytes"),u=0)}catch(P){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,P)}console.log("finish copying, copied",g,"entries",y,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var O1,rT,xl,kO,C1,P1,nT,L1,GO,Qa,$O=fe(()=>{Le();O1=require("lmdb"),rT=require("path"),xl=require("fs-extra"),kO=w(ce()),C1=w(Rm()),P1=w(Tm()),nT=w(kt());k();uo();L1=w(Ca()),GO=w(yt()),Qa=w(z());o(Bfe,"compactOnStart");o(w1,"getTotalDBRecordCount");o(D1,"copyDb")});var Kd=M((_Ue,H1)=>{"use strict";var Ffe=require("minimist"),{isMainThread:KO,parentPort:rp,threadId:hUe}=require("worker_threads"),dt=(k(),v(K)),Yi=z(),YO=ie(),iT=tT(),sT=lr(),pUe=It(),x1=yt(),hi=Yd(),M1=Dd(),{compactOnStart:Hfe}=($O(),v(qO)),kfe=Pc(),{restartWorkers:oT,onMessageByType:Gfe}=st(),{handleHDBError:qfe,hdbErrors:$fe}=Ee(),{HTTP_STATUS_CODES:Vfe}=$fe,np=ce(),{sendOperationToNode:v1,getThisNodeName:Kfe,monitorNodeCAs:Yfe}=(es(),v(vo)),{getHDBNodeTable:EUe}=(Al(),v(ow));np.initSync();var tp=`Restarting HarperDB. This may take up to ${dt.RESTART_TIMEOUT_MS/1e3} seconds.`,Wfe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",U1="Clustering is not enabled so cannot be restarted",zfe="Invalid service",Vd,Ds;H1.exports={restart:B1,restartService:WO};KO&&Gfe(dt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await WO({service:e.workerType}):B1({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function B1(e){Ds=Object.keys(e).length===0,Vd=await hi.isServiceRegistered(dt.PROCESS_DESCRIPTORS.HDB);let t=Ffe(process.argv);if(t.service){await WO(t);return}if(Ds&&!Vd){console.error(Wfe);return}if(Ds&&console.log(tp),Vd){hi.enterPM2Mode(),Yi.notify(tp);let r=kfe(Object.keys(dt.CONFIG_PARAM_MAP),!0);return YO.isEmptyOrZeroLength(Object.keys(r))||x1.updateConfigValue(void 0,void 0,r,!0,!0),jfe(),tp}return KO?(Yi.notify(tp),np.get(dt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Hfe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{oT()},50)):rp.postMessage({type:dt.ITC_EVENT_TYPES.RESTART}),tp}o(B1,"restart");async function WO(e){let{service:t}=e;if(dt.HDB_PROCESS_SERVICES[t]===void 0)throw qfe(new Error,zfe,Vfe.BAD_REQUEST,void 0,void 0,!0);if(hi.expectedRestartOfChildren(),Vd=await hi.isServiceRegistered(dt.PROCESS_DESCRIPTORS.HDB),!KO){e.replicated&&Yfe(),rp.postMessage({type:dt.ITC_EVENT_TYPES.RESTART,workerType:t}),rp.ref(),await new Promise(s=>{rp.on("message",i=>{i.type==="restart-complete"&&(s(),rp.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Kfe())continue;let i;try{({job_id:i}=await v1(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let h=new Error("Timed out waiting for restart job to complete");h.replicated=n,c(h)}let m=(await v1(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let h=new Error(m.message);h.replicated=n,c(h)}},250)}))}return{replicated:n}}return}let r;switch(t){case dt.HDB_PROCESS_SERVICES.clustering:if(!np.get(dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=U1;break}Ds&&console.log("Restarting clustering"),Yi.notify("Restarting clustering"),await F1();break;case dt.HDB_PROCESS_SERVICES.clustering_config:case dt.HDB_PROCESS_SERVICES["clustering config"]:if(!np.get(dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=U1;break}Ds&&console.log("Restarting clusteringConfig"),Yi.notify("Restarting clustering_config"),await hi.reloadClustering();break;case"custom_functions":case"custom functions":case dt.HDB_PROCESS_SERVICES.harperdb:case dt.HDB_PROCESS_SERVICES.http_workers:case dt.HDB_PROCESS_SERVICES.http:if(Ds&&!Vd){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Ds&&console.log("Restarting httpWorkers"),Yi.notify("Restarting http_workers"),Ds?await hi.restart(dt.PROCESS_DESCRIPTORS.HDB):await oT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Yi.error(r),Ds&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(WO,"restartService");async function jfe(){await F1(),await hi.restart(dt.PROCESS_DESCRIPTORS.HDB),await YO.asyncSetTimeout(2e3),np.get(dt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await VO(),Ds&&(await sT.closeConnection(),process.exit(0))}o(jfe,"restartPM2Mode");async function F1(){if(!x1.getConfigFromFile(dt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await M1.getHDBProcessInfo()).clustering.length===0)Yi.trace("Clustering not running, restart will start clustering services"),await iT.generateNatsConfig(!0),await hi.startClusteringProcesses(),await hi.startClusteringThreads(),await VO(),Ds&&await sT.closeConnection();else{await iT.generateNatsConfig(!0),Vd?(Yi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await hi.restart(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hi.restart(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await M1.getHDBProcessInfo()).clustering.forEach(s=>{Yi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await YO.asyncSetTimeout(3e3),await VO(),await sT.updateLocalStreams(),Ds&&await sT.closeConnection(),Yi.trace("Restart clustering restarting ingest and reply service threads");let t=oT(dt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=oT(dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(F1,"restartClustering");async function VO(){await iT.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await iT.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(VO,"removeNatsConfig")});var Q1=M((TUe,j1)=>{"use strict";var SUe=require("lodash"),xn=(k(),v(K)),{handleHDBError:k1,hdbErrors:Qfe}=Ee(),{HDB_ERROR_MSGS:Jfe,HTTP_STATUS_CODES:Xfe}=Qfe,zO=z();j1.exports={getRolePermissions:eme};var Bl=Object.create(null),Zfe=o(e=>({key:e,perms:{}}),"permsTemplateObj"),V1=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),K1=o((e=!1,t=!1,r=!1,n=!1)=>({[xn.PERMS_CRUD_ENUM.READ]:e,[xn.PERMS_CRUD_ENUM.INSERT]:t,[xn.PERMS_CRUD_ENUM.UPDATE]:r,[xn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),jO=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...K1(t,r,n,s)}),"tablePermsTemplate"),G1=o((e,t=K1())=>({attribute_name:e,describe:z1(t),[sp]:t[sp],[QO]:t[QO],[JO]:t[JO]}),"attrPermsTemplate"),q1=o((e,t=!1)=>({attribute_name:e,describe:t,[sp]:t}),"timestampAttrPermsTemplate"),{READ:sp,INSERT:QO,UPDATE:JO}=xn.PERMS_CRUD_ENUM,Y1=Object.values(xn.PERMS_CRUD_ENUM),W1=[sp,QO,JO];function eme(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[xn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Bl[t]&&Bl[t].key===n)return Bl[t].perms;let s=tme(e,r);return Bl[t]?Bl[t].key=n:Bl[t]=Zfe(n),Bl[t].perms=s,s}catch(r){if(!e[xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<xn.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 zO.error(n),zO.debug(r),k1(new Error,Jfe.OUTDATED_PERMS_TRANSLATION_ERROR,Xfe.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
21
- ${r.stack}`;throw zO.error(n),k1(new Error)}}}o(eme,"getRolePermissions");function tme(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[xn.SYSTEM_SCHEMA_NAME]=n[xn.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]=rme(t[i]);return}r[i]=V1(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=nme(c,l);r[i].describe||Y1.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=jO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=jO()})}),r}o(tme,"translateRolePermissions");function rme(e){let t=V1(!0);return Object.keys(e).forEach(r=>{t.tables[r]=jO(!0,!0,!0,!0,!0)}),t}o(rme,"createStructureUserPermissions");function nme(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 xn.TIME_STAMP_NAMES.includes(f)&&(m=q1(f,d[sp])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=G1(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=z1(d),s.attribute_permissions.push(d),c||sme(d,l)}else if(u!==a){let d;xn.TIME_STAMP_NAMES.includes(u)?d=q1(u):d=G1(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=$1(s),s}else return e.describe=$1(e),e}o(nme,"getTableAttrPerms");function $1(e){return Y1.filter(t=>e[t]).length>0}o($1,"getSchemaTableDescribePerm");function z1(e){return W1.filter(t=>e[t]).length>0}o(z1,"getAttributeDescribePerm");function sme(e,t){W1.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(sme,"checkForHashPerms")});var ip={};Ce(ip,{authentication:()=>sK,bypassAuth:()=>mme,login:()=>eC,logout:()=>tC,start:()=>hme});function mme(){nK=!0}async function sK(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let h=e.isOperationsServer?lme?cme:[]:ame?ome:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let p=mn.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",_=new Ns([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return aT&&_.set("Access-Control-Allow-Credentials","true"),{status:200,headers:_}}a.push("Access-Control-Allow-Origin",i),aT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(aT){i||(i=r.host);let h=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let _ of p)if(_.startsWith(h)){let g=_.indexOf(";");l=_.slice(h.length,g===-1?_.length:g),u=await J1.get(l);break}e.session=u||(u={})}let d=o((h,p,_)=>{let g=new cT.AuthAuditLog(h,p,ma.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=_,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Ys.SUCCESS?XO.notify(g):XO.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&XO.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await ve.getUser(h,null,e),d(h,Ys.SUCCESS,"mTLS")):ime("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Fl.get(n),!f){let h=n.indexOf(" "),p=n.slice(0,h),_=n.slice(h+1),g,y;try{switch(p){case"Basic":let T=atob(_),R=T.indexOf(":");g=T.slice(0,R),y=T.slice(R+1),f=g||y?await ve.getUser(g,y,e):null;break;case"Bearer":try{f=await BN(_)}catch(I){if(I.message==="invalid token")try{return await Yg(_),c({status:-1})}catch{throw I}}break}}catch(T){return dme&&(Fl.get(_)||(Fl.set(_,_),d(g,Ys.FAILURE,p))),c({status:401,body:_a({error:T.message},e)})}Fl.set(n,f),ume&&d(f.username,Ys.SUCCESS,p)}e.user=f}else u?.user?e.user=await ve.getUser(u.user,null,e):(nK&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,Z1.getSuperUser)());aT&&(e.session.update=function(h){let p=mn.get(U.AUTHENTICATION_COOKIE_EXPIRES);if(!l){l=(0,eK.v4)();let _=mn.get(U.AUTHENTICATION_COOKIE_DOMAINS),g=p?new Date(Date.now()+(0,ZO.convertToMS)(p)).toUTCString():fme,y=_?.find(I=>r.host?.endsWith(I)),R=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${g}; ${y?"Domain="+y+"; ":""}HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;a?a.push("Set-Cookie",R):m?.headers?.set&&m.headers.set("Set-Cookie",R)}return e.protocol==="https"&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),h.id=l,J1.put(h,{expiresAt:p?Date.now()+(0,ZO.convertToMS)(p):void 0})},e.login=async function(h,p){let _=e.user=await ve.authenticateUser(h,p,e);e.session.update({user:_&&(_.getId?.()??_.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&As.loginPath?(m.status=302,m.headers.set("Location",As.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Ns);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function hme({server:e,port:t,securePort:r}){e.http(sK,t||r?{port:t,securePort:r}:{port:"all"}),X1||(X1=!0,setInterval(()=>{Fl=new Map},mn.get(U.AUTHENTICATION_CACHETTL)).unref(),tK.user.addListener(()=>{Fl=new Map}))}async function eC(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 tC(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var Z1,eK,mn,cT,tK,ZO,rK,ime,XO,ome,ame,cme,lme,J1,aT,nK,ume,dme,fme,Fl,X1,lT=fe(()=>{Z1=w(Jn());Pr();Pu();cd();Le();eK=require("uuid"),mn=w(ce());k();cT=w(z()),tK=w(Jm());nh();ZO=w(ie());po();rK=(0,cT.forComponent)("authentication"),{debug:ime}=rK,XO=rK.withTag("auth-event");mn.initSync();ome=mn.get(U.HTTP_CORSACCESSLIST),ame=mn.get(U.HTTP_CORS),cme=mn.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),lme=mn.get(U.OPERATIONSAPI_NETWORK_CORS),J1=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),aT=mn.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,nK=process.env.AUTHENTICATION_AUTHORIZELOCAL??mn.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,ume=mn.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,dme=mn.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,fme="Tue, 01 Oct 8307 19:33:20 GMT",Fl=new Map;ve.onInvalidatedUser(()=>{Fl=new Map});o(mme,"bypassAuth");o(sK,"authentication");o(hme,"start");o(eC,"login");o(tC,"logout")});var dK=M((PUe,uK)=>{"use strict";var we=require("joi"),iK=require("fs-extra"),oK=require("path"),is=at(),aK=ce(),cK=(k(),v(K)),lK=z(),{hdbErrors:pme}=Ee(),{HDB_ERROR_MSGS:hn}=pme,ko=/^[a-zA-Z0-9-_]+$/,Eme=/^[a-zA-Z0-9-_]+$/;uK.exports={getDropCustomFunctionValidator:gme,setCustomFunctionValidator:Sme,addComponentValidator:Ame,dropCustomFunctionProjectValidator:bme,packageComponentValidator:Ime,deployComponentValidator:Nme,setComponentFileValidator:Tme,getComponentFileValidator:yme,dropComponentFileValidator:Rme,addSSHKeyValidator:wme,updateSSHKeyValidator:Ome,deleteSSHKeyValidator:Cme,setSSHKnownHostsValidator:Pme};function uT(e,t,r){try{let n=aK.get(cK.CONFIG_PARAMS.COMPONENTSROOT),s=oK.join(n,t);return iK.existsSync(s)?e?t:r.message(hn.PROJECT_EXISTS):e?r.message(hn.NO_PROJECT):t}catch(n){return lK.error(n),r.message(hn.VALIDATION_ERR)}}o(uT,"checkProjectExists");function op(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(op,"checkFilePath");function _me(e,t,r,n){try{let s=aK.get(cK.CONFIG_PARAMS.COMPONENTSROOT),i=oK.join(s,e,t,r+".js");return iK.existsSync(i)?r:n.message(hn.NO_FILE)}catch(s){return lK.error(s),n.message(hn.VALIDATION_ERR)}}o(_me,"checkFileExists");function gme(e){let t=we.object({project:we.string().pattern(ko).custom(uT.bind(null,!0)).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(ko).custom(_me.bind(null,e.project,e.type)).custom(op).required().messages({"string.pattern.base":hn.BAD_FILE_NAME})});return is.validateBySchema(e,t)}o(gme,"getDropCustomFunctionValidator");function Sme(e){let t=we.object({project:we.string().pattern(ko).custom(uT.bind(null,!0)).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(op).required(),function_content:we.string().required()});return is.validateBySchema(e,t)}o(Sme,"setCustomFunctionValidator");function Tme(e){let t=we.object({project:we.string().pattern(ko).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),file:we.string().custom(op).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return is.validateBySchema(e,t)}o(Tme,"setComponentFileValidator");function Rme(e){let t=we.object({project:we.string().pattern(ko).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),file:we.string().custom(op).optional()});return is.validateBySchema(e,t)}o(Rme,"dropComponentFileValidator");function yme(e){let t=we.object({project:we.string().required(),file:we.string().custom(op).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return is.validateBySchema(e,t)}o(yme,"getComponentFileValidator");function Ame(e){let t=we.object({project:we.string().pattern(ko).custom(uT.bind(null,!1)).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME})});return is.validateBySchema(e,t)}o(Ame,"addComponentValidator");function bme(e){let t=we.object({project:we.string().pattern(ko).custom(uT.bind(null,!0)).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME})});return is.validateBySchema(e,t)}o(bme,"dropCustomFunctionProjectValidator");function Ime(e){let t=we.object({project:we.string().pattern(ko).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),skip_node_modules:we.boolean(),skip_symlinks:we.boolean()});return is.validateBySchema(e,t)}o(Ime,"packageComponentValidator");function Nme(e){let t=we.object({project:we.string().pattern(ko).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),package:we.string().optional(),restart:we.alternatives().try(we.boolean(),we.string().valid("rolling")).optional()});return is.validateBySchema(e,t)}o(Nme,"deployComponentValidator");function wme(e){let t=we.object({name:we.string().pattern(Eme).required().messages({"string.pattern.base":hn.BAD_SSH_KEY_NAME}),key:we.string().required(),host:we.string().required(),hostname:we.string().required(),known_hosts:we.string().optional()});return is.validateBySchema(e,t)}o(wme,"addSSHKeyValidator");function Ome(e){let t=we.object({name:we.string().required(),key:we.string().required()});return is.validateBySchema(e,t)}o(Ome,"updateSSHKeyValidator");function Cme(e){let t=we.object({name:we.string().required()});return is.validateBySchema(e,t)}o(Cme,"deleteSSHKeyValidator");function Pme(e){let t=we.object({known_hosts:we.string().required()});return is.validateBySchema(e,t)}o(Pme,"setSSHKnownHostsValidator")});var lp=M((DUe,EK)=>{"use strict";var dT=require("joi"),Ja=require("path"),Wd=require("fs-extra"),{exec:Lme,spawn:Dme}=require("child_process"),Mme=require("util"),vme=Mme.promisify(Lme),zd=(k(),v(K)),{PACKAGE_ROOT:Ume}=Rt(),{handleHDBError:ap,hdbErrors:xme}=Ee(),{HTTP_STATUS_CODES:cp}=xme,Hl=ce(),Bme=at(),Xa=z(),{once:Fme}=require("events");Hl.initSync();var rC=Hl.get(zd.CONFIG_PARAMS.COMPONENTSROOT),fK="npm install --force --omit=dev --json",Hme=`${fK} --dry-run`,kme=Hl.get(zd.CONFIG_PARAMS.ROOTPATH),fT=Ja.join(kme,"ssh");EK.exports={installModules:Vme,auditModules:Kme,installAllRootModules:Gme,uninstallRootModule:qme,linkHarperdb:$me,runCommand:jd};async function Gme(e=!1,t=Hl.get(zd.CONFIG_PARAMS.ROOTPATH)){await mT();let r=!1,n=process.env;Wd.pathExistsSync(fT)&&Wd.readdirSync(fT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Ja.join(fT,"config")+" -o UserKnownHostsFile="+Ja.join(fT,"known_hosts"),...process.env},r=!0)});try{let s=Hl.get(zd.CONFIG_PARAMS.ROOTPATH),i=Ja.join(s,"node_modules","harperdb");Wd.lstatSync(i).isSymbolicLink()&&Wd.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&Xa.error("Error removing symlink:",s)}await jd(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(Gme,"installAllRootModules");async function qme(e){await jd(`npm uninstall ${e}`,Hl.get(zd.CONFIG_PARAMS.ROOTPATH))}o(qme,"uninstallRootModule");async function $me(){await mT(),await jd(`npm link ${Ume}`,Hl.get(zd.CONFIG_PARAMS.ROOTPATH))}o($me,"linkHarperdb");async function jd(e,t=void 0,r=process.env){Xa.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Dme(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();Xa.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();Xa.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await Fme(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(jd,"runCommand");async function Vme(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Xa.warn(t,e.projects);let r=pK(e);if(r)throw ap(r,r.message,cp.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?Hme:fK;await mT(),await hK(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=Ja.join(rC,u),f,m=null;try{let{stdout:h,stderr:p}=await vme(i,{cwd:d});f=h?h.replace(`
20
+ Database backup has not been removed and can be found here: ${s}`;Ja.error(l),console.error(l)}(0,GO.get)(U.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||a===!1||(console.log("Removing backup",s),await(0,Bl.remove)(s))}}async function L1(e){let t=await(0,U1.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function x1(e,t){console.log("copyDb start");let r=it()[e],n;for(let f in r){n=r[f].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,a=(0,D1.open)(new M1.default(t)),c=a.openDB(sT.INTERNAL_DBIS_NAME),l,u=0,d=s.useReadTransaction();try{for(let{key:m,value:h}of s.getRange({transaction:d})){let p=h.is_hash_attribute||h.isPrimaryKey,_,g;if(p&&(_=h.compression,g=Lg(),g?h.compression=g:delete h.compression,_?.dictionary?.toString()===g?.dictionary?.toString()&&(_=null,g=null)),c.put(m,h),!(p||h.indexed))continue;let y=new v1.default(!p,p);y.encoding="binary",y.compression=_;let T=n.openDB(m,y);T.decoder=null,T.decoderCopies=!1,T.encoding="binary",y.compression=g;let R=a.openDB(m,y);R.encoder=null,console.log("copying",m,"from",e,"to",t),await f(T,R,p,d)}if(i){let m=n.openDB(sT.AUDIT_STORE_NAME,um);console.log("copying audit log for",e,"to",t),f(i,m,!1,d)}async function f(m,h,p,_){let g=0,y=0,T=1e7,R=null;for(;T-- >0;)try{for(let I of m.getKeys({start:R,transaction:_}))try{R=I;let{value:P,version:Y}=m.getEntry(I,{transaction:_});l=h.put(I,P,p?Y:void 0),g++,_.openTimer&&(_.openTimer=0),y+=(I?.length||10)+P.length,u++>5e3&&(await l,console.log("copied",g,"entries",y,"bytes"),u=0)}catch(P){console.error("Error copying record",typeof I=="symbol"?"symbol":I,"from",e,"to",t,P)}console.log("finish copying, copied",g,"entries",y,"bytes");return}catch{if(typeof R=="string"){if(R==="z")return console.error("Reached end of dbi",R,"for",e,"to",t);R=R.slice(0,-2)+"z"}else if(typeof R=="number")R++;else return console.error("Unknown key type",R,"for",e,"to",t)}}o(f,"copyDbi"),await l,console.log("copied database "+e+" to "+t)}finally{d.done(),a.close()}}var D1,nT,Bl,GO,M1,v1,sT,U1,qO,Ja,VO=fe(()=>{Le();D1=require("lmdb"),nT=require("path"),Bl=require("fs-extra"),GO=w(ce()),M1=w(Rm()),v1=w(Tm()),sT=w(kt());k();uo();U1=w(Pa()),qO=w(yt()),Ja=w(z());o(qfe,"compactOnStart");o(L1,"getTotalDBRecordCount");o(x1,"copyDb")});var Kd=M((yUe,$1)=>{"use strict";var $fe=require("minimist"),{isMainThread:YO,parentPort:rp,threadId:SUe}=require("worker_threads"),dt=(k(),v(K)),Yi=z(),WO=ie(),oT=rT(),iT=lr(),TUe=It(),k1=yt(),hi=Yd(),B1=Dd(),{compactOnStart:Vfe}=(VO(),v($O)),Kfe=Lc(),{restartWorkers:aT,onMessageByType:Yfe}=st(),{handleHDBError:Wfe,hdbErrors:zfe}=Ee(),{HTTP_STATUS_CODES:jfe}=zfe,np=ce(),{sendOperationToNode:F1,getThisNodeName:Qfe,monitorNodeCAs:Jfe}=(es(),v(vo)),{getHDBNodeTable:RUe}=(bl(),v(aw));np.initSync();var tp=`Restarting HarperDB. This may take up to ${dt.RESTART_TIMEOUT_MS/1e3} seconds.`,Xfe="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",H1="Clustering is not enabled so cannot be restarted",Zfe="Invalid service",Vd,Ds;$1.exports={restart:G1,restartService:zO};YO&&Yfe(dt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await zO({service:e.workerType}):G1({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function G1(e){Ds=Object.keys(e).length===0,Vd=await hi.isServiceRegistered(dt.PROCESS_DESCRIPTORS.HDB);let t=$fe(process.argv);if(t.service){await zO(t);return}if(Ds&&!Vd){console.error(Xfe);return}if(Ds&&console.log(tp),Vd){hi.enterPM2Mode(),Yi.notify(tp);let r=Kfe(Object.keys(dt.CONFIG_PARAM_MAP),!0);return WO.isEmptyOrZeroLength(Object.keys(r))||k1.updateConfigValue(void 0,void 0,r,!0,!0),eme(),tp}return YO?(Yi.notify(tp),np.get(dt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await Vfe(),process.env.HARPER_EXIT_ON_RESTART&&process.exit(0),setTimeout(()=>{aT()},50)):rp.postMessage({type:dt.ITC_EVENT_TYPES.RESTART}),tp}o(G1,"restart");async function zO(e){let{service:t}=e;if(dt.HDB_PROCESS_SERVICES[t]===void 0)throw Wfe(new Error,Zfe,jfe.BAD_REQUEST,void 0,void 0,!0);if(hi.expectedRestartOfChildren(),Vd=await hi.isServiceRegistered(dt.PROCESS_DESCRIPTORS.HDB),!YO){e.replicated&&Jfe(),rp.postMessage({type:dt.ITC_EVENT_TYPES.RESTART,workerType:t}),rp.ref(),await new Promise(s=>{rp.on("message",i=>{i.type==="restart-complete"&&(s(),rp.unref())})});let n;if(e.replicated){e.replicated=!1,n=[];for(let s of server.nodes){if(s.name===Qfe())continue;let i;try{({job_id:i}=await F1(s,e))}catch(a){n.push({node:s.name,message:a.message});continue}n.push(await new Promise((a,c)=>{let u=2400,d=setInterval(async()=>{if(u--<=0){clearInterval(d);let h=new Error("Timed out waiting for restart job to complete");h.replicated=n,c(h)}let m=(await F1(s,{operation:"get_job",id:i})).results[0];if(m.status==="COMPLETE"&&(clearInterval(d),a({node:s.name,message:m.message})),m.status==="ERROR"){clearInterval(d);let h=new Error(m.message);h.replicated=n,c(h)}},250)}))}return{replicated:n}}return}let r;switch(t){case dt.HDB_PROCESS_SERVICES.clustering:if(!np.get(dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=H1;break}Ds&&console.log("Restarting clustering"),Yi.notify("Restarting clustering"),await q1();break;case dt.HDB_PROCESS_SERVICES.clustering_config:case dt.HDB_PROCESS_SERVICES["clustering config"]:if(!np.get(dt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=H1;break}Ds&&console.log("Restarting clusteringConfig"),Yi.notify("Restarting clustering_config"),await hi.reloadClustering();break;case"custom_functions":case"custom functions":case dt.HDB_PROCESS_SERVICES.harperdb:case dt.HDB_PROCESS_SERVICES.http_workers:case dt.HDB_PROCESS_SERVICES.http:if(Ds&&!Vd){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Ds&&console.log("Restarting httpWorkers"),Yi.notify("Restarting http_workers"),Ds?await hi.restart(dt.PROCESS_DESCRIPTORS.HDB):await aT("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(Yi.error(r),Ds&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(zO,"restartService");async function eme(){await q1(),await hi.restart(dt.PROCESS_DESCRIPTORS.HDB),await WO.asyncSetTimeout(2e3),np.get(dt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await KO(),Ds&&(await iT.closeConnection(),process.exit(0))}o(eme,"restartPM2Mode");async function q1(){if(!k1.getConfigFromFile(dt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await B1.getHDBProcessInfo()).clustering.length===0)Yi.trace("Clustering not running, restart will start clustering services"),await oT.generateNatsConfig(!0),await hi.startClusteringProcesses(),await hi.startClusteringThreads(),await KO(),Ds&&await iT.closeConnection();else{await oT.generateNatsConfig(!0),Vd?(Yi.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await hi.restart(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hi.restart(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await B1.getHDBProcessInfo()).clustering.forEach(s=>{Yi.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await WO.asyncSetTimeout(3e3),await KO(),await iT.updateLocalStreams(),Ds&&await iT.closeConnection(),Yi.trace("Restart clustering restarting ingest and reply service threads");let t=aT(dt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=aT(dt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(q1,"restartClustering");async function KO(){await oT.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await oT.removeNatsConfig(dt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(KO,"removeNatsConfig")});var eK=M((IUe,Z1)=>{"use strict";var bUe=require("lodash"),xn=(k(),v(K)),{handleHDBError:V1,hdbErrors:tme}=Ee(),{HDB_ERROR_MSGS:rme,HTTP_STATUS_CODES:nme}=tme,jO=z();Z1.exports={getRolePermissions:ime};var Fl=Object.create(null),sme=o(e=>({key:e,perms:{}}),"permsTemplateObj"),z1=o((e=!1)=>({describe:e,tables:{}}),"schemaPermsTemplate"),j1=o((e=!1,t=!1,r=!1,n=!1)=>({[xn.PERMS_CRUD_ENUM.READ]:e,[xn.PERMS_CRUD_ENUM.INSERT]:t,[xn.PERMS_CRUD_ENUM.UPDATE]:r,[xn.PERMS_CRUD_ENUM.DELETE]:n}),"permissionsTemplate"),QO=o((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...j1(t,r,n,s)}),"tablePermsTemplate"),K1=o((e,t=j1())=>({attribute_name:e,describe:X1(t),[sp]:t[sp],[JO]:t[JO],[XO]:t[XO]}),"attrPermsTemplate"),Y1=o((e,t=!1)=>({attribute_name:e,describe:t,[sp]:t}),"timestampAttrPermsTemplate"),{READ:sp,INSERT:JO,UPDATE:XO}=xn.PERMS_CRUD_ENUM,Q1=Object.values(xn.PERMS_CRUD_ENUM),J1=[sp,JO,XO];function ime(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r={...global.hdb_schema};delete r[xn.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(Fl[t]&&Fl[t].key===n)return Fl[t].perms;let s=ome(e,r);return Fl[t]?Fl[t].key=n:Fl[t]=sme(n),Fl[t].perms=s,s}catch(r){if(!e[xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<xn.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 jO.error(n),jO.debug(r),V1(new Error,rme.OUTDATED_PERMS_TRANSLATION_ERROR,nme.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
21
+ ${r.stack}`;throw jO.error(n),V1(new Error)}}}o(ime,"getRolePermissions");function ome(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[xn.SYSTEM_SCHEMA_NAME]=n[xn.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]=ame(t[i]);return}r[i]=z1(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(n[i].tables[a]){let c=n[i].tables[a],l=t[i][a],u=cme(c,l);r[i].describe||Q1.forEach(d=>{u[d]&&(r[i].describe=!0)}),r[i].tables[a]=u}else r[i].tables[a]=QO()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=QO()})}),r}o(ome,"translateRolePermissions");function ame(e){let t=z1(!0);return Object.keys(e).forEach(r=>{t.tables[r]=QO(!0,!0,!0,!0,!0)}),t}o(ame,"createStructureUserPermissions");function cme(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 xn.TIME_STAMP_NAMES.includes(f)&&(m=Y1(f,d[sp])),u[f]=m,u},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],l=K1(a);return t.attributes.forEach(({attribute:u})=>{if(i[u]){let d=i[u];d.describe=X1(d),s.attribute_permissions.push(d),c||lme(d,l)}else if(u!==a){let d;xn.TIME_STAMP_NAMES.includes(u)?d=Y1(u):d=K1(u),s.attribute_permissions.push(d)}}),c||s.attribute_permissions.push(l),s.describe=W1(s),s}else return e.describe=W1(e),e}o(cme,"getTableAttrPerms");function W1(e){return Q1.filter(t=>e[t]).length>0}o(W1,"getSchemaTableDescribePerm");function X1(e){return J1.filter(t=>e[t]).length>0}o(X1,"getAttributeDescribePerm");function lme(e,t){J1.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(lme,"checkForHashPerms")});var ip={};Ce(ip,{authentication:()=>cK,bypassAuth:()=>gme,login:()=>tC,logout:()=>rC,start:()=>Sme});function gme(){aK=!0}async function cK(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,a=[];try{if(i){let h=e.isOperationsServer?hme?mme:[]:fme?dme:[];if(h.includes(i)||h.includes("*")){if(e.method==="OPTIONS"){let p=mn.get(U.HTTP_CORSACCESSCONTROLALLOWHEADERS)??"Accept, Content-Type, Authorization",_=new Ns([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers",p],["Access-Control-Allow-Origin",i]]);return cT&&_.set("Access-Control-Allow-Credentials","true"),{status:200,headers:_}}a.push("Access-Control-Allow-Origin",i),cT&&a.push("Access-Control-Allow-Credentials","true")}}let l,u;if(cT){i||(i=r.host);let h=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",p=s?.split(/;\s+/)||[];for(let _ of p)if(_.startsWith(h)){let g=_.indexOf(";");l=_.slice(h.length,g===-1?_.length:g),u=await tK.get(l);break}e.session=u||(u={})}let d=o((h,p,_)=>{let g=new lT.AuthAuditLog(h,p,ha.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);g.auth_strategy=_,l&&(g.session_id=l),r.referer&&(g.referer=r.referer),r.origin&&(g.origin=r.origin),p===Ys.SUCCESS?ZO.notify(g):ZO.error(g)},"authAuditLog");if(!e.authorized&&e.mtlsConfig&&e.peerCertificate.subject&&e?._nodeRequest?.socket?.authorizationError&&ZO.error("Authorization error:",e._nodeRequest.socket.authorizationError),e.mtlsConfig&&e.authorized&&e.peerCertificate.subject){let h=e.mtlsConfig.user;h!==null?((h===void 0||h==="Common Name"||h==="CN")&&(h=e.peerCertificate.subject.CN),e.user=await ve.getUser(h,null,e),d(h,Ys.SUCCESS,"mTLS")):ume("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let f;if(!e.user)if(n){if(f=Hl.get(n),!f){let h=n.indexOf(" "),p=n.slice(0,h),_=n.slice(h+1),g,y;try{switch(p){case"Basic":let T=atob(_),R=T.indexOf(":");g=T.slice(0,R),y=T.slice(R+1),f=g||y?await ve.getUser(g,y,e):null;break;case"Bearer":try{f=await FN(_)}catch(I){if(I.message==="invalid token")try{return await Wg(_),c({status:-1})}catch{throw I}}break}}catch(T){return Eme&&(Hl.get(_)||(Hl.set(_,_),d(g,Ys.FAILURE,p))),c({status:401,body:ga({error:T.message},e)})}Hl.set(n,f),pme&&d(f.username,Ys.SUCCESS,p)}e.user=f}else u?.user?e.user=await ve.getUser(u.user,null,e):(aK&&(e.ip?.includes("127.0.0.")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,nK.getSuperUser)());cT&&(e.session.update=function(h){let p=mn.get(U.AUTHENTICATION_COOKIE_EXPIRES),_=e.protocol==="https"||r.host?.startsWith("localhost:")||r.host?.startsWith("127.0.0.1:")||r.host?.startsWith("::1");if(!l){l=(0,sK.v4)();let g=mn.get(U.AUTHENTICATION_COOKIE_DOMAINS),y=p?new Date(Date.now()+(0,eC.convertToMS)(p)).toUTCString():_me,T=g?.find(P=>r.host?.endsWith(P)),I=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${l}; Path=/; Expires=${y}; HttpOnly`;T&&(I+=`; Domain=${T}`),_&&(I+="; SameSite=None; Secure"),a?a.push("Set-Cookie",I):m?.headers?.set&&m.headers.set("Set-Cookie",I)}return _&&(a?(i&&a.push("Access-Control-Expose-Headers","X-Hdb-Session"),a.push("X-Hdb-Session","Secure")):m?.headers?.set&&(i&&m.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),m.headers.set("X-Hdb-Session","Secure"))),h.id=l,tK.put(h,{expiresAt:p?Date.now()+(0,eC.convertToMS)(p):void 0})},e.login=async function(h,p){let _=e.user=await ve.authenticateUser(h,p,e);e.session.update({user:_&&(_.getId?.()??_.username)})});let m=await t(e);return m&&(m.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&As.loginPath?(m.status=302,m.headers.set("Location",As.loginPath(e))):m.headers.set("WWW-Authenticate","Basic")),c(m))}catch(l){throw c(l)}function c(l){let u=a.length;if(u>0){let d=l.headers;d||(l.headers=d=new Ns);for(let f=0;f<u;){let m=a[f++];d.set(m,a[f++])}}return a=null,l}o(c,"applyResponseHeaders")}function Sme({server:e,port:t,securePort:r}){e.http(cK,t||r?{port:t,securePort:r}:{port:"all"}),rK||(rK=!0,setInterval(()=>{Hl=new Map},mn.get(U.AUTHENTICATION_CACHETTL)).unref(),iK.user.addListener(()=>{Hl=new Map}))}async function tC(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 rC(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var nK,sK,mn,lT,iK,eC,oK,ume,ZO,dme,fme,mme,hme,tK,cT,aK,pme,Eme,_me,Hl,rK,uT=fe(()=>{nK=w(Jn());Pr();Pu();cd();Le();sK=require("uuid"),mn=w(ce());k();lT=w(z()),iK=w(Jm());nh();eC=w(ie());po();oK=(0,lT.forComponent)("authentication"),{debug:ume}=oK,ZO=oK.withTag("auth-event");mn.initSync();dme=mn.get(U.HTTP_CORSACCESSLIST),fme=mn.get(U.HTTP_CORS),mme=mn.get(U.OPERATIONSAPI_NETWORK_CORSACCESSLIST),hme=mn.get(U.OPERATIONSAPI_NETWORK_CORS),tK=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),cT=mn.get(U.AUTHENTICATION_ENABLESESSIONS)??!0,aK=process.env.AUTHENTICATION_AUTHORIZELOCAL??mn.get(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,pme=mn.get(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Eme=mn.get(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,_me="Tue, 01 Oct 8307 19:33:20 GMT",Hl=new Map;ve.onInvalidatedUser(()=>{Hl=new Map});o(gme,"bypassAuth");o(cK,"authentication");o(Sme,"start");o(tC,"login");o(rC,"logout")});var pK=M((UUe,hK)=>{"use strict";var we=require("joi"),lK=require("fs-extra"),uK=require("path"),is=at(),dK=ce(),fK=(k(),v(K)),mK=z(),{hdbErrors:Tme}=Ee(),{HDB_ERROR_MSGS:hn}=Tme,ko=/^[a-zA-Z0-9-_]+$/,Rme=/^[a-zA-Z0-9-_]+$/;hK.exports={getDropCustomFunctionValidator:Ame,setCustomFunctionValidator:bme,addComponentValidator:Ome,dropCustomFunctionProjectValidator:Cme,packageComponentValidator:Pme,deployComponentValidator:Lme,setComponentFileValidator:Ime,getComponentFileValidator:wme,dropComponentFileValidator:Nme,addSSHKeyValidator:Dme,updateSSHKeyValidator:Mme,deleteSSHKeyValidator:vme,setSSHKnownHostsValidator:Ume};function dT(e,t,r){try{let n=dK.get(fK.CONFIG_PARAMS.COMPONENTSROOT),s=uK.join(n,t);return lK.existsSync(s)?e?t:r.message(hn.PROJECT_EXISTS):e?r.message(hn.NO_PROJECT):t}catch(n){return mK.error(n),r.message(hn.VALIDATION_ERR)}}o(dT,"checkProjectExists");function op(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(op,"checkFilePath");function yme(e,t,r,n){try{let s=dK.get(fK.CONFIG_PARAMS.COMPONENTSROOT),i=uK.join(s,e,t,r+".js");return lK.existsSync(i)?r:n.message(hn.NO_FILE)}catch(s){return mK.error(s),n.message(hn.VALIDATION_ERR)}}o(yme,"checkFileExists");function Ame(e){let t=we.object({project:we.string().pattern(ko).custom(dT.bind(null,!0)).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().pattern(ko).custom(yme.bind(null,e.project,e.type)).custom(op).required().messages({"string.pattern.base":hn.BAD_FILE_NAME})});return is.validateBySchema(e,t)}o(Ame,"getDropCustomFunctionValidator");function bme(e){let t=we.object({project:we.string().pattern(ko).custom(dT.bind(null,!0)).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),type:we.string().valid("helpers","routes").required(),file:we.string().custom(op).required(),function_content:we.string().required()});return is.validateBySchema(e,t)}o(bme,"setCustomFunctionValidator");function Ime(e){let t=we.object({project:we.string().pattern(ko).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),file:we.string().custom(op).required(),payload:we.string().allow("").optional(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return is.validateBySchema(e,t)}o(Ime,"setComponentFileValidator");function Nme(e){let t=we.object({project:we.string().pattern(ko).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),file:we.string().custom(op).optional()});return is.validateBySchema(e,t)}o(Nme,"dropComponentFileValidator");function wme(e){let t=we.object({project:we.string().required(),file:we.string().custom(op).required(),encoding:we.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return is.validateBySchema(e,t)}o(wme,"getComponentFileValidator");function Ome(e){let t=we.object({project:we.string().pattern(ko).custom(dT.bind(null,!1)).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME})});return is.validateBySchema(e,t)}o(Ome,"addComponentValidator");function Cme(e){let t=we.object({project:we.string().pattern(ko).custom(dT.bind(null,!0)).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME})});return is.validateBySchema(e,t)}o(Cme,"dropCustomFunctionProjectValidator");function Pme(e){let t=we.object({project:we.string().pattern(ko).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),skip_node_modules:we.boolean(),skip_symlinks:we.boolean()});return is.validateBySchema(e,t)}o(Pme,"packageComponentValidator");function Lme(e){let t=we.object({project:we.string().pattern(ko).required().messages({"string.pattern.base":hn.BAD_PROJECT_NAME}),package:we.string().optional(),restart:we.alternatives().try(we.boolean(),we.string().valid("rolling")).optional()});return is.validateBySchema(e,t)}o(Lme,"deployComponentValidator");function Dme(e){let t=we.object({name:we.string().pattern(Rme).required().messages({"string.pattern.base":hn.BAD_SSH_KEY_NAME}),key:we.string().required(),host:we.string().required(),hostname:we.string().required(),known_hosts:we.string().optional()});return is.validateBySchema(e,t)}o(Dme,"addSSHKeyValidator");function Mme(e){let t=we.object({name:we.string().required(),key:we.string().required()});return is.validateBySchema(e,t)}o(Mme,"updateSSHKeyValidator");function vme(e){let t=we.object({name:we.string().required()});return is.validateBySchema(e,t)}o(vme,"deleteSSHKeyValidator");function Ume(e){let t=we.object({known_hosts:we.string().required()});return is.validateBySchema(e,t)}o(Ume,"setSSHKnownHostsValidator")});var lp=M((BUe,TK)=>{"use strict";var fT=require("joi"),Xa=require("path"),Wd=require("fs-extra"),{exec:xme,spawn:Bme}=require("child_process"),Fme=require("util"),Hme=Fme.promisify(xme),zd=(k(),v(K)),{PACKAGE_ROOT:kme}=Rt(),{handleHDBError:ap,hdbErrors:Gme}=Ee(),{HTTP_STATUS_CODES:cp}=Gme,kl=ce(),qme=at(),Za=z(),{once:$me}=require("events");kl.initSync();var nC=kl.get(zd.CONFIG_PARAMS.COMPONENTSROOT),EK="npm install --force --omit=dev --json",Vme=`${EK} --dry-run`,Kme=kl.get(zd.CONFIG_PARAMS.ROOTPATH),mT=Xa.join(Kme,"ssh");TK.exports={installModules:jme,auditModules:Qme,installAllRootModules:Yme,uninstallRootModule:Wme,linkHarperdb:zme,runCommand:jd};async function Yme(e=!1,t=kl.get(zd.CONFIG_PARAMS.ROOTPATH)){await hT();let r=!1,n=process.env;Wd.pathExistsSync(mT)&&Wd.readdirSync(mT).forEach(s=>{s.includes(".key")&&!r&&(n={GIT_SSH_COMMAND:"ssh -F "+Xa.join(mT,"config")+" -o UserKnownHostsFile="+Xa.join(mT,"known_hosts"),...process.env},r=!0)});try{let s=kl.get(zd.CONFIG_PARAMS.ROOTPATH),i=Xa.join(s,"node_modules","harperdb");Wd.lstatSync(i).isSymbolicLink()&&Wd.unlinkSync(i)}catch(s){s.code!=="ENOENT"&&Za.error("Error removing symlink:",s)}await jd(e?"npm install --force --ignore-scripts":"npm install --force",t,n)}o(Yme,"installAllRootModules");async function Wme(e){await jd(`npm uninstall ${e}`,kl.get(zd.CONFIG_PARAMS.ROOTPATH))}o(Wme,"uninstallRootModule");async function zme(){await hT(),await jd(`npm link ${kme}`,kl.get(zd.CONFIG_PARAMS.ROOTPATH))}o(zme,"linkHarperdb");async function jd(e,t=void 0,r=process.env){Za.debug({tagName:"npm_run_command"},`running command: \`${e}\``);let n=Bme(e,{shell:!0,cwd:t,env:r,stdio:["ignore","pipe","pipe"]}),s="",i="";n.stdout.on("data",c=>{let l=c.toString();Za.debug({tagName:"npm_run_command:stdout"},l),s+=l}),n.stderr.on("data",c=>{let l=c.toString();Za.error({tagName:"npm_run_command:stderr"},l),i+=l});let[a]=await $me(n,"close");if(a!==0)throw new Error(`Command \`${e}\` exited with code ${a}.${i===""?"":` Error: ${i}`}`);return s||void 0}o(jd,"runCommand");async function jme(e){let t="install_node_modules is deprecated. Dependencies are automatically installed on deploy, and install_node_modules can lead to inconsistent behavior";Za.warn(t,e.projects);let r=SK(e);if(r)throw ap(r,r.message,cp.BAD_REQUEST);let{projects:n,dryRun:s}=e,i=s===!0?Vme:EK;await hT(),await gK(n);let a={};for(let c=0,l=n.length;c<l;c++){let u=n[c];a[u]={npm_output:null,npm_error:null};let d=Xa.join(nC,u),f,m=null;try{let{stdout:h,stderr:p}=await Hme(i,{cwd:d});f=h?h.replace(`
22
22
  `,""):null,m=p?p.replace(`
23
- `,""):null}catch(h){h.stderr?a[u].npm_error=mK(h.stderr):a[u].npm_error=h.message;continue}try{a[u].npm_output=JSON.parse(f)}catch{a[u].npm_output=f}try{a[u].npm_error=JSON.parse(m)}catch{a[u].npm_error=m}}return Xa.info(`finished installModules with response ${a}`),a.warning=t,a}o(Vme,"installModules");function mK(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
24
- `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(mK,"parseNPMStdErr");async function Kme(e){Xa.info(`starting auditModules for request: ${e}`);let t=pK(e);if(t)throw ap(t,t.message,cp.BAD_REQUEST);let{projects:r}=e;await mT(),await hK(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=Ja.join(rC,a);n[a]={npm_output:null,npm_error:null};try{let l=await jd("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=mK(l.stderr)}}return Xa.info(`finished auditModules with response ${n}`),n}o(Kme,"auditModules");async function mT(){return await jd("npm -v"),!0}o(mT,"checkNPMInstalled");async function hK(e){if(!Array.isArray(e)||e.length===0)throw ap(new Error,"projects argument must be an array with at least 1 element",cp.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=Ja.join(rC,i.toString());if(!await Wd.pathExists(a)){t.push(i);continue}let l=Ja.join(a,"package.json");await Wd.pathExists(l)||r.push(i)}if(t.length>0)throw ap(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,cp.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw ap(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,cp.BAD_REQUEST,void 0,void 0,!0)}o(hK,"checkProjectPaths");function pK(e){let t=dT.object({projects:dT.array().min(1).items(dT.string()).required(),dry_run:dT.boolean().default(!1)});return Bme.validateBySchema(e,t)}o(pK,"modulesValidator")});var sC=M((vUe,yK)=>{"use strict";var Ms=require("fs-extra"),dp=require("path"),up=z(),_K=ie(),{PACKAGE_ROOT:Yme}=Rt(),nC=(k(),v(K)),RK=ce(),Wme=yt();yK.exports=zme;async function zme(){let e=jme(),t=RK.get(nC.CONFIG_PARAMS.ROOTPATH),r=dp.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Yme}},s=dp.join(t,"node_modules");Ms.ensureDirSync(s);let i,a=!0,c=!1;try{i=Ms.readJsonSync(r)}catch(l){if(_K.isEmptyOrZeroLength(e))return;if(l.code!==nC.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!_K.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=SK(u);n.dependencies[l]=d+u}if(!a){up.notify("Installing components"),await TK(r,n,null),await gK(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=SK(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Ms.statSync(new URL(u+"/package.json")).mtimeMs>Ms.statSync(r).mtimeMs){c=!0;break}}catch(m){up.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(up.notify("Removing component",l),c=!0);c&&(up.notify("Updating components."),await TK(r,n,i),await gK(t,e))}o(zme,"installComponents");function gK(e,t){return Promise.all(t.map(({name:r})=>{let n=dp.join(e,"node_modules",r),s=dp.join(e,"components",r);if(Ms.existsSync(n)&&Ms.lstatSync(n).isDirectory())return Ms.move(n,s,{overwrite:!0}).then(()=>{Ms.symlink(s,n)})}))}o(gK,"moveModuleToComponents");function jme(){let e=Wme.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(jme,"getComponentsConfig");function SK(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":dp.extname(e)||Ms.existsSync(e)?"file:":"github:"}o(SK,"getPkgPrefix");async function TK(e,t,r){up.trace("npm installing components package.json",t),Ms.writeFileSync(e,JSON.stringify(t,null," "));try{await lp().installAllRootModules(RK.get(nC.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ms.writeFileSync(e,JSON.stringify(r,null," ")):Ms.unlinkSync(e),n}}o(TK,"installPackages")});var NK={};Ce(NK,{packageDirectory:()=>Qme});function Qme(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];bK.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,AK.join)("cache","webpack")):void 0}).pipe((0,IK.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var AK,bK,IK,wK=fe(()=>{AK=require("path"),bK=w(require("tar-fs")),IK=require("node:zlib");o(Qme,"packageDirectory")});var aC=M(tr=>{"use strict";var Ie=require("fs-extra"),iC=require("fast-glob"),Pe=require("path"),Jme=require("tar-fs"),Xme=require("gunzip-maybe"),oC=require("normalize-path"),Bn=dK(),Kt=z(),ht=(k(),v(K)),er=ce(),hT=yt(),Zme=ie(),{PACKAGE_ROOT:ehe}=Rt(),{handleHDBError:Yt,hdbErrors:the}=Ee(),{basename:rhe}=require("path"),nhe=sC(),CK=ce(),{Readable:she}=require("stream"),{isMainThread:ihe}=require("worker_threads"),{HDB_ERROR_MSGS:kl,HTTP_STATUS_CODES:Wt}=the,PK=st(),{replicateOperation:pi}=(es(),v(vo)),{packageDirectory:ohe}=(wK(),v(NK)),OK=lp(),ahe=Pe.join(ehe,"application-template"),che=er.get(ht.CONFIG_PARAMS.ROOTPATH),Za=Pe.join(che,"ssh"),Go=Pe.join(Za,"known_hosts");function lhe(){Kt.trace("getting custom api status");let e={};try{e={port:er.get(ht.CONFIG_PARAMS.HTTP_PORT),directory:er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Yt(new Error,kl.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,t)}return e}o(lhe,"customFunctionsStatus");function uhe(){Kt.trace("getting custom api endpoints");let e={},t=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT);try{iC.sync(oC(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:iC.sync(oC(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:iC.sync(oC(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Yt(new Error,kl.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,r)}return e}o(uhe,"getCustomFunctions");function dhe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=Bn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("getting custom api endpoint file content");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Pe.join(r,n,s,i+".js");try{return Ie.readFileSync(a,{encoding:"utf8"})}catch(c){throw Yt(new Error,kl.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}o(dhe,"getCustomFunction");async function fhe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=Bn.setCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("setting custom function file content");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ie.outputFileSync(Pe.join(r,n,s,i+".js"),a);let c=await pi(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Yt(new Error,kl.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}o(fhe,"setCustomFunction");async function mhe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=Bn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function file");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ie.unlinkSync(Pe.join(r,n,s,i+".js"));let a=await pi(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Yt(new Error,kl.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,a)}}o(mhe,"dropCustomFunction");async function hhe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=Bn.addComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("adding component");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Pe.join(r,n);Ie.mkdirSync(s,{recursive:!0}),Ie.copySync(ahe,s);let i=await pi(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Yt(new Error,kl.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,s)}}o(hhe,"addComponent");async function phe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=Bn.dropCustomFunctionProjectValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function project");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=er.get(ht.CONFIG_PARAMS.APPS);if(!Zme.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return hT.updateConfigValue(ht.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Pe.join(r,n);Ie.rmSync(i,{recursive:!0});let a=await pi(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Yt(new Error,kl.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,i)}}o(phe,"dropCustomFunctionProject");async function Ehe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=Bn.packageComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Kt.trace("packaging component",n);let s;try{s=await Ie.realpath(Pe.join(r,n))}catch(a){if(a.code!==ht.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ie.realpath(Pe.join(er.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ht.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await ohe(s,e)).toString("base64");return{project:n,payload:i}}o(Ehe,"packageComponent");async function _he(e){e.project?e.project=Pe.parse(e.project).name:e.package&&(e.project=ghe(e.package));let t=Bn.deployComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(Kt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Pe.join(r,n),i="file:"+c,await Ie.emptyDir(c);let _=she.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((T,R)=>{_.pipe(Xme()).pipe(Jme.extract(c,{finish:T})).on("error",R)});let g=await Ie.readdir(c);g.length===1&&g[0]==="package"&&(await Ie.copy(Pe.join(c,"package"),c),await Ie.remove(Pe.join(c,"package")));let y=Pe.join(c,"node_modules");a?await OK.runCommand(a,c):Ie.existsSync(y)||await OK.installAllRootModules(!1,c)}else{await hT.addConfig(n,{package:i}),await nhe();let _=CK.get(ht.CONFIG_PARAMS.ROOTPATH);c=Pe.join(_,"node_modules",n)}if(ihe)return;let l=new Map;l.isWorker=!0;let u=(Qd(),v(fp)),d;u.setErrorReporter(_=>d=_);let f=rhe(c),m=u.componentErrors.get(f);try{await u.loadComponent(c,l)}finally{u.componentErrors.set(f,m)}if(d)throw d;Kt.info("Installed component");let h=e.restart==="rolling";e.restart=h?!1:e.restart;let p=await pi(e);if(e.restart===!0)PK.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(h){let g=await(lC(),v(cC)).executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}o(_he,"deployComponent");function ghe(e){if(e.startsWith("git+ssh://"))return Pe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Pe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ie.readFileSync(Pe.join(e,"package.json"),"utf8"));return Pe.basename(t)}catch{}return Pe.basename(e)}o(ghe,"getProjectNameFromPackage");async function She(){let e=o(async(s,i)=>{try{let a=await Ie.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Pe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Ie.stat(u),f={name:Pe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return Kt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{name:er.get(ht.CONFIG_PARAMS.COMPONENTSROOT).split(Pe.sep).slice(-1).pop(),entries:[]}),n=(Qd(),v(fp)).componentErrors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}o(She,"getComponents");async function The(e){let t=Bn.getComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let n=hT.getConfigObj()[e.project]||e.project==="harperdb"?Pe.join(CK.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules"):er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ie.stat(Pe.join(n,e.project,e.file));return{message:await Ie.readFile(Pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ht.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Pe.join(e.project,e.file)}'`):i}}o(The,"getComponentFile");async function Rhe(e){let t=Bn.setComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Pe.join(er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ie.ensureFile(n),await Ie.outputFile(n,e.payload,r)):await Ie.ensureDir(n);let s=await pi(e);return s.message="Successfully set component: "+e.file,s}o(Rhe,"setComponentFile");async function yhe(e){let t=Bn.dropComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Pe.join(r,n):r,i=Pe.join(er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s),a=Pe.join(er.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ie.pathExists(a)&&await Ie.unlink(a),await Ie.pathExists(i)&&await Ie.remove(i);let c=Pe.join(er.get(ht.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ie.pathExists(c)){let u=JSON.parse(await Ie.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ie.writeFile(c,JSON.stringify(u,null,2),"utf8")}hT.deleteConfigFromFile([r]);let l=await pi(e);return e.restart===!0?(PK.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(yhe,"dropComponent");async function Ahe(e){let t=Bn.addSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;Kt.trace("adding ssh key",r);let c=Pe.join(Za,r+".key"),l=Pe.join(Za,"config");if(await Ie.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ie.outputFile(c,n),await Ie.chmod(c,"0600");let u=`#${r}
23
+ `,""):null}catch(h){h.stderr?a[u].npm_error=_K(h.stderr):a[u].npm_error=h.message;continue}try{a[u].npm_output=JSON.parse(f)}catch{a[u].npm_output=f}try{a[u].npm_error=JSON.parse(m)}catch{a[u].npm_error=m}}return Za.info(`finished installModules with response ${a}`),a.warning=t,a}o(jme,"installModules");function _K(e){let t='"error": {',r=e.indexOf('"error": {'),n=e.indexOf(`}
24
+ `);return r>-1&&n>-1?JSON.parse(e.substring(r+t.length-1,n+1)):e}o(_K,"parseNPMStdErr");async function Qme(e){Za.info(`starting auditModules for request: ${e}`);let t=SK(e);if(t)throw ap(t,t.message,cp.BAD_REQUEST);let{projects:r}=e;await hT(),await gK(r);let n={};for(let s=0,i=r.length;s<i;s++){let a=r[s],c=Xa.join(nC,a);n[a]={npm_output:null,npm_error:null};try{let l=await jd("npm audit --json",c);n[a].npm_output=JSON.parse(l)}catch(l){n[a].npm_error=_K(l.stderr)}}return Za.info(`finished auditModules with response ${n}`),n}o(Qme,"auditModules");async function hT(){return await jd("npm -v"),!0}o(hT,"checkNPMInstalled");async function gK(e){if(!Array.isArray(e)||e.length===0)throw ap(new Error,"projects argument must be an array with at least 1 element",cp.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n],a=Xa.join(nC,i.toString());if(!await Wd.pathExists(a)){t.push(i);continue}let l=Xa.join(a,"package.json");await Wd.pathExists(l)||r.push(i)}if(t.length>0)throw ap(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,cp.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw ap(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,cp.BAD_REQUEST,void 0,void 0,!0)}o(gK,"checkProjectPaths");function SK(e){let t=fT.object({projects:fT.array().min(1).items(fT.string()).required(),dry_run:fT.boolean().default(!1)});return qme.validateBySchema(e,t)}o(SK,"modulesValidator")});var iC=M((HUe,NK)=>{"use strict";var Ms=require("fs-extra"),dp=require("path"),up=z(),RK=ie(),{PACKAGE_ROOT:Jme}=Rt(),sC=(k(),v(K)),IK=ce(),Xme=yt();NK.exports=Zme;async function Zme(){let e=ehe(),t=IK.get(sC.CONFIG_PARAMS.ROOTPATH),r=dp.join(t,"package.json"),n={dependencies:{harperdb:"file:"+Jme}},s=dp.join(t,"node_modules");Ms.ensureDirSync(s);let i,a=!0,c=!1;try{i=Ms.readJsonSync(r)}catch(l){if(RK.isEmptyOrZeroLength(e))return;if(l.code!==sC.NODE_ERROR_CODES.ENOENT)throw l;a=!1}if(!RK.isEmptyOrZeroLength(e)){for(let{name:l,package:u}of e){let d=AK(u);n.dependencies[l]=d+u}if(!a){up.notify("Installing components"),await bK(r,n,null),await yK(t,e);return}for(let{name:l,package:u}of e){let d=i.dependencies[l],f=AK(u);if(d===void 0||d!==f+u){c=!0;break}if(u.startsWith("file:"))try{if(Ms.statSync(new URL(u+"/package.json")).mtimeMs>Ms.statSync(r).mtimeMs){c=!0;break}}catch(m){up.info(`Error checking ${u}/package.json modification time`,m);break}}}for(let l in i.dependencies)n.dependencies[l]===void 0&&(up.notify("Removing component",l),c=!0);c&&(up.notify("Updating components."),await bK(r,n,i),await yK(t,e))}o(Zme,"installComponents");function yK(e,t){return Promise.all(t.map(({name:r})=>{let n=dp.join(e,"node_modules",r),s=dp.join(e,"components",r);if(Ms.existsSync(n)&&Ms.lstatSync(n).isDirectory())return Ms.move(n,s,{overwrite:!0}).then(()=>{Ms.symlink(s,n)})}))}o(yK,"moveModuleToComponents");function ehe(){let e=Xme.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(ehe,"getComponentsConfig");function AK(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":dp.extname(e)||Ms.existsSync(e)?"file:":"github:"}o(AK,"getPkgPrefix");async function bK(e,t,r){up.trace("npm installing components package.json",t),Ms.writeFileSync(e,JSON.stringify(t,null," "));try{await lp().installAllRootModules(IK.get(sC.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(n){throw r?Ms.writeFileSync(e,JSON.stringify(r,null," ")):Ms.unlinkSync(e),n}}o(bK,"installPackages")});var PK={};Ce(PK,{packageDirectory:()=>the});function the(e,t={skip_node_modules:!1,skip_symlinks:!1}){return new Promise((r,n)=>{let s=[];OK.default.pack(e,{dereference:!t.skip_symlinks,ignore:t.skip_node_modules?i=>i.includes("node_modules")||i.includes((0,wK.join)("cache","webpack")):void 0}).pipe((0,CK.createGzip)()).on("data",i=>s.push(i)).on("end",()=>{r(Buffer.concat(s))}).on("error",n)})}var wK,OK,CK,LK=fe(()=>{wK=require("path"),OK=w(require("tar-fs")),CK=require("node:zlib");o(the,"packageDirectory")});var cC=M(tr=>{"use strict";var Ie=require("fs-extra"),oC=require("fast-glob"),Pe=require("path"),rhe=require("tar-fs"),nhe=require("gunzip-maybe"),aC=require("normalize-path"),Bn=pK(),Kt=z(),ht=(k(),v(K)),er=ce(),pT=yt(),she=ie(),{PACKAGE_ROOT:ihe}=Rt(),{handleHDBError:Yt,hdbErrors:ohe}=Ee(),{basename:ahe}=require("path"),che=iC(),MK=ce(),{Readable:lhe}=require("stream"),{isMainThread:uhe}=require("worker_threads"),{HDB_ERROR_MSGS:Gl,HTTP_STATUS_CODES:Wt}=ohe,vK=st(),{replicateOperation:pi}=(es(),v(vo)),{packageDirectory:dhe}=(LK(),v(PK)),DK=lp(),fhe=Pe.join(ihe,"application-template"),mhe=er.get(ht.CONFIG_PARAMS.ROOTPATH),ec=Pe.join(mhe,"ssh"),Go=Pe.join(ec,"known_hosts");function hhe(){Kt.trace("getting custom api status");let e={};try{e={port:er.get(ht.CONFIG_PARAMS.HTTP_PORT),directory:er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Yt(new Error,Gl.FUNCTION_STATUS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,t)}return e}o(hhe,"customFunctionsStatus");function phe(){Kt.trace("getting custom api endpoints");let e={},t=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT);try{oC.sync(aC(`${t}/*`),{onlyDirectories:!0}).forEach(n=>{let s=n.split("/").pop();e[s]={routes:oC.sync(aC(`${n}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:oC.sync(aC(`${n}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Yt(new Error,Gl.GET_FUNCTIONS,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,r)}return e}o(phe,"getCustomFunctions");function Ehe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=Bn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("getting custom api endpoint file content");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e,a=Pe.join(r,n,s,i+".js");try{return Ie.readFileSync(a,{encoding:"utf8"})}catch(c){throw Yt(new Error,Gl.GET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}o(Ehe,"getCustomFunction");async function _he(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=Bn.setCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("setting custom function file content");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i,function_content:a}=e;try{Ie.outputFileSync(Pe.join(r,n,s,i+".js"),a);let c=await pi(e);return c.message=`Successfully updated custom function: ${i}.js`,c}catch(c){throw Yt(new Error,Gl.SET_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,c)}}o(_he,"setCustomFunction");async function ghe(e){e.project&&(e.project=Pe.parse(e.project).name),e.file&&(e.file=Pe.parse(e.file).name);let t=Bn.getDropCustomFunctionValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function file");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,type:s,file:i}=e;try{Ie.unlinkSync(Pe.join(r,n,s,i+".js"));let a=await pi(e);return a.message=`Successfully deleted custom function: ${i}.js`,a}catch(a){throw Yt(new Error,Gl.DROP_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,a)}}o(ghe,"dropCustomFunction");async function She(e){e.project&&(e.project=Pe.parse(e.project).name);let t=Bn.addComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("adding component");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;try{let s=Pe.join(r,n);Ie.mkdirSync(s,{recursive:!0}),Ie.copySync(fhe,s);let i=await pi(e);return i.message=`Successfully added project: ${n}`,i}catch(s){throw Yt(new Error,Gl.ADD_FUNCTION,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,s)}}o(She,"addComponent");async function The(e){e.project&&(e.project=Pe.parse(e.project).name);let t=Bn.dropCustomFunctionProjectValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);Kt.trace("dropping custom function project");let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e,s=er.get(ht.CONFIG_PARAMS.APPS);if(!she.isEmptyOrZeroLength(s)){let i=!1;for(let[a,c]of s.entries())if(c.name===n){s.splice(a,1),i=!0;break}if(i)return pT.updateConfigValue(ht.CONFIG_PARAMS.APPS,s),`Successfully deleted project: ${n}`}try{let i=Pe.join(r,n);Ie.rmSync(i,{recursive:!0});let a=await pi(e);return a.message=`Successfully deleted project: ${n}`,a}catch(i){throw Yt(new Error,Gl.DROP_FUNCTION_PROJECT,Wt.INTERNAL_SERVER_ERROR,Kt.ERR,i)}}o(The,"dropCustomFunctionProject");async function Rhe(e){e.project&&(e.project=Pe.parse(e.project).name);let t=Bn.packageComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n}=e;Kt.trace("packaging component",n);let s;try{s=await Ie.realpath(Pe.join(r,n))}catch(a){if(a.code!==ht.NODE_ERROR_CODES.ENOENT)throw a;try{s=await Ie.realpath(Pe.join(er.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",n))}catch(c){if(c.code===ht.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${n}'`)}}let i=(await dhe(s,e)).toString("base64");return{project:n,payload:i}}o(Rhe,"packageComponent");async function yhe(e){e.project?e.project=Pe.parse(e.project).name:e.package&&(e.project=Ahe(e.package));let t=Bn.deployComponentValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{project:n,payload:s,package:i,install_command:a}=e;if(Kt.trace("deploying component",n),!s&&!i)throw new Error("'payload' or 'package' must be provided");let c;if(s){c=Pe.join(r,n),i="file:"+c,await Ie.emptyDir(c);let _=lhe.from(s instanceof Buffer?s:Buffer.from(s,"base64"));await new Promise((T,R)=>{_.pipe(nhe()).pipe(rhe.extract(c,{finish:T})).on("error",R)});let g=await Ie.readdir(c);g.length===1&&g[0]==="package"&&(await Ie.copy(Pe.join(c,"package"),c),await Ie.remove(Pe.join(c,"package")));let y=Pe.join(c,"node_modules");a?await DK.runCommand(a,c):Ie.existsSync(y)||await DK.installAllRootModules(!1,c)}else{await pT.addConfig(n,{package:i}),await che();let _=MK.get(ht.CONFIG_PARAMS.ROOTPATH);c=Pe.join(_,"node_modules",n)}if(uhe)return;let l=new Map;l.isWorker=!0;let u=(Qd(),v(fp)),d;u.setErrorReporter(_=>d=_);let f=ahe(c),m=u.componentErrors.get(f);try{await u.loadComponent(c,l)}finally{u.componentErrors.set(f,m)}if(d)throw d;Kt.info("Installed component");let h=e.restart==="rolling";e.restart=h?!1:e.restart;let p=await pi(e);if(e.restart===!0)vK.restartWorkers("http"),p.message=`Successfully deployed: ${n}, restarting HarperDB`;else if(h){let g=await(uC(),v(lC)).executeJob({operation:"restart_service",service:"http",replicated:!0});p.restartJobId=g.job_id,p.message=`Successfully deployed: ${n}, restarting HarperDB`}else p.message=`Successfully deployed: ${n}`;return p}o(yhe,"deployComponent");function Ahe(e){if(e.startsWith("git+ssh://"))return Pe.basename(e.split("#")[0].replace(/\.git$/,""));if(e.startsWith("http://")||e.startsWith("https://"))return Pe.basename(new URL(e.replace(/\.git$/,"")).pathname);if(e.startsWith("file://"))try{let{name:t}=JSON.parse(Ie.readFileSync(Pe.join(e,"package.json"),"utf8"));return Pe.basename(t)}catch{}return Pe.basename(e)}o(Ahe,"getProjectNameFromPackage");async function bhe(){let e=o(async(s,i)=>{try{let a=await Ie.readdir(s,{withFileTypes:!0});for(let c of a){let l=c.name;if(l.startsWith(".")||l==="node_modules")continue;let u=Pe.join(s,l);if(c.isDirectory()||c.isSymbolicLink()){let d={name:l,entries:[]};i.entries.push(d),await e(u,d)}else{let d=await Ie.stat(u),f={name:Pe.basename(l),mtime:d.mtime,size:d.size};i.entries.push(f)}}return i}catch(a){return Kt.warn("Error loading package",a),{error:a.toString(),entries:[]}}},"walkDir"),t=await e(er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),{name:er.get(ht.CONFIG_PARAMS.COMPONENTSROOT).split(Pe.sep).slice(-1).pop(),entries:[]}),n=(Qd(),v(fp)).componentErrors;for(let s of t.entries){let i=n.get(s.name);i?s.error=n.get(s.name):i===void 0&&(s.error="The component has not been loaded yet (may need a restart)")}return t}o(bhe,"getComponents");async function Ihe(e){let t=Bn.getComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let n=pT.getConfigObj()[e.project]||e.project==="harperdb"?Pe.join(MK.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules"):er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ie.stat(Pe.join(n,e.project,e.file));return{message:await Ie.readFile(Pe.join(n,e.project,e.file),s),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===ht.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Pe.join(e.project,e.file)}'`):i}}o(Ihe,"getComponentFile");async function Nhe(e){let t=Bn.setComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},n=Pe.join(er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);e.payload!==void 0?(await Ie.ensureFile(n),await Ie.outputFile(n,e.payload,r)):await Ie.ensureDir(n);let s=await pi(e);return s.message="Successfully set component: "+e.file,s}o(Nhe,"setComponentFile");async function whe(e){let t=Bn.dropComponentFileValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{project:r,file:n}=e,s=e.file?Pe.join(r,n):r,i=Pe.join(er.get(ht.CONFIG_PARAMS.COMPONENTSROOT),s),a=Pe.join(er.get(ht.CONFIG_PARAMS.ROOTPATH),"node_modules",r);await Ie.pathExists(a)&&await Ie.unlink(a),await Ie.pathExists(i)&&await Ie.remove(i);let c=Pe.join(er.get(ht.CONFIG_PARAMS.ROOTPATH),"package.json");if(await Ie.pathExists(c)){let u=JSON.parse(await Ie.readFile(c,"utf8"));u?.dependencies?.[r]&&delete u.dependencies[r],await Ie.writeFile(c,JSON.stringify(u,null,2),"utf8")}pT.deleteConfigFromFile([r]);let l=await pi(e);return e.restart===!0?(vK.restartWorkers("http"),l.message=`Successfully dropped: ${s}, restarting HarperDB`):l.message=`Successfully dropped: ${s}`,l}o(whe,"dropComponent");async function Ohe(e){let t=Bn.addSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n,host:s,hostname:i,known_hosts:a}=e;Kt.trace("adding ssh key",r);let c=Pe.join(ec,r+".key"),l=Pe.join(ec,"config");if(await Ie.pathExists(c))throw new Error("Key already exists. Use update_ssh_key or delete_ssh_key and then add_ssh_key");await Ie.outputFile(c,n),await Ie.chmod(c,"0600");let u=`#${r}
25
25
  Host ${s}
26
26
  HostName ${i}
27
27
  User git
28
28
  IdentityFile ${c}
29
29
  IdentitiesOnly yes`;await Ie.pathExists(l)?await Ie.appendFile(l,`
30
30
  `+u):await Ie.outputFile(l,u);let d="";if(await Ie.pathExists(Go)||(await Ie.writeFile(Go,""),await Ie.chmod(Go,"0600")),i=="github.com"&&!(await Ie.readFile(Go,"utf8")).includes("github.com"))try{let _=(await(await fetch("https://api.github.com/meta")).json()).ssh_keys;for(let g of _)Ie.appendFile(Go,"github.com "+g+`
31
- `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ie.appendFile(Go,a);let f=await pi(e);return f.message=`Added ssh key: ${r}${d}`,f}o(Ahe,"addSSHKey");async function bhe(e){let t=Bn.updateSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n}=e;Kt.trace("updating ssh key",r);let s=Pe.join(Za,r+".key");if(!await Ie.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ie.outputFile(s,n);let i=await pi(e);return i.message=`Updated ssh key: ${r}`,i}o(bhe,"updateSSHKey");async function Ihe(e){let t=Bn.deleteSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("deleting ssh key",r);let n=Pe.join(Za,r+".key"),s=Pe.join(Za,"config");if(!await Ie.pathExists(n))throw new Error("Key does not exist");let i=await Ie.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Ie.outputFile(s,i),Ie.removeSync(n);let c=await pi(e);return c.message=`Deleted ssh key: ${r}`,c}o(Ihe,"deleteSSHKey");async function Nhe(e){let t=[];return await Ie.pathExists(Za)&&(await Ie.readdir(Za)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(Nhe,"listSSHKeys");async function whe(e){let t=Bn.setSSHKnownHostsValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{known_hosts:r}=e;await Ie.outputFile(Go,r);let n=await pi(e);return n.message="Known hosts successfully set",n}o(whe,"setSSHKnownHosts");async function Ohe(e){return await Ie.pathExists(Go)?{known_hosts:await Ie.readFile(Go,"utf8")}:{known_hosts:null}}o(Ohe,"getSSHKnownHosts");tr.customFunctionsStatus=lhe;tr.getCustomFunctions=uhe;tr.getCustomFunction=dhe;tr.setCustomFunction=fhe;tr.dropCustomFunction=mhe;tr.addComponent=hhe;tr.dropCustomFunctionProject=phe;tr.packageComponent=Ehe;tr.deployComponent=_he;tr.getComponents=She;tr.getComponentFile=The;tr.setComponentFile=Rhe;tr.dropComponent=yhe;tr.addSSHKey=Ahe;tr.updateSSHKey=bhe;tr.deleteSSHKey=Ihe;tr.listSSHKeys=Nhe;tr.setSSHKnownHosts=whe;tr.getSSHKnownHosts=Ohe});var uC=M((HUe,DK)=>{"use strict";var vs=require("joi"),LK=at();DK.exports={readTransactionLogValidator:Che,deleteTransactionLogsBeforeValidator:Phe};function Che(e){let t=vs.object({schema:vs.string(),database:vs.string(),table:vs.string().required(),from:vs.date().timestamp(),to:vs.date().timestamp(),limit:vs.number().min(1)});return LK.validateBySchema(e,t)}o(Che,"readTransactionLogValidator");function Phe(e){let t=vs.object({schema:vs.string(),database:vs.string(),table:vs.string().required(),timestamp:vs.date().timestamp().required()});return LK.validateBySchema(e,t)}o(Phe,"deleteTransactionLogsBeforeValidator")});var _T=M((GUe,FK)=>{"use strict";var dC=(k(),v(K)),mp=lr(),MK=ie(),vK=ce(),UK=xi(),xK=z(),{handleHDBError:pT,hdbErrors:Lhe}=Ee(),{HTTP_STATUS_CODES:ET}=Lhe,{readTransactionLogValidator:Dhe,deleteTransactionLogsBeforeValidator:Mhe}=uC(),BK=jn(),vhe="Logs successfully deleted from transaction log.",Uhe="All logs successfully deleted from transaction log.";FK.exports={readTransactionLog:xhe,deleteTransactionLogsBefore:Fhe};async function xhe(e){let t=Dhe(e);if(t)throw pT(t,t.message,ET.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=MK.checkSchemaTableExist(e.database,e.table);if(r)throw pT(new Error,r,ET.NOT_FOUND,void 0,void 0,!0);return vK.get(dC.CONFIG_PARAMS.CLUSTERING_ENABLED)?await Bhe(e):(xK.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)),BK.readAuditLog(e))}o(xhe,"readTransactionLog");async function*Bhe(e){let t=UK.createNatsTableStreamName(e.database,e.table),r=await mp.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===dC.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(Bhe,"readTransactionLogNats");async function Fhe(e){let t=Mhe(e);if(t)throw pT(t,t.message,ET.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!vK.get(dC.CONFIG_PARAMS.CLUSTERING_ENABLED))return xK.info("Delete transaction logs called for Plexus"),BK.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=MK.checkSchemaTableExist(r,n);if(i)throw pT(new Error,i,ET.NOT_FOUND,void 0,void 0,!0);let a=UK.createNatsTableStreamName(r,n),{jsm:c}=await mp.getNATSReferences(),l=await mp.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=vhe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=Uhe):f=(await mp.viewStream(a,parseInt(s),1))[0].nats_sequence,await mp.purgeTableStream(r,n,{seq:f}),d}o(Fhe,"deleteTransactionLogsBefore")});var pC={};Ce(pC,{describeMetric:()=>VK,describeMetricOp:()=>hC,get:()=>qK,getOp:()=>fC,listMetrics:()=>$K,listMetricsOp:()=>mC});async function Hhe(e){return(await mg().get(e)).hostname}function HK(e,t){return e.length===0||e.includes(t)}function fC(e){return hp.trace?.("get_analytics request:",e),qK(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function GK(e){return"conditions"in e?{...e,conditions:e.conditions.map(GK)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function qK(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(GK));let a=t??[];HK(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),hp.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],HK(a,"node")&&(hp.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await Hhe(d)),hp.trace?.("get_analytics result:",JSON.stringify(u)),u})}function mC(e){return $K(e.metric_types)}async function $K(e=["builtin"]){let t=[],r=Object.values(Co);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function hC(e){return VK(e.metric)}async function VK(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return hp.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var kK,hp,EC=fe(()=>{kK=w(z());KI();YI();hp=(0,kK.forComponent)("analytics").conditional;o(Hhe,"lookupHostname");o(HK,"isSelected");o(fC,"getOp");o(GK,"conformCondition");o(qK,"get");o(mC,"listMetricsOp");o($K,"listMetrics");o(hC,"describeMetricOp");o(VK,"describeMetric")});var gT,ST,pp,TT=fe(()=>{gT={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},ST=Object.keys(gT),pp="primary"});function YK(e){return KK.validateBySchema(e,$he)}var Ep,KK,khe,Ghe,qhe,$he,WK=fe(()=>{Ep=w(require("joi")),KK=w(at());TT();khe=ST,Ghe=Object.entries(gT).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),qhe=o(()=>{let e=Ep.default.string().min(1).max(512);return Object.entries(gT).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Ep.default.string().valid(...r.allowedValues).messages({"any.only":Ghe[t]})}))}),e.required()},"createStatusValidationSchema"),$he=Ep.default.object({id:Ep.default.string().valid(...khe).required(),status:qhe()});o(YK,"validateStatus")});var RC={};Ce(RC,{DEFAULT_STATUS_ID:()=>pp,STATUS_IDS:()=>ST,Status:()=>Gl,clear:()=>gC,get:()=>SC,set:()=>TC});function gp(){return _C||(_C=et({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),_C}function gC({id:e}){return _p.debug?.("clearStatus",e),gp().delete(e)}function Khe(){return _p.debug?.("getAllStatus"),gp().get({})}function SC({id:e}){return e?(_p.debug?.("getStatus",e),gp().get(e)):(_p.debug?.("getStatus","all"),Khe())}function TC({status:e,id:t=pp}){let r=YK({status:e,id:t});if(r)throw(0,RT.handleHDBError)(r,r.message,Vhe.BAD_REQUEST);return _p.debug?.("setStatus",t,e),gp().put(t,{status:e})}var RT,zK,Vhe,_C,Gl,_p,Sp=fe(()=>{Le();RT=w(Ee()),zK=w(Ni());WK();TT();TT();({HTTP_STATUS_CODES:Vhe}=RT.hdbErrors);o(gp,"getStatusTable");Gl={get primaryStore(){return gp().primaryStore}},_p=(0,zK.loggerWithTag)("status");o(gC,"clearStatus");o(Khe,"getAllStatus");o(SC,"getStatus");o(TC,"setStatus")});var QK=M((ixe,jK)=>{"use strict";var yC=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};jK.exports=yC});var XK=M((axe,JK)=>{"use strict";var AC=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};JK.exports=AC});var IC=M((lxe,eY)=>{"use strict";var ZK=QK(),Yhe=XK(),{HDB_ERROR_MSGS:Whe}=tn(),bC=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=Whe.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 ZK(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Yhe(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new ZK(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};eY.exports=bC});var IT=M((dxe,_Y)=>{"use strict";var NC=Mn(),yT=on(),Us=OS(),yp=Ca(),wC=ul(),zhe=Mw(),jhe=b$(),Ap=Jn(),AT=hh(),Ar=z(),Qhe=Fw(),Jhe=kS(),Xhe=dO(),Zhe=qS(),epe=hO(),tpe=pO(),rpe=gO(),npe=TO(),OC=WS(),qo=ie(),spe=r1(),CC=MO(),nY=Kd(),pn=(k(),v(K)),sY=Q1(),ipe=Dd(),iY=(cd(),v(Th)),oY=(lT(),v(ip)),aY=yt(),fr=aC(),ope=require("alasql"),cY=_T(),lY=lp(),Jd=rs(),uY=(vd(),v(Md)),PC=(EC(),v(pC)),LC=(Sp(),v(RC)),dY=IC(),{handleHDBError:Fn,hdbErrors:fY}=Ee(),{HDB_ERROR_MSGS:jr,HTTP_STATUS_CODES:Tp}=fY,J=new Map,mY="delete",ec="insert",xs="read",ql="update",Rp="describe",tY=yp.describeSchema.name,rY=yp.describeTable.name,hY={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},ape={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},cpe="catchup",lpe="handleGetJob",upe="handleGetJobsByStartDate",bT={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},dpe=[Us.createTable.name,Us.createAttribute.name,Us.dropTable.name,Us.dropAttribute.name],pY={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Z=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};J.set(NC.insert.name,new Z(!1,[ec]));J.set(NC.update.name,new Z(!1,[ql]));J.set(NC.upsert.name,new Z(!1,[ec,ql]));J.set(yT.searchByConditions.name,new Z(!1,[xs]));J.set(yT.searchByHash.name,new Z(!1,[xs]));J.set(yT.searchByValue.name,new Z(!1,[xs]));J.set(yT.search.name,new Z(!1,[xs]));J.set(Us.createSchema.name,new Z(!0,[]));J.set(Us.createTable.name,new Z(!0,[]));J.set(Us.createAttribute.name,new Z(!1,[ec]));J.set(Us.dropSchema.name,new Z(!0,[]));J.set(Us.dropTable.name,new Z(!0,[]));J.set(Us.dropAttribute.name,new Z(!0,[]));J.set(yp.describeSchema.name,new Z(!1,[xs]));J.set(yp.describeTable.name,new Z(!1,[xs]));J.set(wC.deleteRecord.name,new Z(!1,[mY]));J.set(Ap.addUser.name,new Z(!0,[]));J.set(Ap.alterUser.name,new Z(!0,[]));J.set(Ap.dropUser.name,new Z(!0,[]));J.set(Ap.listUsersExternal.name,new Z(!0,[]));J.set(AT.listRoles.name,new Z(!0,[]));J.set(AT.addRole.name,new Z(!0,[]));J.set(AT.alterRole.name,new Z(!0,[]));J.set(AT.dropRole.name,new Z(!0,[]));J.set(Qhe.name,new Z(!0,[]));J.set(Jhe.name,new Z(!0,[]));J.set(Xhe.name,new Z(!0,[]));J.set(Zhe.name,new Z(!0,[]));J.set(epe.name,new Z(!0,[]));J.set(tpe.name,new Z(!0,[]));J.set(OC.setRoutes.name,new Z(!0,[]));J.set(OC.getRoutes.name,new Z(!0,[]));J.set(OC.deleteRoutes.name,new Z(!0,[]));J.set(aY.setConfiguration.name,new Z(!0,[]));J.set(rpe.clusterStatus.name,new Z(!0,[]));J.set(npe.name,new Z(!0,[]));J.set(CC.getFingerprint.name,new Z(!0,[]));J.set(CC.setLicense.name,new Z(!0,[]));J.set(wC.deleteFilesBefore.name,new Z(!0,[]));J.set(wC.deleteAuditLogsBefore.name,new Z(!0,[]));J.set(nY.restart.name,new Z(!0,[]));J.set(nY.restartService.name,new Z(!0,[]));J.set(zhe.name,new Z(!0,[]));J.set(jhe.name,new Z(!0,[xs]));J.set(ipe.systemInformation.name,new Z(!0,[]));J.set(aY.getConfiguration.name,new Z(!0,[]));J.set(cY.readTransactionLog.name,new Z(!0,[]));J.set(cY.deleteTransactionLogsBefore.name,new Z(!0,[]));J.set(lY.installModules.name,new Z(!0,[]));J.set(lY.auditModules.name,new Z(!0,[]));J.set(Jd.createCsr.name,new Z(!0,[]));J.set(Jd.signCertificate.name,new Z(!0,[]));J.set(Jd.listCertificates.name,new Z(!0,[]));J.set(Jd.addCertificate.name,new Z(!0,[]));J.set(Jd.removeCertificate.name,new Z(!0,[]));J.set(Jd.getKey.name,new Z(!0,[]));J.set(uY.addNodeBack.name,new Z(!0,[]));J.set(uY.removeNodeBack.name,new Z(!0,[]));J.set(PC.getOp.name,new Z(!1,[xs]));J.set(PC.listMetricsOp.name,new Z(!1,[xs]));J.set(PC.describeMetricOp.name,new Z(!1,[xs]));J.set(LC.clear.name,new Z(!0,[]));J.set(LC.get.name,new Z(!0,[]));J.set(LC.set.name,new Z(!0,[]));J.set(iY.createTokens.name,new Z(!1,[]));J.set(iY.refreshOperationToken.name,new Z(!1,[]));J.set(oY.login.name,new Z(!1,[]));J.set(oY.logout.name,new Z(!1,[]));J.set(fr.customFunctionsStatus.name,new Z(!0,[]));J.set(fr.getCustomFunctions.name,new Z(!0,[]));J.set(fr.getComponents.name,new Z(!0,[]));J.set(fr.getComponentFile.name,new Z(!0,[]));J.set(fr.setComponentFile.name,new Z(!0,[]));J.set(fr.dropComponent.name,new Z(!0,[]));J.set(fr.getCustomFunction.name,new Z(!0,[]));J.set(fr.setCustomFunction.name,new Z(!0,[]));J.set(fr.dropCustomFunction.name,new Z(!0,[]));J.set(fr.addComponent.name,new Z(!0,[]));J.set(fr.dropCustomFunctionProject.name,new Z(!0,[]));J.set(fr.packageComponent.name,new Z(!0,[]));J.set(fr.deployComponent.name,new Z(!0,[]));J.set(fr.addSSHKey.name,new Z(!0,[]));J.set(fr.updateSSHKey.name,new Z(!0,[]));J.set(fr.deleteSSHKey.name,new Z(!0,[]));J.set(fr.listSSHKeys.name,new Z(!0,[]));J.set(fr.setSSHKnownHosts.name,new Z(!0,[]));J.set(fr.getSSHKnownHosts.name,new Z(!0,[]));J.set(CC.getRegistrationInfo.name,new Z(!1,[]));J.set(Ap.userInfo.name,new Z(!1,[]));J.set(yp.describeAll.name,new Z(!1,[]));J.set(lpe,new Z(!1,[]));J.set(upe,new Z(!0,[]));J.set(cpe,new Z(!0,[]));J.set(bT.CSV_DATA_LOAD,new Z(!1,[ec,ql]));J.set(bT.CSV_URL_LOAD,new Z(!1,[ec,ql]));J.set(bT.CSV_FILE_LOAD,new Z(!1,[ec,ql]));J.set(bT.IMPORT_FROM_S3,new Z(!1,[ec,ql]));J.set(pY.EXPORT_TO_S3,new Z(!0,[]));J.set(pY.EXPORT_LOCAL,new Z(!0,[]));J.set(pn.VALID_SQL_OPS_ENUM.DELETE,new Z(!1,[mY]));J.set(pn.VALID_SQL_OPS_ENUM.SELECT,new Z(!1,[xs]));J.set(pn.VALID_SQL_OPS_ENUM.INSERT,new Z(!1,[ec]));J.set(pn.VALID_SQL_OPS_ENUM.UPDATE,new Z(!1,[ql]));_Y.exports={verifyPerms:mpe,verifyPermsAst:fpe,verifyBulkLoadAttributePerms:ppe};function fpe(e,t,r){if(qo.isEmptyOrZeroLength(e))throw Ar.info("verify_perms_ast has an empty user parameter"),Fn(new Error);if(qo.isEmptyOrZeroLength(t))throw Ar.info("verify_perms_ast has an empty user parameter"),Fn(new Error);if(qo.isEmptyOrZeroLength(r))throw Ar.info("verify_perms_ast has a null operation parameter"),Fn(new Error);try{let n=new dY,s=new spe(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ar.info("No schemas defined in verifyPermsAst(), will not continue."),Fn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&hY[r])throw Fn(new Error,jr.DROP_SYSTEM,Tp.FORBIDDEN);if(c&&!l)return null;let u=sY.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof ope.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=EY(t,r,a,n);return d||(a.forEach((f,m)=>{for(let h=0;h<f.length;h++){let p=s.getAttributesBySchemaTableName(m,f[h]),_=MC(t.role.permission,m,f[h]);DC(p,_,r,f[h],m,n)}}),n.getPermsResponse())}catch(n){throw Fn(n)}}o(fpe,"verifyPermsAst");function mpe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ar.info("null required parameter in verifyPerms"),Fn(new Error,jr.DEFAULT_INVALID_REQUEST,Tp.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new dY;if(qo.isEmptyOrZeroLength(e.hdb_user?.role)||qo.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Ar.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(jr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(pn.SYSTEM_SCHEMA_NAME)||s===pn.SYSTEM_SCHEMA_NAME;if(l&&d&&ape[e.operation]&&(i===pn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===pn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===pn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&hY[r])throw Fn(new Error,jr.DROP_SYSTEM,Tp.FORBIDDEN);if(l&&!d||u===!0&&(r===Us.createSchema.name||r===Us.dropSchema.name))return null;if(dpe.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=sY.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===tY||r===rY)&&!f.super_user){if(s===pn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(jr.SCHEMA_PERM_ERROR(s));if(r===tY&&(!f[s]||!f[s][Rp]))return c.handleInvalidItem(jr.SCHEMA_NOT_FOUND(s));if(r===rY&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][Rp]))return c.handleInvalidItem(jr.TABLE_NOT_FOUND(s,i))}let m=EY(e.hdb_user,r,a,c,n);if(m)return m;if(J.get(r)&&J.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&pn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let _=[],g=f[s].tables[i];g[pn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(T=>T[pn.PERMS_CRUD_ENUM.READ]).forEach(T=>{_.push(T.attribute_name)}):_=global.hdb_schema[s][i].attributes.map(y=>y.attribute),e.get_attributes=_)}let h=hpe(e),p=MC(e.hdb_user?.role?.permission,s,i);return DC(h,p,r,i,s,c,n),c.getPermsResponse()}o(mpe,"verifyPerms");function EY(e,t,r,n,s){if(qo.arrayHasEmptyValues([e,t,r]))throw Ar.info("hasPermissions has an invalid parameter"),Fn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||J.get(t).requires_su))return null;if(!J.get(t))throw Ar.info(`operation ${t} not found.`),Fn(new Error,jr.OP_NOT_FOUND(t),Tp.BAD_REQUEST);if(J.get(t)&&J.get(t).requires_su)return Ar.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(jr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][Rp]===!1){n.addInvalidItem(jr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(jr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[Rp]===!1)n.addInvalidItem(jr.TABLE_NOT_FOUND(l,d));else try{let m=[],h=J.get(t).perms;!qo.isEmpty(s)&&h.includes(s)&&(h=[s]);for(let p=0;p<h.length;p++){let _=h[p],g=f[_];(g==null||g===!1)&&(Ar.info(`Required ${_} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(_))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let h=jr.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Ar.error(h),Ar.error(m),Fn(fY.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?n.getPermsResponse():null}o(EY,"hasPermissions");function DC(e,t,r,n,s,i,a){if(!e||!t)throw Ar.info("no attributes specified in checkAttributePerms."),Fn(new Error);let c=J.get(r).perms;if(!c||c==="")throw Ar.info(`no permissions found for ${r} in checkAttributePerms().`),Fn(new Error);if(qo.isEmptyOrZeroLength(t))return Ar.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[Rp]===!1){i.addInvalidItem(jr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(pn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==xs)throw Fn(new Error,jr.SYSTEM_TIMESTAMP_PERMS_ERR,Tp.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(jr.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(DC,"checkAttributePerms");function hpe(e){let t=new Set;try{if(e.action)return t;if(e.operation===pn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Ar.info(r)}return t}o(hpe,"getRecordAttributes");function MC(e,t,r){let n=new Map;if(qo.isEmpty(e))return Ar.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{Ar.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(MC,"getAttributePermissions");function ppe(e,t,r,n,s,i,a){let c=new Set(i),l=MC(e,n,s);DC(c,l,t,s,n,a,r)}o(ppe,"verifyBulkLoadAttributePerms")});var wT=M((mxe,yY)=>{"use strict";yY.exports={evaluateSQL:Ope,processAST:RY,convertSQLToAST:TY,checkASTPermissions:SY};var Epe=Mn(),gY=require("util"),_pe=gY.callbackify(Epe.insert),gpe=on().search,Spe=pG().update,Tpe=gY.callbackify(Spe),Rpe=_G().convertDelete,tc=require("alasql"),ype=IT(),NT=z(),Ape=J_(),bpe=ie(),bp=(k(),v(K)),{hdbErrors:Ipe,handleHDBError:vC}=Ee(),{HTTP_STATUS_CODES:UC}=Ipe;Ape(tc);var Npe=403,wpe="There was a problem performing this insert. Please check the logs and try again.",xC=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Ope(e,t){let r=e.parsed_sql_object;if(!r){r=TY(e.sql);let n,s=r.ast.statements[0];if(s instanceof tc.yy.Insert?n=s.into.databaseid:s instanceof tc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof tc.yy.Update||s instanceof tc.yy.Delete?n=s.table.databaseid:NT.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof tc.yy.Select)&&bpe.isEmptyOrZeroLength(n))return t("No schema specified",null)}RY(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Ope,"evaluateSQL");function SY(e,t){let r;try{r=ype.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(SY,"checkASTPermissions");function TY(e){let t=new xC;if(!e)throw vC(new Error,"The 'sql' parameter is missing from the request body",UC.BAD_REQUEST);try{let r=e.trim(),n=tc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
32
- `);throw n[1]?vC(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,UC.BAD_REQUEST):vC(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",UC.BAD_REQUEST)}return t}o(TY,"convertSQLToAST");function RY(e,t,r){try{let n=Cpe;if(!e.bypass_auth&&!t.permissions_checked){let i=SY(e,t);if(i&&i.length>0)return r(Npe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case bp.VALID_SQL_OPS_ENUM.SELECT:n=gpe,s=t.ast.statements[0];break;case bp.VALID_SQL_OPS_ENUM.INSERT:n=Ppe;break;case bp.VALID_SQL_OPS_ENUM.UPDATE:n=Tpe;break;case bp.VALID_SQL_OPS_ENUM.DELETE:n=Rpe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(RY,"processAST");function Cpe(e,t){NT.info(e),t("unknown sql statement")}o(Cpe,"nullFunction");function Ppe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=Lpe(i,e.values)}catch(a){return r(a)}_pe(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){NT.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(Ppe,"convertInsert");function Lpe(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]]=tc.compile(`SELECT ${s.toString()} AS [${bp.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw NT.error(r),new Error(wpe)}}o(Lpe,"createDataObjects")});var qC=M((_xe,NY)=>{var LT=require("clone"),DT=at(),Dpe=ie(),CT=(k(),v(K)),pxe=z(),BC=require("fs"),HC=require("joi"),{string:PT}=HC.types(),{hdbErrors:Mpe,handleHDBError:OT}=Ee(),{HDB_ERROR_MSGS:Exe,HTTP_STATUS_CODES:FC}=Mpe,{commonValidators:Xd}=Di(),AY=" is required",vpe=["insert","update","upsert"],kC={database:{presence:!1,format:Xd.schema_format,length:Xd.schema_length},schema:{presence:!1,format:Xd.schema_format,length:Xd.schema_length},table:{presence:!0,format:Xd.schema_format,length:Xd.schema_length},action:{inclusion:{within:vpe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Upe={schema:PT.required(),table:PT.required(),action:PT.valid("insert","update","upsert")},{AWS_ACCESS_KEY:xpe,AWS_SECRET:Bpe,AWS_BUCKET:Fpe,AWS_FILE_KEY:Hpe,REGION:kpe}=CT.S3_BUCKET_AUTH_KEYS,Gpe={s3:{presence:!0},[`s3.${xpe}`]:{presence:!0,type:"String"},[`s3.${Bpe}`]:{presence:!0,type:"String"},[`s3.${Fpe}`]:{presence:!0,type:"String"},[`s3.${Hpe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${kpe}`]:{presence:!0,type:"String"}},bY=LT(kC);bY.data.presence={message:AY};var IY=LT(kC);IY.file_path.presence={message:AY};var qpe=Object.assign(LT(kC),Gpe),GC=LT(Upe);GC.csv_url=PT.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();GC.passthrough_headers=HC.object();function $pe(e){let t=DT.validateObject(e,bY);return MT(e,t)}o($pe,"dataObject");function Vpe(e){let t=DT.validateBySchema(e,HC.object(GC));return MT(e,t)}o(Vpe,"urlObject");function Kpe(e){let t=DT.validateObject(e,IY);return MT(e,t)}o(Kpe,"fileObject");function Ype(e){let t=DT.validateObject(e,qpe);return MT(e,t)}o(Ype,"s3FileObject");function MT(e,t){if(!t){let r=Dpe.checkGlobalSchemaTable(e.schema,e.table);if(r)return OT(new Error,r,FC.BAD_REQUEST);if(e.operation===CT.OPERATIONS_ENUM.CSV_FILE_LOAD)try{BC.accessSync(e.file_path,BC.constants.R_OK|BC.constants.F_OK)}catch(n){return n.code===CT.NODE_ERROR_CODES.ENOENT?OT(n,`No such file or directory ${n.path}`,FC.BAD_REQUEST):n.code===CT.NODE_ERROR_CODES.EACCES?OT(n,`Permission denied ${n.path}`,FC.BAD_REQUEST):OT(n)}}return t}o(MT,"postValidateChecks");NY.exports={dataObject:$pe,urlObject:Vpe,fileObject:Kpe,s3FileObject:Ype}});var $C=M((Sxe,wY)=>{"use strict";var Ip=z(),vT=(k(),v(K));async function Wpe(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===vT.OPERATIONS_ENUM.INSERT||t.operation===vT.OPERATIONS_ENUM.UPDATE||t.operation===vT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===vT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Ip.info(i.message),i):i.http_resp_msg?(Ip.error(`Error calling operation: ${e.name}`),Ip.error(i.http_resp_msg),i):(Ip.error(`Error calling operation: ${e.name}`),Ip.error(i),i)}}o(Wpe,"callOperationFunctionAsAwait");wY.exports={callOperationFunctionAsAwait:Wpe}});var VC=M((Rxe,CY)=>{"use strict";var{S3:zpe,GetObjectCommand:jpe}=require("@aws-sdk/client-s3");CY.exports={getFileStreamFromS3:Qpe,getS3AuthObj:OY};async function Qpe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await OY(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new jpe(r))).Body}o(Qpe,"getFileStreamFromS3");function OY(e,t,r){return new zpe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(OY,"getS3AuthObj")});var LY=M((Axe,PY)=>{"use strict";var KC=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},YC=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};PY.exports={BulkLoadFileObject:KC,BulkLoadDataObject:YC}});var zC=M((Ixe,DY)=>{"use strict";var WC=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};DY.exports=WC});var eP=M((Lxe,jY)=>{"use strict";var UT=Mn(),BT=qC(),Jpe=require("needle"),Ei=(k(),v(K)),wxe=It(),Zd=ie(),{handleHDBError:zt,hdbErrors:GY}=Ee(),{HTTP_STATUS_CODES:Qr,HDB_ERROR_MSGS:br,CHECK_LOGS_WRAPPER:Vl}=GY,ef=z(),jC=require("papaparse");Zd.promisifyPapaParse();var _i=require("fs-extra"),Xpe=require("path"),{chain:MY}=require("stream-chain"),vY=require("stream-json/streamers/StreamArray"),UY=require("stream-json/utils/Batch"),xY=require("stream-chain/utils/comp"),{finished:BY}=require("stream"),Zpe=ce(),qY=$C(),eEe=VC(),{BulkLoadFileObject:JC,BulkLoadDataObject:tEe}=LY(),XC=IC(),{verifyBulkLoadAttributePerms:$Y}=IT(),Oxe=zC(),Cxe=lr(),Pxe=xi(),{databases:rEe}=(Le(),v(ft)),{coerceType:nEe}=(Sm(),v(WH)),FY="No records parsed from csv file.",$l=`${Zpe.get("HDB_ROOT")}/tmp`,{schemaRegex:sEe}=Di(),HY=1024*1024*2,kY=5e3,iEe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};jY.exports={csvDataLoad:oEe,csvURLLoad:aEe,csvFileLoad:cEe,importFromS3:lEe};async function oEe(e,t){let r=BT.dataObject(e);if(r)throw zt(r,r.message,Qr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=YY(e.schema,e.table),i=jC.parse(e.data,{header:!0,skipEmptyLines:!0,transform:QC.bind(null,s),dynamicTyping:!1}),a=new XC;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&$Y(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw zt(new Error,c,Qr.BAD_REQUEST,void 0,void 0,!0);let l=new tEe(e.action,e.schema,e.table,i.data);return n=await qY.callOperationFunctionAsAwait(WY,l,null),n.message===FY?FY:zY(n.records,n.number_written)}catch(s){throw Kl(s)}}o(oEe,"csvDataLoad");async function aEe(e){let t=BT.urlObject(e);if(t)throw zt(t,t.message,Qr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${$l}/${r}`;try{await uEe(e,r)}catch(s){throw ef.error(br.DOWNLOAD_FILE_ERR(r)+" - "+s),zt(s,Vl(br.DOWNLOAD_FILE_ERR(r)))}try{let s=new JC(this.job_operation_function.name,e.action,e.schema,e.table,n,Ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await ZC(s);return await xT(n),i}catch(s){throw await xT(n),Kl(s)}}o(aEe,"csvURLLoad");async function cEe(e){let t=BT.fileObject(e);if(t)throw zt(t,t.message,Qr.BAD_REQUEST,void 0,void 0,!0);let r=new JC(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await ZC(r)}catch(n){throw Kl(n)}}o(cEe,"csvFileLoad");async function lEe(e){let t=BT.s3FileObject(e);if(t)throw zt(t,t.message,Qr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Xpe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${$l}/${s}`;let i=new JC(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await dEe(s,e);let a=await ZC(i);return await xT(r),a}catch(n){throw await xT(r),Kl(n)}}o(lEe,"importFromS3");async function uEe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Jpe("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 zt(n,s,n.statusCode,Ei.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}mEe(r,e.csv_url),await fEe(t,r.raw)}o(uEe,"downloadCSVFile");async function dEe(e,t){try{let r=`${$l}/${e}`;await _i.mkdirp($l),await _i.writeFile(`${$l}/${e}`,"",{flag:"a+"});let n=await _i.createWriteStream(r),s=await eEe.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){ef.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ef.error(br.S3_DOWNLOAD_ERR+" - "+r),zt(r,Vl(br.S3_DOWNLOAD_ERR))}}o(dEe,"downloadFileFromS3");async function fEe(e,t){try{await _i.mkdirp($l),await _i.writeFile(`${$l}/${e}`,t)}catch(r){throw ef.error(br.WRITE_TEMP_FILE_ERR),zt(r,Vl(br.DEFAULT_BULK_LOAD_ERR))}}o(fEe,"writeFileToTempFolder");async function xT(e){if(e)try{await _i.access(e),await _i.unlink(e)}catch{ef.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(xT,"deleteTempFile");function mEe(e,t){if(e.statusCode!==GY.HTTP_STATUS_CODES.OK)throw zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Qr.BAD_REQUEST);if(!iEe[e.headers["content-type"]])throw zt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Qr.BAD_REQUEST);if(!e.raw)throw zt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Qr.BAD_REQUEST)}o(mEe,"validateURLResponse");async function ZC(e){try{let t;switch(e.file_type){case Ei.VALID_S3_FILE_TYPES.CSV:t=await hEe(e);break;case Ei.VALID_S3_FILE_TYPES.JSON:t=await pEe(e);break;default:throw zt(new Error,br.DEFAULT_BULK_LOAD_ERR,Qr.BAD_REQUEST,Ei.LOG_LEVELS.ERROR,br.INVALID_FILE_EXT_ERR(e))}return zY(t.records,t.number_written)}catch(t){throw Kl(t)}}o(ZC,"fileLoad");async function VY(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await UT.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&$Y(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=zt(c);r(l)}}o(VY,"validateChunk");async function KY(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Zd.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Zd.isEmpty(c)&&!Zd.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await qY.callOperationFunctionAsAwait(WY,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=zt(c,Vl(br.INSERT_CSV_ERR),Qr.INTERNAL_SERVER_ERROR,Ei.LOG_LEVELS.ERROR,br.INSERT_CSV_ERR+" - "+c);r(l)}}o(KY,"insertChunk");async function hEe(e){let t={records:0,number_written:0},r=YY(e.schema,e.table);try{let n=new XC,s=_i.createReadStream(e.file_path,{highWaterMark:HY});s.setEncoding("utf8"),await jC.parsePromise(s,VY.bind(null,e,n),QC.bind(null,r));let i=n.getPermsResponse();if(i)throw zt(new Error,i,Qr.BAD_REQUEST);return s=_i.createReadStream(e.file_path,{highWaterMark:HY}),s.setEncoding("utf8"),await jC.parsePromise(s,KY.bind(null,e,t),QC.bind(null,r)),s.destroy(),t}catch(n){throw zt(n,Vl(br.PAPA_PARSE_ERR),Qr.INTERNAL_SERVER_ERROR,Ei.LOG_LEVELS.ERROR,br.PAPA_PARSE_ERR+n)}}o(hEe,"callPapaParse");function YY(e,t){let r=rEe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>nEe(i,s));return n}o(YY,"createTransformMap");function QC(e,t,r){let n=e.get(r);return n?n(t):Zd.autoCast(t)}o(QC,"typeFunction");async function pEe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new XC,s=MY([_i.createReadStream(e.file_path,{encoding:"utf-8"}),vY.withParser(),c=>c.value,new UY({batchSize:kY}),xY(async c=>{await VY(e,n,r,c)})]);await new Promise((c,l)=>{BY(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw zt(new Error,i,Qr.BAD_REQUEST);let a=MY([_i.createReadStream(e.file_path,{encoding:"utf-8"}),vY.withParser(),c=>c.value,new UY({batchSize:kY}),xY(async c=>{await KY(e,t,r,c)})]);return await new Promise((c,l)=>{BY(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw zt(n,Vl(br.INSERT_JSON_ERR),Qr.INTERNAL_SERVER_ERROR,Ei.LOG_LEVELS.ERROR,br.INSERT_JSON_ERR+n)}}o(pEe,"insertJson");async function WY(e){let t={};try{e.data&&e.data.length>0&&EEe(e.data[0])?t=await _Ee(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ef.info(t.message))}catch(r){throw Kl(r)}return t}o(WY,"callBulkFileLoad");function EEe(e){let t=Object.keys(e);for(let r of t)if(!sEe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(EEe,"validateColumnNames");async function _Ee(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=UT.insert;break;case"update":i=UT.update;break;case"upsert":i=UT.upsert;break;default:throw zt(new Error,br.INVALID_ACTION_PARAM_ERR(n),Qr.BAD_REQUEST,Ei.LOG_LEVELS.ERROR,br.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Zd.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw Kl(a)}}o(_Ee,"bulkFileLoad");function zY(e,t){return`successfully loaded ${t} of ${e} records`}o(zY,"buildResponseMsg");function Kl(e){return zt(e,Vl(br.DEFAULT_BULK_LOAD_ERR),Qr.INTERNAL_SERVER_ERROR,Ei.LOG_LEVELS.ERROR,br.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(Kl,"buildTopLevelErrMsg")});var nP=M((Mxe,nW)=>{"use strict";var rP=on(),gEe=VC(),{AsyncParser:SEe}=require("json2csv"),FT=require("stream"),os=ie(),tP=require("fs-extra"),TEe=require("path"),Bs=z(),{promisify:XY}=require("util"),Np=ie(),{handleHDBError:mr,hdbErrors:REe}=Ee(),{HDB_ERROR_MSGS:Hn,HTTP_STATUS_CODES:hr}=REe,{streamAsJSON:yEe}=(iA(),v(pv)),{Upload:AEe}=require("@aws-sdk/lib-storage"),{toCsvStream:bEe}=(po(),v(Iv)),QY=["search_by_value","search_by_hash","sql","search_by_conditions"],JY=["json","csv"],ZY="json",eW="csv",IEe="Successfully exported JSON locally.",NEe="Successfully exported CSV locally.",wEe=1e3,OEe=rP.searchByHash,CEe=rP.searchByValue,PEe=XY(FT.finished);nW.exports={export_to_s3:vEe,export_local:LEe};async function LEe(e){Bs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=tW(e);if(!os.isEmpty(t))throw Bs.error(t),mr(new Error,t,hr.BAD_REQUEST,void 0,void 0,!0);if(os.isEmpty(e.path))throw Bs.error(Hn.MISSING_VALUE("path")),mr(new Error,Hn.MISSING_VALUE("path"),hr.BAD_REQUEST,void 0,void 0,!0);let r=(os.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(TEe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=os.buildFolderPath(e.path,r);await DEe(e.path);let s=await rW(e);return await MEe(n,e.format,s)}o(LEe,"export_local");async function DEe(e){if(Bs.trace("in confirmPath"),os.isEmptyOrZeroLength(e))throw mr(new Error,`Invalid path: ${e}`,hr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await tP.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,Bs.error(n),mr(new Error,n,hr.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 Bs.error(r),mr(new Error,r,hr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(DEe,"confirmPath");async function MEe(e,t,r){if(Bs.trace("in saveToLocal"),Np.isEmptyOrZeroLength(e))throw mr(new Error,Hn.INVALID_VALUE("file_path"),hr.BAD_REQUEST,void 0,void 0,!0);if(Np.isEmptyOrZeroLength(t))throw mr(new Error,Hn.INVALID_VALUE("Source format"),hr.BAD_REQUEST,void 0,void 0,!0);if(Np.isEmpty(r))throw mr(new Error,Hn.NOT_FOUND("Data"),hr.BAD_REQUEST,void 0,void 0,!0);if(t===ZY){let n=tP.createWriteStream(e);return yEe(r).pipe(n),await PEe(n),{message:IEe,path:e}}else if(t===eW){let n=tP.createWriteStream(e),s=FT.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new SEe(i,c).fromInput(s).toOutput(n).promise(!1),{message:NEe,path:e}}throw mr(new Error,Hn.INVALID_VALUE("format"),hr.BAD_REQUEST)}o(MEe,"saveToLocal");async function vEe(e){if(!e.s3||Object.keys(e.s3).length===0)throw mr(new Error,Hn.MISSING_VALUE("S3 object"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw mr(new Error,Hn.MISSING_VALUE("aws_access_key_id"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw mr(new Error,Hn.MISSING_VALUE("aws_secret_access_key"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.bucket))throw mr(new Error,Hn.MISSING_VALUE("bucket"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.key))throw mr(new Error,Hn.MISSING_VALUE("key"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.region))throw mr(new Error,Hn.MISSING_VALUE("region"),hr.BAD_REQUEST);let t=tW(e);if(!os.isEmpty(t))throw mr(new Error,t,hr.BAD_REQUEST);Bs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await rW(e)}catch(l){throw Bs.error(l),l}let n,s=await gEe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new FT.PassThrough;if(e.format===eW){i=e.s3.key+".csv";let l=bEe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===ZY){i=e.s3.key+".json";let l=new FT.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let h=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=h,f!==0&&f%wEe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw mr(new Error,Hn.INVALID_VALUE("format"),hr.BAD_REQUEST);return new AEe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(vEe,"export_to_s3");function tW(e){if(Bs.trace("in exportCoreValidation"),os.isEmpty(e.format))return"format missing";if(JY.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${JY.join(", ")}`;let t=e.search_operation.operation;if(os.isEmpty(t))return"search_operation.operation missing";if(QY.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${QY.join(", ")}`}o(tW,"exportCoreValidation");async function rW(e){Bs.trace("in getRecords");let t,r;if(Np.isEmpty(e.search_operation)||Np.isEmptyOrZeroLength(e.search_operation.operation))throw mr(new Error,Hn.INVALID_VALUE("Search operation"),hr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=CEe;break;case"search_by_hash":t=OEe;break;case"search_by_conditions":t=rP.searchByConditions;break;case"sql":{let n=wT();t=XY(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Bs.error(r),mr(new Error,r,hr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(rW,"getRecords")});var iW=M((Uxe,sW)=>{"use strict";var sP=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};sW.exports=sP});var cW=M((Bxe,aW)=>{"use strict";var UEe=(k(),v(K)),oW=require("moment"),xEe=require("uuid").v4,iP=class{static{o(this,"JobObject")}constructor(){this.id=xEe(),this.type=void 0,this.start_datetime=oW().valueOf(),this.created_datetime=oW().valueOf(),this.end_datetime=void 0,this.status=UEe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};aW.exports=iP});var oP=M((Hxe,EW)=>{"use strict";var BEe=require("uuid").v4,mW=Mn(),hW=on(),FEe=ri(),HEe=Bu(),kEe=iW(),Ot=(k(),v(K)),GEe=cW(),qEe=kg(),gi=z(),$Ee=Wf(),tf=ie(),{promisify:VEe}=require("util"),Yl=require("moment"),KEe=wT(),HT=qC(),lW=gI(),{deleteTransactionLogsBeforeValidator:YEe}=uC(),{handleHDBError:uW,hdbErrors:WEe,ClientError:zEe}=Ee(),{HTTP_STATUS_CODES:dW}=WEe,fW=hW.searchByValue,jEe=hW.searchByHash,QEe=mW.insert,JEe=VEe(KEe.evaluateSQL),XEe=mW.update;EW.exports={addJob:t_e,updateJob:n_e,handleGetJob:ZEe,handleGetJobsByStartDate:e_e,getJobById:pW};async function ZEe(e){if(e.id===void 0)throw new zEe("'id' is required");let t=await pW(e.id);return tf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(ZEe,"handleGetJob");async function e_e(e){try{let t=await r_e(e);if(gi.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=Yl(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Yl(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 gi.error(r),new Error(r)}}o(e_e,"handleGetJobsByStartDate");async function t_e(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||tf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return gi.info(d),t.error=d,t}if(!Ot.JOB_TYPE_ENUM[e.operation])return gi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ot.OPERATIONS_ENUM.CSV_FILE_LOAD:n=HT.fileObject(e);break;case Ot.OPERATIONS_ENUM.CSV_URL_LOAD:n=HT.urlObject(e);break;case Ot.OPERATIONS_ENUM.CSV_DATA_LOAD:n=HT.dataObject(e);break;case Ot.OPERATIONS_ENUM.IMPORT_FROM_S3:n=HT.s3FileObject(e);break;case Ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=lW(e,"date");break;case Ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=lW(e,"timestamp");break;case Ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=YEe(e);break;case Ot.OPERATIONS_ENUM.RESTART_SERVICE:if(Ot.HDB_PROCESS_SERVICES[e.service]===void 0)throw uW(new Error,"Invalid service",dW.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw uW(n,n.message,dW.BAD_REQUEST,void 0,void 0,!0);let s=new GEe;s.type=e.operation===Ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new FEe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await fW(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return gi.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=BEe();try{a=await fW(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return gi.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return gi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new $Ee(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await QEe(l)}catch(d){return gi.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,gi.trace(d)}return t}o(t_e,"addJob");async function r_e(e){let t=Yl(e.from_date,Yl.ISO_8601),r=Yl(e.to_date,Yl.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 kEe(n,e.hdb_user);try{return await JEe(s)}catch(i){throw gi.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(r_e,"getJobsInDateRange");async function pW(e){if(tf.isEmptyOrZeroLength(e))return tf.errorizeMessage("Invalid job ID specified.");let t=new HEe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await jEe(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return gi.error(n),tf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(pW,"getJobById");async function n_e(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(tf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ot.JOB_STATUS_ENUM.COMPLETE||e.status===Ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Yl().valueOf());let t=new qEe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await XEe(t),r}o(n_e,"updateJob")});var bW=M((Gxe,AW)=>{"use strict";var _W=ie(),Ir=(k(),v(K)),s_e=require("moment"),kT=eP(),wp=z(),gW=oP(),SW=nP(),TW=ul(),RW=st(),i_e=_T(),o_e=Kd(),{parentPort:a_e,isMainThread:yW}=require("worker_threads"),{onMessageByType:c_e}=st(),aP=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function l_e(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(_W.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(_W.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ir.JOB_TYPE_ENUM.csv_file_load:await Wi(e,kT.csvFileLoad);break;case Ir.JOB_TYPE_ENUM.csv_url_load:await Wi(e,kT.csvURLLoad);break;case Ir.JOB_TYPE_ENUM.csv_data_load:await Wi(e,kT.csvDataLoad);break;case Ir.JOB_TYPE_ENUM.import_from_s3:await Wi(e,kT.importFromS3);break;case Ir.JOB_TYPE_ENUM.empty_trash:break;case Ir.JOB_TYPE_ENUM.export_local:await Wi(e,SW.export_local);break;case Ir.JOB_TYPE_ENUM.export_to_s3:await Wi(e,SW.export_to_s3);break;case Ir.JOB_TYPE_ENUM.delete_files_before:case Ir.JOB_TYPE_ENUM.delete_records_before:await Wi(e,TW.deleteFilesBefore);break;case Ir.JOB_TYPE_ENUM.delete_audit_logs_before:await Wi(e,TW.deleteAuditLogsBefore);break;case Ir.JOB_TYPE_ENUM.delete_transaction_logs_before:await Wi(e,i_e.deleteTransactionLogsBefore);break;case Ir.JOB_TYPE_ENUM.restart_service:return await Wi(e,o_e.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(l_e,"parseMessage");async function Wi(e,t){try{e.job.status=Ir.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=s_e().valueOf(),await gW.updateJob(e.job),await u_e(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):wp.error(`There was an error running ${t.name} job with id ${e.job.id}`),wp.error(n),e.job.message=n,e.job.status=Ir.JOB_STATUS_ENUM.ERROR;try{await gW.updateJob(e.job)}catch(s){throw wp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(Wi,"runJob");async function u_e(e){wp.trace("launching job thread:",e),yW?RW.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):a_e.postMessage({type:Ir.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(u_e,"launchJobThread");yW&&c_e(Ir.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{RW.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){wp.error(r)}});AW.exports={parseMessage:l_e,RunnerMessage:aP}});var NW=M(($xe,IW)=>{"use strict";var d_e=ie(),cP=ce(),rc=(k(),v(K)),f_e=It(),m_e=lr(),zi=z(),h_e=zC(),p_e=xi();cP.initSync();IW.exports={postOperationHandler:__e,sendOperationTransaction:Op};async function Op(e,t,r,n){if(e.schema===rc.SYSTEM_SCHEMA_NAME)return;let s=E_e(e,t,r);s&&(zi.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await m_e.publishToStream(`${f_e.SUBJECT_PREFIXES.TXN}.${e.schema}`,p_e.createNatsTableStreamName(e.schema,e.table),n,s))}o(Op,"sendOperationTransaction");function E_e(e,t,r){if(d_e.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===rc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(E_e,"convertCRUDOperationToTransaction");async function __e(e,t,r){if(!cP.get(rc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;zi.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=cP.get(rc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new h_e(t.txn_time,n,s);switch(e.operation){case rc.OPERATIONS_ENUM.INSERT:try{await Op(e,t.inserted_hashes,i,r)}catch(a){zi.error("There was an error calling clustering postOperationHandler for insert."),zi.error(a)}break;case rc.OPERATIONS_ENUM.DELETE:try{await Op(e,t.deleted_hashes,i,r)}catch(a){zi.error("There was an error calling clustering postOperationHandler for delete."),zi.error(a)}break;case rc.OPERATIONS_ENUM.UPDATE:try{await Op(e,t.update_hashes,i,r)}catch(a){zi.error("There was an error calling clustering postOperationHandler for update."),zi.error(a)}break;case rc.OPERATIONS_ENUM.UPSERT:try{await Op(e,t.upserted_hashes,i,r)}catch(a){zi.error("There was an error calling clustering postOperationHandler for upsert."),zi.error(a)}break;default:break}return t}o(__e,"postOperationHandler")});var Q,wW=fe(()=>{Q=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var cC={};Ce(cC,{chooseOperation:()=>YW,executeJob:()=>Fs,getOperationFunction:()=>WW,operation:()=>_P,processLocalTransaction:()=>KW});async function KW(e,t){try{if(e.body.operation!=="read_log"&&(Dp.default.log_level===Mf.INFO||Dp.default.log_level===Mf.DEBUG||Dp.default.log_level===Mf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;En.info(c)}}catch(n){En.error(n)}let r=await $W.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return T_e[e.body.operation]&&HW.default.setSchemaDataToGlobal(n=>{n&&En.error(n)}),r}function YW(e){let t;try{t=WW(e)}catch(s){throw En.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=$T.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=$T.default.checkASTPermissions(e,i);if(a)throw En.error(`${OW.FORBIDDEN} from operation ${e.operation}`),En.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Hs.handleHDBError)(new Error,a,Hs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==G.CREATE_AUTHENTICATION_TOKENS&&e.operation!==G.LOGIN&&e.operation!==G.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=FW.default.verifyPerms(i,s);if(a)throw En.error(`${OW.FORBIDDEN} from operation ${e.operation}`),En.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Hs.handleHDBError)(new Error,a,Hs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Hs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function WW(e){if(En.trace(`getOperationFunction with operation: ${e.operation}`),CW.has(e.operation))return CW.get(e.operation);throw(0,Hs.handleHDBError)(new Error,Hs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Hs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function _P(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=YW(e);return KW({body:e},n)}async function R_e(e){En.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[Dy]=!0;let a;switch(i.operation){case G.INSERT:a=await zl.default.insert(i);break;case G.UPDATE:a=await zl.default.update(i);break;case G.UPSERT:a=await zl.default.upsert(i);break;case G.DELETE:a=await sf.default.deleteRecord(i);break;default:En.warn("invalid operation in catchup");break}await VW.transactToClusteringUtils.postOperationHandler(i,a,e)}catch(a){En.info("Invalid operation in transaction"),En.error(a)}}async function Fs(e){(0,qW.transformReq)(e);let t,r;try{if(r=await VT.default.addJob(e),r){t=r.createdJob,En.info("addJob result",r);let n=new fP.default.RunnerMessage(t,e);return{message:await fP.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 En.error(i),(0,Hs.handleHDBError)(n,i)}}function y_e(){let e=new Map;return e.set(G.INSERT,new Q(zl.default.insert)),e.set(G.UPDATE,new Q(zl.default.update)),e.set(G.UPSERT,new Q(zl.default.upsert)),e.set(G.SEARCH_BY_CONDITIONS,new Q(nf.default.searchByConditions)),e.set(G.SEARCH_BY_HASH,new Q(nf.default.searchByHash)),e.set(G.SEARCH_BY_ID,new Q(nf.default.searchByHash)),e.set(G.SEARCH_BY_VALUE,new Q(nf.default.searchByValue)),e.set(G.SEARCH,new Q(g_e)),e.set(G.SQL,new Q(S_e)),e.set(G.CSV_DATA_LOAD,new Q(Fs,Cp.default.csvDataLoad)),e.set(G.CSV_FILE_LOAD,new Q(Fs,Cp.default.csvFileLoad)),e.set(G.CSV_URL_LOAD,new Q(Fs,Cp.default.csvURLLoad)),e.set(G.IMPORT_FROM_S3,new Q(Fs,Cp.default.importFromS3)),e.set(G.CREATE_SCHEMA,new Q(ji.default.createSchema)),e.set(G.CREATE_DATABASE,new Q(ji.default.createSchema)),e.set(G.CREATE_TABLE,new Q(ji.default.createTable)),e.set(G.CREATE_ATTRIBUTE,new Q(ji.default.createAttribute)),e.set(G.DROP_SCHEMA,new Q(ji.default.dropSchema)),e.set(G.DROP_DATABASE,new Q(ji.default.dropSchema)),e.set(G.DROP_TABLE,new Q(ji.default.dropTable)),e.set(G.DROP_ATTRIBUTE,new Q(ji.default.dropAttribute)),e.set(G.DESCRIBE_SCHEMA,new Q(Pp.default.describeSchema)),e.set(G.DESCRIBE_DATABASE,new Q(Pp.default.describeSchema)),e.set(G.DESCRIBE_TABLE,new Q(Pp.default.describeTable)),e.set(G.DESCRIBE_ALL,new Q(Pp.default.describeAll)),e.set(G.DELETE,new Q(sf.default.deleteRecord)),e.set(G.ADD_USER,new Q(rf.default.addUser)),e.set(G.ALTER_USER,new Q(rf.default.alterUser)),e.set(G.DROP_USER,new Q(rf.default.dropUser)),e.set(G.LIST_USERS,new Q(rf.default.listUsersExternal)),e.set(G.LIST_ROLES,new Q(Lp.default.listRoles)),e.set(G.ADD_ROLE,new Q(Lp.default.addRole)),e.set(G.ALTER_ROLE,new Q(Lp.default.alterRole)),e.set(G.DROP_ROLE,new Q(Lp.default.dropRole)),e.set(G.USER_INFO,new Q(rf.default.userInfo)),e.set(G.READ_LOG,new Q(LW.default)),e.set(G.ADD_NODE,new Q(DW.default)),e.set(G.UPDATE_NODE,new Q(lP.default)),e.set(G.SET_NODE_REPLICATION,new Q(lP.default)),e.set(G.REMOVE_NODE,new Q(MW.default)),e.set(G.CONFIGURE_CLUSTER,new Q(vW.default)),e.set(G.PURGE_STREAM,new Q(UW.default)),e.set(G.SET_CONFIGURATION,new Q(mP.default.setConfiguration)),e.set(G.CLUSTER_STATUS,new Q(xW.default.clusterStatus)),e.set(G.CLUSTER_NETWORK,new Q(BW.default)),e.set(G.CLUSTER_SET_ROUTES,new Q(GT.default.setRoutes)),e.set(G.CLUSTER_GET_ROUTES,new Q(GT.default.getRoutes)),e.set(G.CLUSTER_DELETE_ROUTES,new Q(GT.default.deleteRoutes)),e.set(G.EXPORT_TO_S3,new Q(Fs,uP.default.export_to_s3)),e.set(G.CREATE_CSR,new Q(Wl.default.createCsr)),e.set(G.SIGN_CERTIFICATE,new Q(Wl.default.signCertificate)),e.set(G.LIST_CERTIFICATES,new Q(Wl.default.listCertificates)),e.set(G.ADD_CERTIFICATES,new Q(Wl.default.addCertificate)),e.set(G.REMOVE_CERTIFICATE,new Q(Wl.default.removeCertificate)),e.set(G.GET_KEY,new Q(Wl.default.getKey)),e.set(G.ADD_NODE_BACK,new Q(iO)),e.set(G.REMOVE_NODE_BACK,new Q(oO)),e.set(G.DELETE_FILES_BEFORE,new Q(Fs,sf.default.deleteFilesBefore)),e.set(G.DELETE_RECORDS_BEFORE,new Q(Fs,sf.default.deleteFilesBefore)),e.set(G.EXPORT_LOCAL,new Q(Fs,uP.default.export_local)),e.set(G.SEARCH_JOBS_BY_START_DATE,new Q(VT.default.handleGetJobsByStartDate)),e.set(G.GET_JOB,new Q(VT.default.handleGetJob)),e.set(G.GET_FINGERPRINT,new Q(qT.default.getFingerprint)),e.set(G.SET_LICENSE,new Q(qT.default.setLicense)),e.set(G.GET_REGISTRATION_INFO,new Q(qT.default.getRegistrationInfo)),e.set(G.RESTART,new Q(dP.default.restart)),e.set(G.RESTART_SERVICE,new Q(Fs,dP.default.restartService)),e.set(G.CATCHUP,new Q(R_e)),e.set(G.SYSTEM_INFORMATION,new Q(kW.default.systemInformation)),e.set(G.DELETE_AUDIT_LOGS_BEFORE,new Q(Fs,sf.default.deleteAuditLogsBefore)),e.set(G.READ_AUDIT_LOG,new Q(PW.default)),e.set(G.CREATE_AUTHENTICATION_TOKENS,new Q(UN)),e.set(G.REFRESH_OPERATION_TOKEN,new Q(xN)),e.set(G.LOGIN,new Q(eC)),e.set(G.LOGOUT,new Q(tC)),e.set(G.GET_CONFIGURATION,new Q(mP.default.getConfiguration)),e.set(G.CUSTOM_FUNCTIONS_STATUS,new Q(Ct.default.customFunctionsStatus)),e.set(G.GET_CUSTOM_FUNCTIONS,new Q(Ct.default.getCustomFunctions)),e.set(G.GET_COMPONENT_FILE,new Q(Ct.default.getComponentFile)),e.set(G.GET_COMPONENTS,new Q(Ct.default.getComponents)),e.set(G.SET_COMPONENT_FILE,new Q(Ct.default.setComponentFile)),e.set(G.DROP_COMPONENT,new Q(Ct.default.dropComponent)),e.set(G.GET_CUSTOM_FUNCTION,new Q(Ct.default.getCustomFunction)),e.set(G.SET_CUSTOM_FUNCTION,new Q(Ct.default.setCustomFunction)),e.set(G.DROP_CUSTOM_FUNCTION,new Q(Ct.default.dropCustomFunction)),e.set(G.ADD_CUSTOM_FUNCTION_PROJECT,new Q(Ct.default.addComponent)),e.set(G.ADD_COMPONENT,new Q(Ct.default.addComponent)),e.set(G.DROP_CUSTOM_FUNCTION_PROJECT,new Q(Ct.default.dropCustomFunctionProject)),e.set(G.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Q(Ct.default.packageComponent)),e.set(G.PACKAGE_COMPONENT,new Q(Ct.default.packageComponent)),e.set(G.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Q(Ct.default.deployComponent)),e.set(G.DEPLOY_COMPONENT,new Q(Ct.default.deployComponent)),e.set(G.READ_TRANSACTION_LOG,new Q(hP.default.readTransactionLog)),e.set(G.DELETE_TRANSACTION_LOGS_BEFORE,new Q(Fs,hP.default.deleteTransactionLogsBefore)),e.set(G.INSTALL_NODE_MODULES,new Q(pP.default.installModules)),e.set(G.AUDIT_NODE_MODULES,new Q(pP.default.auditModules)),e.set(G.GET_BACKUP,new Q(ji.default.getBackup)),e.set(G.ADD_SSH_KEY,new Q(Ct.default.addSSHKey)),e.set(G.UPDATE_SSH_KEY,new Q(Ct.default.updateSSHKey)),e.set(G.DELETE_SSH_KEY,new Q(Ct.default.deleteSSHKey)),e.set(G.LIST_SSH_KEYS,new Q(Ct.default.listSSHKeys)),e.set(G.SET_SSH_KNOWN_HOSTS,new Q(Ct.default.setSSHKnownHosts)),e.set(G.GET_SSH_KNOWN_HOSTS,new Q(Ct.default.getSSHKnownHosts)),e.set(G.GET_ANALYTICS,new Q(fC)),e.set(G.LIST_METRICS,new Q(mC)),e.set(G.DESCRIBE_METRIC,new Q(hC)),e.set(G.GET_STATUS,new Q(SC)),e.set(G.SET_STATUS,new Q(TC)),e.set(G.CLEAR_STATUS,new Q(gC)),e}var nf,$T,Cp,ji,Pp,sf,PW,rf,Lp,Ct,Dp,LW,DW,lP,MW,vW,UW,xW,BW,GT,uP,FW,VT,Hs,qT,dP,EP,zl,HW,kW,fP,mP,hP,pP,GW,qW,Wl,$W,VW,OW,En,g_e,S_e,T_e,CW,lC=fe(()=>{nf=w(on()),$T=w(wT()),Cp=w(eP()),ji=w(OS()),Pp=w(Ca()),sf=w(ul()),PW=w(Mw()),rf=w(Jn()),Lp=w(hh()),Ct=w(aC()),Dp=w(z()),LW=w(Fw()),DW=w(kS()),lP=w(dO()),MW=w(qS()),vW=w(hO()),UW=w(pO()),xW=w(gO()),BW=w(TO()),GT=w(WS()),uP=w(nP()),FW=w(IT()),VT=w(oP());k();Hs=w(Ee()),qT=w(MO()),dP=w(Kd()),EP=w(require("util")),zl=w(Mn()),HW=w(ei()),kW=w(Dd()),fP=w(bW());cd();lT();mP=w(yt()),hP=w(_T()),pP=w(lp());Sm();GW=w(Ws()),qW=w(ie());Pr();Wl=w(rs());vd();EC();$W=w($C()),VW=w(NW());Sp();wW();({HTTP_STATUS_CODES:OW}=Hs.hdbErrors),En=Dp.default.loggerWithTag("operation"),g_e=EP.promisify(nf.default.search),S_e=EP.promisify($T.default.evaluateSQL),T_e={[G.CREATE_ATTRIBUTE]:!0,[G.CREATE_TABLE]:!0,[G.CREATE_SCHEMA]:!0,[G.DROP_ATTRIBUTE]:!0,[G.DROP_TABLE]:!0,[G.DROP_SCHEMA]:!0};o(KW,"processLocalTransaction");CW=y_e();ZI(exports);ve.operation=_P;o(YW,"chooseOperation");o(WW,"getOperationFunction");(0,GW._assignPackageExport)("operation",_P);o(_P,"operation");o(R_e,"catchup");o(Fs,"executeJob");o(y_e,"initializeOperationFunctionMap")});var WT=M((Jxe,QW)=>{"use strict";var KT=(k(),v(K)),A_e=ie(),Mp=z(),{handleHDBError:gP,hdbErrors:YT}=Ee(),{isMainThread:b_e}=require("worker_threads"),{Readable:I_e}=require("stream"),zW=require("os"),N_e=require("util"),w_e=FN(),O_e=N_e.promisify(w_e.authorize),jW=(lC(),v(cC)),{createGzip:C_e,constants:P_e}=require("zlib"),L_e=[KT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,KT.OPERATIONS_ENUM.LOGIN,KT.OPERATIONS_ENUM.LOGOUT];function D_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${zW.EOL}Stack: ${e.stack} ${zW.EOL}Terminating ${b_e?"HDB":"thread"}.`;console.error(t),Mp.fatal(t),process.exit(1)}o(D_e,"handleServerUncaughtException");function M_e(e,t,r){if(Mp[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:YT.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(M_e,"serverErrorHandler");function v_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=gP(new Error,"Invalid JSON.",YT.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(A_e.isEmpty(e.body.operation)){let n=gP(new Error,"Request body must include an 'operation' property.",YT.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(v_e,"reqBodyValidationHandler");function U_e(e,t,r){let n;!L_e.includes(e.body.operation)||e.body.operation===KT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?O_e(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Mp.warn(i),Mp.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(gP(i,a,YT.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(U_e,"authHandler");async function x_e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=jW.chooseOperation(e.body);let s=await jW.processLocalTransaction(e,n);if(s instanceof I_e&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(C_e({level:P_e.Z_BEST_SPEED})))}return s}catch(s){throw Mp.error(s),s}}o(x_e,"handlePostRequest");QW.exports={authHandler:U_e,handlePostRequest:x_e,handleServerUncaughtException:D_e,serverErrorHandler:M_e,reqBodyValidationHandler:v_e}});var ez=M((Zxe,ZW)=>{"use strict";var B_e=require("fastify-plugin"),{handlePostRequest:JW,authHandler:F_e,reqBodyValidationHandler:H_e}=WT();async function k_e(e){e.decorate("hdbCore",{preValidation:[H_e,F_e],request:o(t=>XW(JW(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>XW(JW(t,r,!0)),"requestWithoutAuthentication")})}o(k_e,"hdbCore");async function XW(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(XW,"convertAsyncIterators");ZW.exports=B_e(k_e)});var rz=M((r0e,tz)=>{"use strict";var t0e=require("fs"),zT=ce();zT.initSync();var{CONFIG_PARAMS:SP}=(k(),v(K)),G_e=1024*1024*1024;function q_e(e){let t=zT.get(SP.HTTP_TIMEOUT),r=zT.get(SP.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:G_e,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:zT.get(SP.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(q_e,"getServerOptions");tz.exports=q_e});var iz=M((s0e,sz)=>{"use strict";var TP=ce();TP.initSync();var{CONFIG_PARAMS:nz}=(k(),v(K));function $_e(){let e=TP.get(nz.HTTP_CORSACCESSLIST),t=TP.get(nz.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o($_e,"getCORSOptions");sz.exports=$_e});var cz=M((o0e,az)=>{"use strict";var oz=ce();oz.initSync();var V_e=(k(),v(K));function K_e(){return oz.get(V_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(K_e,"getHeaderTimeoutConfig");az.exports=K_e});var yP={};Ce(yP,{customFunctionsServer:()=>z_e,ready:()=>yz,start:()=>W_e});function W_e(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){$o||($o=Rz(t),ve.http((await $o).server));let a=await $o,c=(0,RP.dirname)(s),l=(0,RP.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!lz.has(c)){lz.add(c);try{a.register(Q_e(c,l))}catch(u){if(u.message==="Root plugin has already booted")St.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:yz}}async function z_e(){try{St.info("In Custom Functions Fastify server"+process.cwd()),St.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),St.debug(`Custom Functions server process ${process.pid} starting up.`),await j_e();let e=pz.get(U.HTTP_SECUREPORT)>0,t;try{t=$o=await Rz(e)}catch(r){throw St.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw St.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){St.error(`Custom Functions ${process.pid} Error: ${e}`),St.error(e),process.exit(1)}}async function j_e(){try{St.info("Custom Functions starting configuration."),await Ez.setUsersWithRolesCache(),St.info("Custom Functions completed configuration.")}catch(e){St.error(e)}}function Q_e(e,t){return async function(r){try{St.info("Custom Functions starting buildRoutes"),St.trace("Loading fastify routes folder "+e),(0,uz.existsSync)(e)&&r.register(hz.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:St.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?St.error(s.message):s&&St.error(s),a()})}catch(n){St.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Rz(e){St.info("Custom Functions starting buildServer.");let t=(0,_z.default)(e),r=(0,dz.default)(t);r.server.headersTimeout=(0,Sz.default)(),r.setErrorHandler(Tz.serverErrorHandler);let n=(0,gz.default)();return n&&r.register(fz.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(mz.default),await r.register(Y_e),await r.after(),tm(r),St.info("Custom Functions completed buildServer."),r}function yz(){if($o)return $o.then?$o.then(e=>e.ready()):$o.ready()}var RP,uz,dz,fz,mz,hz,pz,St,Y_e,Ez,_z,gz,Sz,Tz,$o,lz,Az=fe(()=>{RP=require("path"),uz=require("fs"),dz=w(require("fastify")),fz=w(require("@fastify/cors")),mz=w(LN()),hz=w(require("@fastify/autoload")),pz=w(ce());k();St=w(z()),Y_e=w(ez()),Ez=w(Jn()),_z=w(rz()),gz=w(iz()),Sz=w(cz()),Tz=w(WT());po();Pr();lz=new Set;o(W_e,"start");o(z_e,"customFunctionsServer");o(j_e,"setUp");o(Q_e,"buildRouteFolder");o(Rz,"buildServer");o(yz,"ready")});var AP={};Ce(AP,{start:()=>J_e});function J_e(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Oz.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(a=>n(s._nodeRequest,s._nodeResponse,()=>{a(i(s))}))}),!0}},handleFile(t,r,n){Iz||(Iz=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let a=bz.get(s.pathname);if(a)return{handlesHeaders:!0,body:(0,Nz.default)(s,(0,wz.realpathSync)(a))}}return i(s)},{runFirst:!0})),bz.set(r,n)}}}var Nz,wz,Oz,bz,Iz,Cz=fe(()=>{Nz=w(require("send")),wz=require("fs"),Oz=w(require("serve-static")),bz=new Map;o(J_e,"start")});var bP={};Ce(bP,{start:()=>X_e});function X_e({override:e}){return{handleFile:o((t,r,n)=>{jT.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,Pz.parse)(t))){if(process.env[s]!==void 0)if(jT.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)jT.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var Pz,jT,Lz=fe(()=>{Pz=require("dotenv"),jT=w(z());o(X_e,"start")});var IP={};Ce(IP,{DataLoaderError:()=>as,DataLoaderResult:()=>of,EmptyFileError:()=>XT,FileParseError:()=>JT,InvalidPropertyTypeError:()=>ZT,MissingRequiredPropertyError:()=>vp,RecordProcessingError:()=>Up,SystemDatabaseError:()=>eR,UnsupportedFileExtensionError:()=>QT,handleComponent:()=>ege,loadDataFile:()=>xz,suppressHandleComponentWarning:()=>Z_e});function ege(e){if((0,Mz.getWorkerIndex)()!==0){Qi.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||xz(t,cn,Ge).then(r=>{Qi.debug?.("Data loader processed file: %s: %s",(0,Vo.basename)(t.absolutePath),r.message)})})}async function xz({contents:e,absolutePath:t,stats:r},n,s){let i=(0,Vo.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,Dz.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new QT(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof as?f:new JT(t,f)}if(!a)throw new XT(t);let{database:c,table:l,records:u}=a;if(!l)throw new vp(t,"table");if(!u)throw new vp(t,"records");if(!Array.isArray(u))throw new ZT(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new eR(c,l);try{let f;if(c&&s[c]&&s[c][l])Qi.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])Qi.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{Qi.debug?.(`Table ${d} not found, creating new table`);let y=[];if(u.length>0){let T=u[0];Object.keys(T).map(R=>{let I={name:R,type:typeof T[R]};return R==="id"&&(I.isPrimaryKey=!0),I}).forEach(R=>{y.push(R)})}f=await et({database:c,table:l,attributes:y})}let m=u.length,h=0,p=0,_=0,g=100;for(let y=0;y<u.length;y+=g){let T=u.slice(y,y+g),R=[];for(let I of T)R.push(async()=>{try{let P=null,Y=I.id;if(Y!==void 0&&(P=await f.get(Y)),!P)return h++,f.put(I);let te=P.getUpdatedTime();return a.mtime>te?(p++,f.put(I)):(_++,Promise.resolve({inserted:0,updated:0}))}catch(P){if(P instanceof as)Qi.error?.(`Record processing error: ${P.message}`);else{let Y=new Up(d,P);Qi.error?.(`Record processing error: ${Y.message}`)}return Promise.resolve({inserted:0,updated:0,error:P.message})}});await Promise.all(R.map(I=>I()))}if(h>0||p>0){let y=`Loaded ${h} new and updated ${p} records in ${d}`;return _>0&&(y+=` (${_} records skipped)`),Qi.info?.(y),new of(t,c,l,"success",h+p,y)}else if(_>0){let y=`All ${_} records in ${d} already up-to-date`;return Qi.info?.(y),new of(t,c,l,"skipped",m,y)}else{let y=`No records to process in ${d}`;return Qi.info?.(y),new of(t,c,l,"success",0,y)}}catch(f){throw f instanceof as?f:new Up(d,f)}}var Vo,Dz,Mz,Ko,vz,Uz,Qi,Z_e,as,QT,JT,XT,vp,ZT,eR,Up,of,Bz=fe(()=>{Vo=require("node:path"),Dz=require("yaml");Le();Mz=w(st()),Ko=w(tn()),vz=w(Ee()),Uz=w(z()),Qi=Uz.default.forComponent("dataLoader"),Z_e=!0;o(ege,"handleComponent");o(xz,"loadDataFile");as=class extends vz.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=Ko.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},QT=class extends as{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Vo.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Ko.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},JT=class extends as{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Vo.basename)(t)}: ${r.message}`,Ko.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},XT=class extends as{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Vo.basename)(t)} is empty or invalid`,Ko.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},vp=class extends as{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Vo.basename)(t)} is missing required "${r}" property`,Ko.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},ZT=class extends as{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Vo.basename)(t)} has invalid "${r}" property, expected ${n}`,Ko.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},eR=class extends as{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Ko.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},Up=class extends as{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Ko.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},of=class{static{o(this,"DataLoaderResult")}#e;#r;#t;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#r=r||"unknown",this.#t=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#r}get table(){return this.#t}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#r,table:this.#t,status:this.#n,count:this.#s,message:this.#i}}}});var wP=M((g0e,Fz)=>{"use strict";var xp=ce();xp.initSync();var af=require("fs-extra"),NP=require("path"),cf=(k(),v(K)),tge=require("crypto"),rge=require("uuid").v4;Fz.exports=nge;function nge(){if(xp.getHdbBasePath()!==void 0){let e=NP.join(xp.getHdbBasePath(),cf.LICENSE_KEY_DIR_NAME,cf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=NP.join(xp.getHdbBasePath(),cf.LICENSE_KEY_DIR_NAME,cf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=NP.join(xp.getHdbBasePath(),cf.LICENSE_KEY_DIR_NAME,cf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{af.accessSync(r),af.accessSync(e),af.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=rge(),i=tge.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});af.writeFileSync(r,s),af.writeFileSync(e,i.privateKey),af.writeFileSync(t,i.publicKey)}else throw n}}}o(nge,"checkJWTTokenExist")});var kz=M((T0e,Hz)=>{"use strict";var OP=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};Hz.exports={HdbInfoInsertObject:OP}});var $z=M((y0e,qz)=>{"use strict";var Gz=(k(),v(K)),CP=class{static{o(this,"UpgradeObject")}constructor(t,r){this[Gz.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Gz.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};qz.exports={UpgradeObject:CP}});var tR=M((b0e,Kz)=>{"use strict";var ks=require("prompt"),lf=require("chalk"),Vz=z(),Si=require("os"),PP=Pc(),LP=["yes","y"];async function sge(e){let t=`${Si.EOL}`+lf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Si.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Si.EOL}${Si.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Si.EOL}`;ks.override=PP(["CONFIRM_UPGRADE"]),ks.start(),ks.message=t;let r={properties:{CONFIRM_UPGRADE:{description:lf.magenta(`${Si.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await ks.get([r])}catch(s){return Vz.error("There was an error when prompting user about an upgrade."),Vz.error(s),!1}return LP.includes(n.CONFIRM_UPGRADE)}o(sge,"forceUpdatePrompt");async function ige(e){let t=`${Si.EOL}`+lf.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Si.EOL}`);ks.override=PP(["CONFIRM_DOWNGRADE"]),ks.start(),ks.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:lf.magenta(`${Si.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await ks.get([r]);return LP.includes(n.CONFIRM_DOWNGRADE)}o(ige,"forceDowngradePrompt");async function oge(){let e=`${Si.EOL}`+lf.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");ks.override=PP(["GENERATE_CERTS"]),ks.start(),ks.message=e;let t={properties:{GENERATE_CERTS:{description:lf.magenta(`${Si.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await ks.get([t]);return LP.includes(r.GENERATE_CERTS)}o(oge,"upgradeCertsPrompt");Kz.exports={forceUpdatePrompt:sge,forceDowngradePrompt:ige,upgradeCertsPrompt:oge}});var MP=M((N0e,Yz)=>{"use strict";var DP=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};Yz.exports=DP});var zz=M((D0e,Wz)=>{"use strict";var age=ie(),cge=yt(),O0e=z(),C0e=require("path"),P0e=require("fs"),L0e=(k(),v(K));Wz.exports={getOldPropsValue:lge};function lge(e,t,r=!1){let n=t.getRaw(e);return age.isNotEmptyAndHasValue(n)?n:r?cge.getDefaultConfig(e):""}o(lge,"getOldPropsValue")});var Xz=M((v0e,Jz)=>{"use strict";var nc=require("path"),sc=require("fs-extra"),uge=require("properties-reader"),dge=MP(),pr=z(),{getOldPropsValue:Tt}=zz(),{HDB_SETTINGS_NAMES:Te,CONFIG_PARAMS:jl}=(k(),v(K)),Ql=yt(),rR=ce(),jz=ie(),Ji=(k(),v(K)),vP=new dge("3.1.0"),Qz=[];function fge(){let e=uge(rR.get(Te.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),pr.info(t);let r=` ;Settings for the HarperDB process.
31
+ `)}catch{d=". Unable to get known hosts from github.com. Set your known hosts manually using set_ssh_known_hosts."}a&&await Ie.appendFile(Go,a);let f=await pi(e);return f.message=`Added ssh key: ${r}${d}`,f}o(Ohe,"addSSHKey");async function Che(e){let t=Bn.updateSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r,key:n}=e;Kt.trace("updating ssh key",r);let s=Pe.join(ec,r+".key");if(!await Ie.pathExists(s))throw new Error("Key does not exist. Use add_ssh_key");await Ie.outputFile(s,n);let i=await pi(e);return i.message=`Updated ssh key: ${r}`,i}o(Che,"updateSSHKey");async function Phe(e){let t=Bn.deleteSSHKeyValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{name:r}=e;Kt.trace("deleting ssh key",r);let n=Pe.join(ec,r+".key"),s=Pe.join(ec,"config");if(!await Ie.pathExists(n))throw new Error("Key does not exist");let i=await Ie.readFile(s,"utf8"),a=new RegExp(`#${r}[\\S\\s]*?IdentitiesOnly yes`,"g");i=i.replace(a,""),await Ie.outputFile(s,i),Ie.removeSync(n);let c=await pi(e);return c.message=`Deleted ssh key: ${r}`,c}o(Phe,"deleteSSHKey");async function Lhe(e){let t=[];return await Ie.pathExists(ec)&&(await Ie.readdir(ec)).forEach(r=>{r!="known_hosts"&&r!="config"&&t.push({name:r.split(".")[0]})}),t}o(Lhe,"listSSHKeys");async function Dhe(e){let t=Bn.setSSHKnownHostsValidator(e);if(t)throw Yt(t,t.message,Wt.BAD_REQUEST);let{known_hosts:r}=e;await Ie.outputFile(Go,r);let n=await pi(e);return n.message="Known hosts successfully set",n}o(Dhe,"setSSHKnownHosts");async function Mhe(e){return await Ie.pathExists(Go)?{known_hosts:await Ie.readFile(Go,"utf8")}:{known_hosts:null}}o(Mhe,"getSSHKnownHosts");tr.customFunctionsStatus=hhe;tr.getCustomFunctions=phe;tr.getCustomFunction=Ehe;tr.setCustomFunction=_he;tr.dropCustomFunction=ghe;tr.addComponent=She;tr.dropCustomFunctionProject=The;tr.packageComponent=Rhe;tr.deployComponent=yhe;tr.getComponents=bhe;tr.getComponentFile=Ihe;tr.setComponentFile=Nhe;tr.dropComponent=whe;tr.addSSHKey=Ohe;tr.updateSSHKey=Che;tr.deleteSSHKey=Phe;tr.listSSHKeys=Lhe;tr.setSSHKnownHosts=Dhe;tr.getSSHKnownHosts=Mhe});var dC=M((VUe,xK)=>{"use strict";var vs=require("joi"),UK=at();xK.exports={readTransactionLogValidator:vhe,deleteTransactionLogsBeforeValidator:Uhe};function vhe(e){let t=vs.object({schema:vs.string(),database:vs.string(),table:vs.string().required(),from:vs.date().timestamp(),to:vs.date().timestamp(),limit:vs.number().min(1)});return UK.validateBySchema(e,t)}o(vhe,"readTransactionLogValidator");function Uhe(e){let t=vs.object({schema:vs.string(),database:vs.string(),table:vs.string().required(),timestamp:vs.date().timestamp().required()});return UK.validateBySchema(e,t)}o(Uhe,"deleteTransactionLogsBeforeValidator")});var gT=M((YUe,qK)=>{"use strict";var fC=(k(),v(K)),mp=lr(),BK=ie(),FK=ce(),HK=xi(),kK=z(),{handleHDBError:ET,hdbErrors:xhe}=Ee(),{HTTP_STATUS_CODES:_T}=xhe,{readTransactionLogValidator:Bhe,deleteTransactionLogsBeforeValidator:Fhe}=dC(),GK=jn(),Hhe="Logs successfully deleted from transaction log.",khe="All logs successfully deleted from transaction log.";qK.exports={readTransactionLog:Ghe,deleteTransactionLogsBefore:$he};async function Ghe(e){let t=Bhe(e);if(t)throw ET(t,t.message,_T.BAD_REQUEST,void 0,void 0,!0);e.database=e.database??e.schema??"data";let r=BK.checkSchemaTableExist(e.database,e.table);if(r)throw ET(new Error,r,_T.NOT_FOUND,void 0,void 0,!0);return FK.get(fC.CONFIG_PARAMS.CLUSTERING_ENABLED)?await qhe(e):(kK.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)),GK.readAuditLog(e))}o(Ghe,"readTransactionLog");async function*qhe(e){let t=HK.createNatsTableStreamName(e.database,e.table),r=await mp.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===fC.OPERATIONS_ENUM.DELETE&&(i.hash_values=n?.entry?.hash_values),yield i}}o(qhe,"readTransactionLogNats");async function $he(e){let t=Fhe(e);if(t)throw ET(t,t.message,_T.BAD_REQUEST,void 0,void 0,!0);if(e.database=e.database??e.schema??"data",!FK.get(fC.CONFIG_PARAMS.CLUSTERING_ENABLED))return kK.info("Delete transaction logs called for Plexus"),GK.deleteAuditLogsBefore(e);let{database:r,table:n,timestamp:s}=e,i=BK.checkSchemaTableExist(r,n);if(i)throw ET(new Error,i,_T.NOT_FOUND,void 0,void 0,!0);let a=HK.createNatsTableStreamName(r,n),{jsm:c}=await mp.getNATSReferences(),l=await mp.getStreamInfo(a),u=new Date(l.state.first_ts).getTime();if(s<=u)return`No transactions exist before: ${s}`;let d=Hhe,f,m=new Date(l.state.last_ts).getTime();return s>m?(f=l.state.last_seq+1,d=khe):f=(await mp.viewStream(a,parseInt(s),1))[0].nats_sequence,await mp.purgeTableStream(r,n,{seq:f}),d}o($he,"deleteTransactionLogsBefore")});var EC={};Ce(EC,{describeMetric:()=>zK,describeMetricOp:()=>pC,get:()=>YK,getOp:()=>mC,listMetrics:()=>WK,listMetricsOp:()=>hC});async function Vhe(e){return(await mg().get(e)).hostname}function $K(e,t){return e.length===0||e.includes(t)}function mC(e){return hp.trace?.("get_analytics request:",e),YK(e.metric,e.get_attributes,e.start_time,e.end_time,e.conditions)}function KK(e){return"conditions"in e?{...e,conditions:e.conditions.map(KK)}:{attribute:e.search_attribute??e.attribute,comparator:e.search_type??e.comparator,value:e.search_value??e.value}}async function YK(e,t,r,n,s){let i=[{attribute:"metric",comparator:"equals",value:e}];s&&i.push(...s.map(KK));let a=t??[];$K(a,"id")||a.push("id"),r&&i.push({attribute:"id",comparator:"greater_than_equal",value:r}),n&&i.push({attribute:"id",comparator:"less_than",value:n});let c={conditions:i};return a.length>0&&(c.select=a),hp.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],$K(a,"node")&&(hp.trace?.(`get_analytics lookup hostname for nodeId: ${d}`),u.node=await Vhe(d)),hp.trace?.("get_analytics result:",JSON.stringify(u)),u})}function hC(e){return WK(e.metric_types)}async function WK(e=["builtin"]){let t=[],r=Object.values(Co);if(e.includes("builtin")&&(t=r),e.includes("custom")){let n=r.map(c=>({attribute:"metric",comparator:"not_equal",value:c})),s={select:["metric"],conditions:n},i=new Set,a=await databases.system.hdb_analytics.search(s);for await(let c of a)i.add(c.metric);t.push(...Array.from(i.values()))}return t}function pC(e){return zK(e.metric)}async function zK(e){let t={conditions:[{attribute:"metric",comparator:"equals",value:e}],sort:{attribute:"id",descending:!0},limit:1},r=databases.system.hdb_analytics.search(t),n=[{name:"node",type:"string"}];for await(let s of r){for(let a in s)n.push({name:a,type:typeof s[a]});let i={attributes:n};return hp.trace?.("describe_metric result:",JSON.stringify(i)),i}return{}}var VK,hp,_C=fe(()=>{VK=w(z());WI();zI();hp=(0,VK.forComponent)("analytics").conditional;o(Vhe,"lookupHostname");o($K,"isSelected");o(mC,"getOp");o(KK,"conformCondition");o(YK,"get");o(hC,"listMetricsOp");o(WK,"listMetrics");o(pC,"describeMetricOp");o(zK,"describeMetric")});var ST,TT,pp,RT=fe(()=>{ST={primary:{allowedValues:null},maintenance:{allowedValues:null},availability:{allowedValues:["Available","Unavailable"]}},TT=Object.keys(ST),pp="primary"});function QK(e){return jK.validateBySchema(e,zhe)}var Ep,jK,Khe,Yhe,Whe,zhe,JK=fe(()=>{Ep=w(require("joi")),jK=w(at());RT();Khe=TT,Yhe=Object.entries(ST).reduce((e,[t,r])=>(r.allowedValues&&(e[t]=`Status "${t}" only accepts these values: ${r.allowedValues.join(", ")}`),e),{}),Whe=o(()=>{let e=Ep.default.string().min(1).max(512);return Object.entries(ST).forEach(([t,r])=>{r.allowedValues&&(e=e.when("id",{is:t,then:Ep.default.string().valid(...r.allowedValues).messages({"any.only":Yhe[t]})}))}),e.required()},"createStatusValidationSchema"),zhe=Ep.default.object({id:Ep.default.string().valid(...Khe).required(),status:Whe()});o(QK,"validateStatus")});var yC={};Ce(yC,{DEFAULT_STATUS_ID:()=>pp,STATUS_IDS:()=>TT,Status:()=>qo,clear:()=>SC,get:()=>TC,set:()=>RC});function gp(){return gC||(gC=et({database:"system",table:"hdb_status",replicate:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"status"},{name:"__createdtime__"},{name:"__updatedtime__"}]})),gC}function SC({id:e}){return _p.debug?.("clearStatus",e),gp().delete(e)}function Qhe(){return _p.debug?.("getAllStatus"),gp().get({})}function TC({id:e}){return e?(_p.debug?.("getStatus",e),gp().get(e)):(_p.debug?.("getStatus","all"),Qhe())}function RC({status:e,id:t=pp}){let r=QK({status:e,id:t});if(r)throw(0,yT.handleHDBError)(r,r.message,jhe.BAD_REQUEST);return _p.debug?.("setStatus",t,e),gp().put(t,{status:e})}var yT,XK,jhe,gC,qo,_p,Sp=fe(()=>{Le();yT=w(Ee()),XK=w(Ni());JK();RT();RT();({HTTP_STATUS_CODES:jhe}=yT.hdbErrors);o(gp,"getStatusTable");qo={get primaryStore(){return gp().primaryStore}},_p=(0,XK.loggerWithTag)("status");o(SC,"clearStatus");o(Qhe,"getAllStatus");o(TC,"getStatus");o(RC,"setStatus")});var eY=M((uxe,ZK)=>{"use strict";var AC=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,n=[],s=[]){this.schema=t,this.table=r,this.required_table_permissions=n,this.required_attribute_permissions=s}};ZK.exports=AC});var rY=M((fxe,tY)=>{"use strict";var bC=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};tY.exports=bC});var NC=M((hxe,sY)=>{"use strict";var nY=eY(),Jhe=rY(),{HDB_ERROR_MSGS:Xhe}=tn(),IC=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=Xhe.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 nY(t,r,n),i=`${t}_${r}`;this.unauthorized_access[i]=s}addUnauthorizedAttributes(t,r,n,s){let i=[];t.forEach(c=>{let l=new Jhe(c,s[c]);i.push(l)});let a=`${r}_${n}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new nY(r,n,[],i);this.unauthorized_access[a]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};sY.exports=IC});var NT=M((Exe,RY)=>{"use strict";var wC=Mn(),AT=on(),Us=CS(),yp=Pa(),OC=dl(),Zhe=vw(),epe=O$(),Ap=Jn(),bT=hh(),Ar=z(),tpe=Hw(),rpe=GS(),npe=fO(),spe=$S(),ipe=pO(),ope=EO(),ape=SO(),cpe=RO(),CC=zS(),$o=ie(),lpe=o1(),PC=vO(),aY=Kd(),pn=(k(),v(K)),cY=eK(),upe=Dd(),lY=(cd(),v(Th)),uY=(uT(),v(ip)),dY=yt(),fr=cC(),dpe=require("alasql"),fY=gT(),mY=lp(),Jd=rs(),hY=(vd(),v(Md)),LC=(_C(),v(EC)),DC=(Sp(),v(yC)),pY=NC(),{handleHDBError:Fn,hdbErrors:EY}=Ee(),{HDB_ERROR_MSGS:jr,HTTP_STATUS_CODES:Tp}=EY,J=new Map,_Y="delete",tc="insert",xs="read",ql="update",Rp="describe",iY=yp.describeSchema.name,oY=yp.describeTable.name,gY={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},fpe={insert:!0,delete:!0,deleteRecord:!0,update:!0,updateData:!0,upsert:!0,upsertData:!0},mpe="catchup",hpe="handleGetJob",ppe="handleGetJobsByStartDate",IT={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Epe=[Us.createTable.name,Us.createAttribute.name,Us.dropTable.name,Us.dropAttribute.name],SY={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},Z=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};J.set(wC.insert.name,new Z(!1,[tc]));J.set(wC.update.name,new Z(!1,[ql]));J.set(wC.upsert.name,new Z(!1,[tc,ql]));J.set(AT.searchByConditions.name,new Z(!1,[xs]));J.set(AT.searchByHash.name,new Z(!1,[xs]));J.set(AT.searchByValue.name,new Z(!1,[xs]));J.set(AT.search.name,new Z(!1,[xs]));J.set(Us.createSchema.name,new Z(!0,[]));J.set(Us.createTable.name,new Z(!0,[]));J.set(Us.createAttribute.name,new Z(!1,[tc]));J.set(Us.dropSchema.name,new Z(!0,[]));J.set(Us.dropTable.name,new Z(!0,[]));J.set(Us.dropAttribute.name,new Z(!0,[]));J.set(yp.describeSchema.name,new Z(!1,[xs]));J.set(yp.describeTable.name,new Z(!1,[xs]));J.set(OC.deleteRecord.name,new Z(!1,[_Y]));J.set(Ap.addUser.name,new Z(!0,[]));J.set(Ap.alterUser.name,new Z(!0,[]));J.set(Ap.dropUser.name,new Z(!0,[]));J.set(Ap.listUsersExternal.name,new Z(!0,[]));J.set(bT.listRoles.name,new Z(!0,[]));J.set(bT.addRole.name,new Z(!0,[]));J.set(bT.alterRole.name,new Z(!0,[]));J.set(bT.dropRole.name,new Z(!0,[]));J.set(tpe.name,new Z(!0,[]));J.set(rpe.name,new Z(!0,[]));J.set(npe.name,new Z(!0,[]));J.set(spe.name,new Z(!0,[]));J.set(ipe.name,new Z(!0,[]));J.set(ope.name,new Z(!0,[]));J.set(CC.setRoutes.name,new Z(!0,[]));J.set(CC.getRoutes.name,new Z(!0,[]));J.set(CC.deleteRoutes.name,new Z(!0,[]));J.set(dY.setConfiguration.name,new Z(!0,[]));J.set(ape.clusterStatus.name,new Z(!0,[]));J.set(cpe.name,new Z(!0,[]));J.set(PC.getFingerprint.name,new Z(!0,[]));J.set(PC.setLicense.name,new Z(!0,[]));J.set(OC.deleteFilesBefore.name,new Z(!0,[]));J.set(OC.deleteAuditLogsBefore.name,new Z(!0,[]));J.set(aY.restart.name,new Z(!0,[]));J.set(aY.restartService.name,new Z(!0,[]));J.set(Zhe.name,new Z(!0,[]));J.set(epe.name,new Z(!0,[xs]));J.set(upe.systemInformation.name,new Z(!0,[]));J.set(dY.getConfiguration.name,new Z(!0,[]));J.set(fY.readTransactionLog.name,new Z(!0,[]));J.set(fY.deleteTransactionLogsBefore.name,new Z(!0,[]));J.set(mY.installModules.name,new Z(!0,[]));J.set(mY.auditModules.name,new Z(!0,[]));J.set(Jd.createCsr.name,new Z(!0,[]));J.set(Jd.signCertificate.name,new Z(!0,[]));J.set(Jd.listCertificates.name,new Z(!0,[]));J.set(Jd.addCertificate.name,new Z(!0,[]));J.set(Jd.removeCertificate.name,new Z(!0,[]));J.set(Jd.getKey.name,new Z(!0,[]));J.set(hY.addNodeBack.name,new Z(!0,[]));J.set(hY.removeNodeBack.name,new Z(!0,[]));J.set(LC.getOp.name,new Z(!1,[xs]));J.set(LC.listMetricsOp.name,new Z(!1,[xs]));J.set(LC.describeMetricOp.name,new Z(!1,[xs]));J.set(DC.clear.name,new Z(!0,[]));J.set(DC.get.name,new Z(!0,[]));J.set(DC.set.name,new Z(!0,[]));J.set(lY.createTokens.name,new Z(!1,[]));J.set(lY.refreshOperationToken.name,new Z(!1,[]));J.set(uY.login.name,new Z(!1,[]));J.set(uY.logout.name,new Z(!1,[]));J.set(fr.customFunctionsStatus.name,new Z(!0,[]));J.set(fr.getCustomFunctions.name,new Z(!0,[]));J.set(fr.getComponents.name,new Z(!0,[]));J.set(fr.getComponentFile.name,new Z(!0,[]));J.set(fr.setComponentFile.name,new Z(!0,[]));J.set(fr.dropComponent.name,new Z(!0,[]));J.set(fr.getCustomFunction.name,new Z(!0,[]));J.set(fr.setCustomFunction.name,new Z(!0,[]));J.set(fr.dropCustomFunction.name,new Z(!0,[]));J.set(fr.addComponent.name,new Z(!0,[]));J.set(fr.dropCustomFunctionProject.name,new Z(!0,[]));J.set(fr.packageComponent.name,new Z(!0,[]));J.set(fr.deployComponent.name,new Z(!0,[]));J.set(fr.addSSHKey.name,new Z(!0,[]));J.set(fr.updateSSHKey.name,new Z(!0,[]));J.set(fr.deleteSSHKey.name,new Z(!0,[]));J.set(fr.listSSHKeys.name,new Z(!0,[]));J.set(fr.setSSHKnownHosts.name,new Z(!0,[]));J.set(fr.getSSHKnownHosts.name,new Z(!0,[]));J.set(PC.getRegistrationInfo.name,new Z(!1,[]));J.set(Ap.userInfo.name,new Z(!1,[]));J.set(yp.describeAll.name,new Z(!1,[]));J.set(hpe,new Z(!1,[]));J.set(ppe,new Z(!0,[]));J.set(mpe,new Z(!0,[]));J.set(IT.CSV_DATA_LOAD,new Z(!1,[tc,ql]));J.set(IT.CSV_URL_LOAD,new Z(!1,[tc,ql]));J.set(IT.CSV_FILE_LOAD,new Z(!1,[tc,ql]));J.set(IT.IMPORT_FROM_S3,new Z(!1,[tc,ql]));J.set(SY.EXPORT_TO_S3,new Z(!0,[]));J.set(SY.EXPORT_LOCAL,new Z(!0,[]));J.set(pn.VALID_SQL_OPS_ENUM.DELETE,new Z(!1,[_Y]));J.set(pn.VALID_SQL_OPS_ENUM.SELECT,new Z(!1,[xs]));J.set(pn.VALID_SQL_OPS_ENUM.INSERT,new Z(!1,[tc]));J.set(pn.VALID_SQL_OPS_ENUM.UPDATE,new Z(!1,[ql]));RY.exports={verifyPerms:gpe,verifyPermsAst:_pe,verifyBulkLoadAttributePerms:Tpe};function _pe(e,t,r){if($o.isEmptyOrZeroLength(e))throw Ar.info("verify_perms_ast has an empty user parameter"),Fn(new Error);if($o.isEmptyOrZeroLength(t))throw Ar.info("verify_perms_ast has an empty user parameter"),Fn(new Error);if($o.isEmptyOrZeroLength(r))throw Ar.info("verify_perms_ast has a null operation parameter"),Fn(new Error);try{let n=new pY,s=new lpe(e),i=s.getSchemas(),a=new Map;if((!i||i.length===0)&&s.affected_attributes&&s.affected_attributes.size>0)throw Ar.info("No schemas defined in verifyPermsAst(), will not continue."),Fn(new Error);let c=!!t.role.permission.super_user,l=i.includes("system");if(l&&gY[r])throw Fn(new Error,jr.DROP_SYSTEM,Tp.FORBIDDEN);if(c&&!l)return null;let u=cY.getRolePermissions(t.role);t.role.permission=u,!c&&e instanceof dpe.yy.Select&&(e=s.updateAttributeWildcardsForRolePerms(u));for(let f=0;f<i.length;f++){let m=s.getTablesBySchemaName(i[f]);m&&a.set(i[f],m)}let d=TY(t,r,a,n);return d||(a.forEach((f,m)=>{for(let h=0;h<f.length;h++){let p=s.getAttributesBySchemaTableName(m,f[h]),_=vC(t.role.permission,m,f[h]);MC(p,_,r,f[h],m,n)}}),n.getPermsResponse())}catch(n){throw Fn(n)}}o(_pe,"verifyPermsAst");function gpe(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ar.info("null required parameter in verifyPerms"),Fn(new Error,jr.DEFAULT_INVALID_REQUEST,Tp.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let n=e.action,s=e.schema??e.database,i=e.table,a=new Map;s&&i&&a.set(s,[i]);let c=new pY;if($o.isEmptyOrZeroLength(e.hdb_user?.role)||$o.isEmptyOrZeroLength(e.hdb_user?.role?.permission))return Ar.info(`User ${e.hdb_user?.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(jr.USER_HAS_NO_PERMS(e.hdb_user?.username));let l=!!e.hdb_user?.role?.permission?.super_user,u=e.hdb_user?.role?.permission?.structure_user,d=a.has(pn.SYSTEM_SCHEMA_NAME)||s===pn.SYSTEM_SCHEMA_NAME;if(l&&d&&fpe[e.operation]&&(i===pn.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME||i===pn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||i===pn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME))return null;if(d&&gY[r])throw Fn(new Error,jr.DROP_SYSTEM,Tp.FORBIDDEN);if(l&&!d||u===!0&&(r===Us.createSchema.name||r===Us.dropSchema.name))return null;if(Epe.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=cY.getRolePermissions(e.hdb_user?.role);if(e.hdb_user?.role&&(e.hdb_user.role.permission=f),(r===iY||r===oY)&&!f.super_user){if(s===pn.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(jr.SCHEMA_PERM_ERROR(s));if(r===iY&&(!f[s]||!f[s][Rp]))return c.handleInvalidItem(jr.SCHEMA_NOT_FOUND(s));if(r===oY&&(!f[s]||!f[s].tables[i]||!f[s].tables[i][Rp]))return c.handleInvalidItem(jr.TABLE_NOT_FOUND(s,i))}let m=TY(e.hdb_user,r,a,c,n);if(m)return m;if(J.get(r)&&J.get(r).perms.length===0)return null;if(!l&&e.get_attributes&&pn.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let _=[],g=f[s].tables[i];g[pn.PERMS_CRUD_ENUM.READ]&&(g.attribute_permissions.length>0?g.attribute_permissions.filter(T=>T[pn.PERMS_CRUD_ENUM.READ]).forEach(T=>{_.push(T.attribute_name)}):_=global.hdb_schema[s][i].attributes.map(y=>y.attribute),e.get_attributes=_)}let h=Spe(e),p=vC(e.hdb_user?.role?.permission,s,i);return MC(h,p,r,i,s,c,n),c.getPermsResponse()}o(gpe,"verifyPerms");function TY(e,t,r,n,s){if($o.arrayHasEmptyValues([e,t,r]))throw Ar.info("hasPermissions has an invalid parameter"),Fn(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||J.get(t).requires_su))return null;if(!J.get(t))throw Ar.info(`operation ${t} not found.`),Fn(new Error,jr.OP_NOT_FOUND(t),Tp.BAD_REQUEST);if(J.get(t)&&J.get(t).requires_su)return Ar.info(`operation ${t} requires SU permissions.`),n.handleUnauthorizedItem(jr.OP_IS_SU_ONLY(t));let c=r.keys();for(let l of c){try{if(l&&!a[l]||a[l][Rp]===!1){n.addInvalidItem(jr.SCHEMA_NOT_FOUND(l));continue}}catch{n.addInvalidItem(jr.SCHEMA_NOT_FOUND(l));continue}let u=r.get(l);for(let d of u){let f=a[l].tables[d];if(!f||f[Rp]===!1)n.addInvalidItem(jr.TABLE_NOT_FOUND(l,d));else try{let m=[],h=J.get(t).perms;!$o.isEmpty(s)&&h.includes(s)&&(h=[s]);for(let p=0;p<h.length;p++){let _=h[p],g=f[_];(g==null||g===!1)&&(Ar.info(`Required ${_} permission not found for ${t} ${s?`${s} `:""}operation in role ${e.role.id}`),m.push(_))}m.length>0&&n.addUnauthorizedTable(l,d,m)}catch(m){let h=jr.UNKNOWN_OP_AUTH_ERROR(t,l,d);throw Ar.error(h),Ar.error(m),Fn(EY.CHECK_LOGS_WRAPPER(h))}}}return r.size<2?n.getPermsResponse():null}o(TY,"hasPermissions");function MC(e,t,r,n,s,i,a){if(!e||!t)throw Ar.info("no attributes specified in checkAttributePerms."),Fn(new Error);let c=J.get(r).perms;if(!c||c==="")throw Ar.info(`no permissions found for ${r} in checkAttributePerms().`),Fn(new Error);if($o.isEmptyOrZeroLength(t))return Ar.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let l={};for(let d of e){let f=t.get(d);if(f){if(f[Rp]===!1){i.addInvalidItem(jr.ATTR_NOT_FOUND(s,n,d),s,n);continue}if(c)for(let m of c){if(pn.TIME_STAMP_NAMES.includes(f.attribute_name)&&m!==xs)throw Fn(new Error,jr.SYSTEM_TIMESTAMP_PERMS_ERR,Tp.FORBIDDEN);f[m]===!1&&(l[f.attribute_name]?l[f.attribute_name].push(m):l[f.attribute_name]=[m])}}else i.addInvalidItem(jr.ATTR_NOT_FOUND(s,n,d),s,n)}let u=Object.keys(l);u.length>0&&i.addUnauthorizedAttributes(u,s,n,l)}o(MC,"checkAttributePerms");function Spe(e){let t=new Set;try{if(e.action)return t;if(e.operation===pn.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let n=Object.keys(e.records[r]);for(let s=0;s<n.length;s++)t.add(n[s])}}catch(r){Ar.info(r)}return t}o(Spe,"getRecordAttributes");function vC(e,t,r){let n=new Map;if($o.isEmpty(e))return Ar.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{Ar.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return n}o(vC,"getAttributePermissions");function Tpe(e,t,r,n,s,i,a){let c=new Set(i),l=vC(e,n,s);MC(c,l,t,s,n,a,r)}o(Tpe,"verifyBulkLoadAttributePerms")});var OT=M((gxe,NY)=>{"use strict";NY.exports={evaluateSQL:Mpe,processAST:IY,convertSQLToAST:bY,checkASTPermissions:AY};var Rpe=Mn(),yY=require("util"),ype=yY.callbackify(Rpe.insert),Ape=on().search,bpe=SG().update,Ipe=yY.callbackify(bpe),Npe=RG().convertDelete,rc=require("alasql"),wpe=NT(),wT=z(),Ope=J_(),Cpe=ie(),bp=(k(),v(K)),{hdbErrors:Ppe,handleHDBError:UC}=Ee(),{HTTP_STATUS_CODES:xC}=Ppe;Ope(rc);var Lpe=403,Dpe="There was a problem performing this insert. Please check the logs and try again.",BC=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Mpe(e,t){let r=e.parsed_sql_object;if(!r){r=bY(e.sql);let n,s=r.ast.statements[0];if(s instanceof rc.yy.Insert?n=s.into.databaseid:s instanceof rc.yy.Select?n=s.from?s.from[0].databaseid:null:s instanceof rc.yy.Update||s instanceof rc.yy.Delete?n=s.table.databaseid:wT.error("AST in evaluateSQL is not a valid SQL type."),!(s instanceof rc.yy.Select)&&Cpe.isEmptyOrZeroLength(n))return t("No schema specified",null)}IY(e,r,(n,s)=>{if(n)return t(n);t(null,s)})}o(Mpe,"evaluateSQL");function AY(e,t){let r;try{r=wpe.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(n){throw n}return r||null}o(AY,"checkASTPermissions");function bY(e){let t=new BC;if(!e)throw UC(new Error,"The 'sql' parameter is missing from the request body",xC.BAD_REQUEST);try{let r=e.trim(),n=rc.parse(r),s=r.split(" ")[0].toLowerCase();t.ast=n,t.variant=s}catch(r){let n=r.message.split(`
32
+ `);throw n[1]?UC(r,`Invalid SQL at: ${n[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,xC.BAD_REQUEST):UC(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",xC.BAD_REQUEST)}return t}o(bY,"convertSQLToAST");function IY(e,t,r){try{let n=vpe;if(!e.bypass_auth&&!t.permissions_checked){let i=AY(e,t);if(i&&i.length>0)return r(Lpe,i)}let s={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case bp.VALID_SQL_OPS_ENUM.SELECT:n=Ape,s=t.ast.statements[0];break;case bp.VALID_SQL_OPS_ENUM.INSERT:n=Upe;break;case bp.VALID_SQL_OPS_ENUM.UPDATE:n=Ipe;break;case bp.VALID_SQL_OPS_ENUM.DELETE:n=Npe;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}n(s,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(n){return r(n)}}o(IY,"processAST");function vpe(e,t){wT.info(e),t("unknown sql statement")}o(vpe,"nullFunction");function Upe({statement:e,hdb_user:t},r){let n=e.into,s={schema:n.databaseid,table:n.tableid,operation:"insert",hdb_user:t},i=e.columns.map(a=>a.columnid);try{s.records=xpe(i,e.values)}catch(a){return r(a)}ype(s,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(l){wT.error(`Error delete new_attributes from insert response: ${l}`)}r(null,c)})}o(Upe,"convertInsert");function xpe(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]]=rc.compile(`SELECT ${s.toString()} AS [${bp.FUNC_VAL}] FROM ?`)}),n})}catch(r){throw wT.error(r),new Error(Dpe)}}o(xpe,"createDataObjects")});var $C=M((yxe,PY)=>{var DT=require("clone"),MT=at(),Bpe=ie(),PT=(k(),v(K)),Txe=z(),FC=require("fs"),kC=require("joi"),{string:LT}=kC.types(),{hdbErrors:Fpe,handleHDBError:CT}=Ee(),{HDB_ERROR_MSGS:Rxe,HTTP_STATUS_CODES:HC}=Fpe,{commonValidators:Xd}=Di(),wY=" is required",Hpe=["insert","update","upsert"],GC={database:{presence:!1,format:Xd.schema_format,length:Xd.schema_length},schema:{presence:!1,format:Xd.schema_format,length:Xd.schema_length},table:{presence:!0,format:Xd.schema_format,length:Xd.schema_length},action:{inclusion:{within:Hpe,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},kpe={schema:LT.required(),table:LT.required(),action:LT.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Gpe,AWS_SECRET:qpe,AWS_BUCKET:$pe,AWS_FILE_KEY:Vpe,REGION:Kpe}=PT.S3_BUCKET_AUTH_KEYS,Ype={s3:{presence:!0},[`s3.${Gpe}`]:{presence:!0,type:"String"},[`s3.${qpe}`]:{presence:!0,type:"String"},[`s3.${$pe}`]:{presence:!0,type:"String"},[`s3.${Vpe}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Kpe}`]:{presence:!0,type:"String"}},OY=DT(GC);OY.data.presence={message:wY};var CY=DT(GC);CY.file_path.presence={message:wY};var Wpe=Object.assign(DT(GC),Ype),qC=DT(kpe);qC.csv_url=LT.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();qC.passthrough_headers=kC.object();function zpe(e){let t=MT.validateObject(e,OY);return vT(e,t)}o(zpe,"dataObject");function jpe(e){let t=MT.validateBySchema(e,kC.object(qC));return vT(e,t)}o(jpe,"urlObject");function Qpe(e){let t=MT.validateObject(e,CY);return vT(e,t)}o(Qpe,"fileObject");function Jpe(e){let t=MT.validateObject(e,Wpe);return vT(e,t)}o(Jpe,"s3FileObject");function vT(e,t){if(!t){let r=Bpe.checkGlobalSchemaTable(e.schema,e.table);if(r)return CT(new Error,r,HC.BAD_REQUEST);if(e.operation===PT.OPERATIONS_ENUM.CSV_FILE_LOAD)try{FC.accessSync(e.file_path,FC.constants.R_OK|FC.constants.F_OK)}catch(n){return n.code===PT.NODE_ERROR_CODES.ENOENT?CT(n,`No such file or directory ${n.path}`,HC.BAD_REQUEST):n.code===PT.NODE_ERROR_CODES.EACCES?CT(n,`Permission denied ${n.path}`,HC.BAD_REQUEST):CT(n)}}return t}o(vT,"postValidateChecks");PY.exports={dataObject:zpe,urlObject:jpe,fileObject:Qpe,s3FileObject:Jpe}});var VC=M((bxe,LY)=>{"use strict";var Ip=z(),UT=(k(),v(K));async function Xpe(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===UT.OPERATIONS_ENUM.INSERT||t.operation===UT.OPERATIONS_ENUM.UPDATE||t.operation===UT.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===UT.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Ip.info(i.message),i):i.http_resp_msg?(Ip.error(`Error calling operation: ${e.name}`),Ip.error(i.http_resp_msg),i):(Ip.error(`Error calling operation: ${e.name}`),Ip.error(i),i)}}o(Xpe,"callOperationFunctionAsAwait");LY.exports={callOperationFunctionAsAwait:Xpe}});var KC=M((Nxe,MY)=>{"use strict";var{S3:Zpe,GetObjectCommand:eEe}=require("@aws-sdk/client-s3");MY.exports={getFileStreamFromS3:tEe,getS3AuthObj:DY};async function tEe(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await DY(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new eEe(r))).Body}o(tEe,"getFileStreamFromS3");function DY(e,t,r){return new Zpe({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(DY,"getS3AuthObj")});var UY=M((Oxe,vY)=>{"use strict";var YC=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,a,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=a,this.role_perms=c}},WC=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};vY.exports={BulkLoadFileObject:YC,BulkLoadDataObject:WC}});var jC=M((Pxe,xY)=>{"use strict";var zC=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};xY.exports=zC});var tP=M((xxe,ZY)=>{"use strict";var xT=Mn(),FT=$C(),rEe=require("needle"),Ei=(k(),v(K)),Dxe=It(),Zd=ie(),{handleHDBError:zt,hdbErrors:KY}=Ee(),{HTTP_STATUS_CODES:Qr,HDB_ERROR_MSGS:br,CHECK_LOGS_WRAPPER:Vl}=KY,ef=z(),QC=require("papaparse");Zd.promisifyPapaParse();var _i=require("fs-extra"),nEe=require("path"),{chain:BY}=require("stream-chain"),FY=require("stream-json/streamers/StreamArray"),HY=require("stream-json/utils/Batch"),kY=require("stream-chain/utils/comp"),{finished:GY}=require("stream"),sEe=ce(),YY=VC(),iEe=KC(),{BulkLoadFileObject:XC,BulkLoadDataObject:oEe}=UY(),ZC=NC(),{verifyBulkLoadAttributePerms:WY}=NT(),Mxe=jC(),vxe=lr(),Uxe=xi(),{databases:aEe}=(Le(),v(ft)),{coerceType:cEe}=(Sm(),v(jH)),qY="No records parsed from csv file.",$l=`${sEe.get("HDB_ROOT")}/tmp`,{schemaRegex:lEe}=Di(),$Y=1024*1024*2,VY=5e3,uEe={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};ZY.exports={csvDataLoad:dEe,csvURLLoad:fEe,csvFileLoad:mEe,importFromS3:hEe};async function dEe(e,t){let r=FT.dataObject(e);if(r)throw zt(r,r.message,Qr.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=QY(e.schema,e.table),i=QC.parse(e.data,{header:!0,skipEmptyLines:!0,transform:JC.bind(null,s),dynamicTyping:!1}),a=new ZC;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&WY(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw zt(new Error,c,Qr.BAD_REQUEST,void 0,void 0,!0);let l=new oEe(e.action,e.schema,e.table,i.data);return n=await YY.callOperationFunctionAsAwait(JY,l,null),n.message===qY?qY:XY(n.records,n.number_written)}catch(s){throw Kl(s)}}o(dEe,"csvDataLoad");async function fEe(e){let t=FT.urlObject(e);if(t)throw zt(t,t.message,Qr.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${$l}/${r}`;try{await pEe(e,r)}catch(s){throw ef.error(br.DOWNLOAD_FILE_ERR(r)+" - "+s),zt(s,Vl(br.DOWNLOAD_FILE_ERR(r)))}try{let s=new XC(this.job_operation_function.name,e.action,e.schema,e.table,n,Ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await eP(s);return await BT(n),i}catch(s){throw await BT(n),Kl(s)}}o(fEe,"csvURLLoad");async function mEe(e){let t=FT.fileObject(e);if(t)throw zt(t,t.message,Qr.BAD_REQUEST,void 0,void 0,!0);let r=new XC(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ei.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await eP(r)}catch(n){throw Kl(n)}}o(mEe,"csvFileLoad");async function hEe(e){let t=FT.s3FileObject(e);if(t)throw zt(t,t.message,Qr.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=nEe.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${$l}/${s}`;let i=new XC(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await EEe(s,e);let a=await eP(i);return await BT(r),a}catch(n){throw await BT(r),Kl(n)}}o(hEe,"importFromS3");async function pEe(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await rEe("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 zt(n,s,n.statusCode,Ei.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}gEe(r,e.csv_url),await _Ee(t,r.raw)}o(pEe,"downloadCSVFile");async function EEe(e,t){try{let r=`${$l}/${e}`;await _i.mkdirp($l),await _i.writeFile(`${$l}/${e}`,"",{flag:"a+"});let n=await _i.createWriteStream(r),s=await iEe.getFileStreamFromS3(t);await new Promise((i,a)=>{s.on("error",function(c){a(c)}),s.pipe(n).on("error",function(c){a(c)}).on("close",function(){ef.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ef.error(br.S3_DOWNLOAD_ERR+" - "+r),zt(r,Vl(br.S3_DOWNLOAD_ERR))}}o(EEe,"downloadFileFromS3");async function _Ee(e,t){try{await _i.mkdirp($l),await _i.writeFile(`${$l}/${e}`,t)}catch(r){throw ef.error(br.WRITE_TEMP_FILE_ERR),zt(r,Vl(br.DEFAULT_BULK_LOAD_ERR))}}o(_Ee,"writeFileToTempFolder");async function BT(e){if(e)try{await _i.access(e),await _i.unlink(e)}catch{ef.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(BT,"deleteTempFile");function gEe(e,t){if(e.statusCode!==KY.HTTP_STATUS_CODES.OK)throw zt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Qr.BAD_REQUEST);if(!uEe[e.headers["content-type"]])throw zt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Qr.BAD_REQUEST);if(!e.raw)throw zt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Qr.BAD_REQUEST)}o(gEe,"validateURLResponse");async function eP(e){try{let t;switch(e.file_type){case Ei.VALID_S3_FILE_TYPES.CSV:t=await SEe(e);break;case Ei.VALID_S3_FILE_TYPES.JSON:t=await TEe(e);break;default:throw zt(new Error,br.DEFAULT_BULK_LOAD_ERR,Qr.BAD_REQUEST,Ei.LOG_LEVELS.ERROR,br.INVALID_FILE_EXT_ERR(e))}return XY(t.records,t.number_written)}catch(t){throw Kl(t)}}o(eP,"fileLoad");async function zY(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await xT.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&WY(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let l=zt(c);r(l)}}o(zY,"validateChunk");async function jY(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Zd.autoCastJSONDeep(i),s&&s.pause();let a=n.meta?n.meta.fields:null;if(a)i.forEach(c=>{!Zd.isEmpty(c)&&!Zd.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(l=>{Object.keys(l).forEach(u=>c.add(u))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},l=await YY.callOperationFunctionAsAwait(JY,c,null);t.records+=l.records,t.number_written+=l.number_written,s&&s.resume()}catch(c){let l=zt(c,Vl(br.INSERT_CSV_ERR),Qr.INTERNAL_SERVER_ERROR,Ei.LOG_LEVELS.ERROR,br.INSERT_CSV_ERR+" - "+c);r(l)}}o(jY,"insertChunk");async function SEe(e){let t={records:0,number_written:0},r=QY(e.schema,e.table);try{let n=new ZC,s=_i.createReadStream(e.file_path,{highWaterMark:$Y});s.setEncoding("utf8"),await QC.parsePromise(s,zY.bind(null,e,n),JC.bind(null,r));let i=n.getPermsResponse();if(i)throw zt(new Error,i,Qr.BAD_REQUEST);return s=_i.createReadStream(e.file_path,{highWaterMark:$Y}),s.setEncoding("utf8"),await QC.parsePromise(s,jY.bind(null,e,t),JC.bind(null,r)),s.destroy(),t}catch(n){throw zt(n,Vl(br.PAPA_PARSE_ERR),Qr.INTERNAL_SERVER_ERROR,Ei.LOG_LEVELS.ERROR,br.PAPA_PARSE_ERR+n)}}o(SEe,"callPapaParse");function QY(e,t){let r=aEe[e][t].attributes,n=new Map;for(let s of r)s.type&&!s.computed&&!s.relationship&&n.set(s.name,i=>cEe(i,s));return n}o(QY,"createTransformMap");function JC(e,t,r){let n=e.get(r);return n?n(t):Zd.autoCast(t)}o(JC,"typeFunction");async function TEe(e){let t={records:0,number_written:0},r=o(n=>{throw n},"throwErr");try{let n=new ZC,s=BY([_i.createReadStream(e.file_path,{encoding:"utf-8"}),FY.withParser(),c=>c.value,new HY({batchSize:VY}),kY(async c=>{await zY(e,n,r,c)})]);await new Promise((c,l)=>{GY(s,u=>{u?l(u):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw zt(new Error,i,Qr.BAD_REQUEST);let a=BY([_i.createReadStream(e.file_path,{encoding:"utf-8"}),FY.withParser(),c=>c.value,new HY({batchSize:VY}),kY(async c=>{await jY(e,t,r,c)})]);return await new Promise((c,l)=>{GY(a,u=>{u?l(u):c()}),a.resume()}),t}catch(n){throw zt(n,Vl(br.INSERT_JSON_ERR),Qr.INTERNAL_SERVER_ERROR,Ei.LOG_LEVELS.ERROR,br.INSERT_JSON_ERR+n)}}o(TEe,"insertJson");async function JY(e){let t={};try{e.data&&e.data.length>0&&REe(e.data[0])?t=await yEe(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ef.info(t.message))}catch(r){throw Kl(r)}return t}o(JY,"callBulkFileLoad");function REe(e){let t=Object.keys(e);for(let r of t)if(!lEe.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(REe,"validateColumnNames");async function yEe(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=xT.insert;break;case"update":i=xT.update;break;case"upsert":i=xT.upsert;break;default:throw zt(new Error,br.INVALID_ACTION_PARAM_ERR(n),Qr.BAD_REQUEST,Ei.LOG_LEVELS.ERROR,br.INVALID_ACTION_PARAM_ERR(n))}try{let a=await i(s),c;switch(n){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let d=global.hdb_schema[t][r].hash_attribute,f=e.length;for(;f--;)a.skipped_hashes.indexOf(e[f][d])>=0&&e.splice(f,1)}let l=Zd.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:l,new_attributes:a.new_attributes}}catch(a){throw Kl(a)}}o(yEe,"bulkFileLoad");function XY(e,t){return`successfully loaded ${t} of ${e} records`}o(XY,"buildResponseMsg");function Kl(e){return zt(e,Vl(br.DEFAULT_BULK_LOAD_ERR),Qr.INTERNAL_SERVER_ERROR,Ei.LOG_LEVELS.ERROR,br.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(Kl,"buildTopLevelErrMsg")});var sP=M((Fxe,aW)=>{"use strict";var nP=on(),AEe=KC(),{AsyncParser:bEe}=require("json2csv"),HT=require("stream"),os=ie(),rP=require("fs-extra"),IEe=require("path"),Bs=z(),{promisify:rW}=require("util"),Np=ie(),{handleHDBError:mr,hdbErrors:NEe}=Ee(),{HDB_ERROR_MSGS:Hn,HTTP_STATUS_CODES:hr}=NEe,{streamAsJSON:wEe}=(aA(),v(_v)),{Upload:OEe}=require("@aws-sdk/lib-storage"),{toCsvStream:CEe}=(po(),v(wv)),eW=["search_by_value","search_by_hash","sql","search_by_conditions"],tW=["json","csv"],nW="json",sW="csv",PEe="Successfully exported JSON locally.",LEe="Successfully exported CSV locally.",DEe=1e3,MEe=nP.searchByHash,vEe=nP.searchByValue,UEe=rW(HT.finished);aW.exports={export_to_s3:HEe,export_local:xEe};async function xEe(e){Bs.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=iW(e);if(!os.isEmpty(t))throw Bs.error(t),mr(new Error,t,hr.BAD_REQUEST,void 0,void 0,!0);if(os.isEmpty(e.path))throw Bs.error(Hn.MISSING_VALUE("path")),mr(new Error,Hn.MISSING_VALUE("path"),hr.BAD_REQUEST,void 0,void 0,!0);let r=(os.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(IEe.sep)&&(e.path=e.path.substring(0,e.path.length-1));let n=os.buildFolderPath(e.path,r);await BEe(e.path);let s=await oW(e);return await FEe(n,e.format,s)}o(xEe,"export_local");async function BEe(e){if(Bs.trace("in confirmPath"),os.isEmptyOrZeroLength(e))throw mr(new Error,`Invalid path: ${e}`,hr.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await rP.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,Bs.error(n),mr(new Error,n,hr.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 Bs.error(r),mr(new Error,r,hr.BAD_REQUEST,void 0,void 0,!0)}return!0}o(BEe,"confirmPath");async function FEe(e,t,r){if(Bs.trace("in saveToLocal"),Np.isEmptyOrZeroLength(e))throw mr(new Error,Hn.INVALID_VALUE("file_path"),hr.BAD_REQUEST,void 0,void 0,!0);if(Np.isEmptyOrZeroLength(t))throw mr(new Error,Hn.INVALID_VALUE("Source format"),hr.BAD_REQUEST,void 0,void 0,!0);if(Np.isEmpty(r))throw mr(new Error,Hn.NOT_FOUND("Data"),hr.BAD_REQUEST,void 0,void 0,!0);if(t===nW){let n=rP.createWriteStream(e);return wEe(r).pipe(n),await UEe(n),{message:PEe,path:e}}else if(t===sW){let n=rP.createWriteStream(e),s=HT.Readable.from(r),i={},a=r.getColumns?.();a&&(i.fields=a.map(d=>({label:d,value:d})));let c={objectMode:!0};return await new bEe(i,c).fromInput(s).toOutput(n).promise(!1),{message:LEe,path:e}}throw mr(new Error,Hn.INVALID_VALUE("format"),hr.BAD_REQUEST)}o(FEe,"saveToLocal");async function HEe(e){if(!e.s3||Object.keys(e.s3).length===0)throw mr(new Error,Hn.MISSING_VALUE("S3 object"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw mr(new Error,Hn.MISSING_VALUE("aws_access_key_id"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw mr(new Error,Hn.MISSING_VALUE("aws_secret_access_key"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.bucket))throw mr(new Error,Hn.MISSING_VALUE("bucket"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.key))throw mr(new Error,Hn.MISSING_VALUE("key"),hr.BAD_REQUEST);if(os.isEmptyOrZeroLength(e.s3.region))throw mr(new Error,Hn.MISSING_VALUE("region"),hr.BAD_REQUEST);let t=iW(e);if(!os.isEmpty(t))throw mr(new Error,t,hr.BAD_REQUEST);Bs.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await oW(e)}catch(l){throw Bs.error(l),l}let n,s=await AEe.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new HT.PassThrough;if(e.format===sW){i=e.s3.key+".csv";let l=CEe(r,r.getColumns?.());l.on("error",u=>{throw u}),l.pipe(a)}else if(e.format===nW){i=e.s3.key+".json";let l=new HT.Readable;l.pipe(a),l.on("error",f=>{throw f}),l.push("[");let u=r.length,d="";for(let[f,m]of r.entries()){let h=f===u-1?JSON.stringify(m):JSON.stringify(m)+",";d+=h,f!==0&&f%DEe===0&&(l.push(d),d="")}d.length!==0&&l.push(d),l.push("]"),l.push(null)}else throw mr(new Error,Hn.INVALID_VALUE("format"),hr.BAD_REQUEST);return new OEe({client:s,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(HEe,"export_to_s3");function iW(e){if(Bs.trace("in exportCoreValidation"),os.isEmpty(e.format))return"format missing";if(tW.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${tW.join(", ")}`;let t=e.search_operation.operation;if(os.isEmpty(t))return"search_operation.operation missing";if(eW.indexOf(t)<0)return`searchOperation.operation must be one of the following values: ${eW.join(", ")}`}o(iW,"exportCoreValidation");async function oW(e){Bs.trace("in getRecords");let t,r;if(Np.isEmpty(e.search_operation)||Np.isEmptyOrZeroLength(e.search_operation.operation))throw mr(new Error,Hn.INVALID_VALUE("Search operation"),hr.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=vEe;break;case"search_by_hash":t=MEe;break;case"search_by_conditions":t=nP.searchByConditions;break;case"sql":{let n=OT();t=rW(n.evaluateSQL);break}default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Bs.error(r),mr(new Error,r,hr.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(oW,"getRecords")});var lW=M((kxe,cW)=>{"use strict";var iP=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};cW.exports=iP});var fW=M((qxe,dW)=>{"use strict";var kEe=(k(),v(K)),uW=require("moment"),GEe=require("uuid").v4,oP=class{static{o(this,"JobObject")}constructor(){this.id=GEe(),this.type=void 0,this.start_datetime=uW().valueOf(),this.created_datetime=uW().valueOf(),this.end_datetime=void 0,this.status=kEe.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};dW.exports=oP});var aP=M((Vxe,TW)=>{"use strict";var qEe=require("uuid").v4,_W=Mn(),gW=on(),$Ee=ri(),VEe=Bu(),KEe=lW(),Ot=(k(),v(K)),YEe=fW(),WEe=Gg(),gi=z(),zEe=Wf(),tf=ie(),{promisify:jEe}=require("util"),Yl=require("moment"),QEe=OT(),kT=$C(),mW=TI(),{deleteTransactionLogsBeforeValidator:JEe}=dC(),{handleHDBError:hW,hdbErrors:XEe,ClientError:ZEe}=Ee(),{HTTP_STATUS_CODES:pW}=XEe,EW=gW.searchByValue,e_e=gW.searchByHash,t_e=_W.insert,r_e=jEe(QEe.evaluateSQL),n_e=_W.update;TW.exports={addJob:o_e,updateJob:c_e,handleGetJob:s_e,handleGetJobsByStartDate:i_e,getJobById:SW};async function s_e(e){if(e.id===void 0)throw new ZEe("'id' is required");let t=await SW(e.id);return tf.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}o(s_e,"handleGetJob");async function i_e(e){try{let t=await a_e(e);if(gi.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=Yl(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Yl(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 gi.error(r),new Error(r)}}o(i_e,"handleGetJobsByStartDate");async function o_e(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||tf.isEmptyOrZeroLength(e.operation)){let d="job parameter is invalid";return gi.info(d),t.error=d,t}if(!Ot.JOB_TYPE_ENUM[e.operation])return gi.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ot.OPERATIONS_ENUM.CSV_FILE_LOAD:n=kT.fileObject(e);break;case Ot.OPERATIONS_ENUM.CSV_URL_LOAD:n=kT.urlObject(e);break;case Ot.OPERATIONS_ENUM.CSV_DATA_LOAD:n=kT.dataObject(e);break;case Ot.OPERATIONS_ENUM.IMPORT_FROM_S3:n=kT.s3FileObject(e);break;case Ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=mW(e,"date");break;case Ot.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=mW(e,"timestamp");break;case Ot.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=JEe(e);break;case Ot.OPERATIONS_ENUM.RESTART_SERVICE:if(Ot.HDB_PROCESS_SERVICES[e.service]===void 0)throw hW(new Error,"Invalid service",pW.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw hW(n,n.message,pW.BAD_REQUEST,void 0,void 0,!0);let s=new YEe;s.type=e.operation===Ot.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ot.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new $Ee(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),a;try{a=Array.from(await EW(i))}catch(d){let f=`There was an error inserting a new job: ${d}`;return gi.error(f),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){s.id=qEe();try{a=await EW(i)}catch(d){let f=`There was an error inserting a new job: ${d}`;return gi.error(f),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return gi.error("Error creating a job, could not find a unique job id."),t}s.request=e;let l=new zEe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),u;try{u=await t_e(l)}catch(d){return gi.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,gi.trace(d)}return t}o(o_e,"addJob");async function a_e(e){let t=Yl(e.from_date,Yl.ISO_8601),r=Yl(e.to_date,Yl.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 KEe(n,e.hdb_user);try{return await r_e(s)}catch(i){throw gi.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(a_e,"getJobsInDateRange");async function SW(e){if(tf.isEmptyOrZeroLength(e))return tf.errorizeMessage("Invalid job ID specified.");let t=new VEe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await e_e(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return gi.error(n),tf.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(SW,"getJobById");async function c_e(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(tf.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ot.JOB_STATUS_ENUM.COMPLETE||e.status===Ot.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Yl().valueOf());let t=new WEe(Ot.SYSTEM_SCHEMA_NAME,Ot.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await n_e(t),r}o(c_e,"updateJob")});var OW=M((Yxe,wW)=>{"use strict";var RW=ie(),Ir=(k(),v(K)),l_e=require("moment"),GT=tP(),wp=z(),yW=aP(),AW=sP(),bW=dl(),IW=st(),u_e=gT(),d_e=Kd(),{parentPort:f_e,isMainThread:NW}=require("worker_threads"),{onMessageByType:m_e}=st(),cP=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function h_e(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(RW.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(RW.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ir.JOB_TYPE_ENUM.csv_file_load:await Wi(e,GT.csvFileLoad);break;case Ir.JOB_TYPE_ENUM.csv_url_load:await Wi(e,GT.csvURLLoad);break;case Ir.JOB_TYPE_ENUM.csv_data_load:await Wi(e,GT.csvDataLoad);break;case Ir.JOB_TYPE_ENUM.import_from_s3:await Wi(e,GT.importFromS3);break;case Ir.JOB_TYPE_ENUM.empty_trash:break;case Ir.JOB_TYPE_ENUM.export_local:await Wi(e,AW.export_local);break;case Ir.JOB_TYPE_ENUM.export_to_s3:await Wi(e,AW.export_to_s3);break;case Ir.JOB_TYPE_ENUM.delete_files_before:case Ir.JOB_TYPE_ENUM.delete_records_before:await Wi(e,bW.deleteFilesBefore);break;case Ir.JOB_TYPE_ENUM.delete_audit_logs_before:await Wi(e,bW.deleteAuditLogsBefore);break;case Ir.JOB_TYPE_ENUM.delete_transaction_logs_before:await Wi(e,u_e.deleteTransactionLogsBefore);break;case Ir.JOB_TYPE_ENUM.restart_service:return await Wi(e,d_e.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}o(h_e,"parseMessage");async function Wi(e,t){try{e.job.status=Ir.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=l_e().valueOf(),await yW.updateJob(e.job),await p_e(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):wp.error(`There was an error running ${t.name} job with id ${e.job.id}`),wp.error(n),e.job.message=n,e.job.status=Ir.JOB_STATUS_ENUM.ERROR;try{await yW.updateJob(e.job)}catch(s){throw wp.error(`Unable to update job with id ${e.job.id}`),s}throw r}}o(Wi,"runJob");async function p_e(e){wp.trace("launching job thread:",e),NW?IW.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e}`}}):f_e.postMessage({type:Ir.ITC_EVENT_TYPES.START_JOB,jobId:e})}o(p_e,"launchJobThread");NW&&m_e(Ir.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{IW.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:{...process.env,[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`}})}catch(r){wp.error(r)}});wW.exports={parseMessage:h_e,RunnerMessage:cP}});var PW=M((zxe,CW)=>{"use strict";var E_e=ie(),lP=ce(),nc=(k(),v(K)),__e=It(),g_e=lr(),zi=z(),S_e=jC(),T_e=xi();lP.initSync();CW.exports={postOperationHandler:y_e,sendOperationTransaction:Op};async function Op(e,t,r,n){if(e.schema===nc.SYSTEM_SCHEMA_NAME)return;let s=R_e(e,t,r);s&&(zi.trace(`sendOperationTransaction publishing to schema ${e.schema} following transaction:`,s),await g_e.publishToStream(`${__e.SUBJECT_PREFIXES.TXN}.${e.schema}`,T_e.createNatsTableStreamName(e.schema,e.table),n,s))}o(Op,"sendOperationTransaction");function R_e(e,t,r){if(E_e.isEmptyOrZeroLength(t))return null;let n={operation:e.operation,schema:e.schema,table:e.table,__origin:r};return e.operation===nc.OPERATIONS_ENUM.DELETE?n.hash_values=t:n.records=e.records,n}o(R_e,"convertCRUDOperationToTransaction");async function y_e(e,t,r){if(!lP.get(nc.CONFIG_PARAMS.CLUSTERING_ENABLED))return;zi.trace(`postOperationHandler called for operation ${e.operation} on schema.table: ${e.schema}.${e.table}`);let n=e.hdb_user?.username,s=lP.get(nc.CONFIG_PARAMS.CLUSTERING_NODENAME),i=new S_e(t.txn_time,n,s);switch(e.operation){case nc.OPERATIONS_ENUM.INSERT:try{await Op(e,t.inserted_hashes,i,r)}catch(a){zi.error("There was an error calling clustering postOperationHandler for insert."),zi.error(a)}break;case nc.OPERATIONS_ENUM.DELETE:try{await Op(e,t.deleted_hashes,i,r)}catch(a){zi.error("There was an error calling clustering postOperationHandler for delete."),zi.error(a)}break;case nc.OPERATIONS_ENUM.UPDATE:try{await Op(e,t.update_hashes,i,r)}catch(a){zi.error("There was an error calling clustering postOperationHandler for update."),zi.error(a)}break;case nc.OPERATIONS_ENUM.UPSERT:try{await Op(e,t.upserted_hashes,i,r)}catch(a){zi.error("There was an error calling clustering postOperationHandler for upsert."),zi.error(a)}break;default:break}return t}o(y_e,"postOperationHandler")});var Q,LW=fe(()=>{Q=class{static{o(this,"OperationFunctionObject")}operation_function;job_operation_function;constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}}});var lC={};Ce(lC,{chooseOperation:()=>QW,executeJob:()=>Fs,getOperationFunction:()=>JW,operation:()=>gP,processLocalTransaction:()=>jW});async function jW(e,t){try{if(e.body.operation!=="read_log"&&(Dp.default.log_level===Mf.INFO||Dp.default.log_level===Mf.DEBUG||Dp.default.log_level===Mf.TRACE)){let{hdb_user:n,hdbAuthHeader:s,password:i,payload:a,...c}=e.body;En.info(c)}}catch(n){En.error(n)}let r=await WW.default.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return I_e[e.body.operation]&&$W.default.setSchemaDataToGlobal(n=>{n&&En.error(n)}),r}function QW(e){let t;try{t=JW(e)}catch(s){throw En.error(`Error when selecting operation function - ${s}`),s}let{operation_function:r,job_operation_function:n}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let s=e.operation==="sql"?e.sql:e.search_operation.sql,i=VT.default.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let a=VT.default.checkASTPermissions(e,i);if(a)throw En.error(`${DW.FORBIDDEN} from operation ${e.operation}`),En.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),(0,Hs.handleHDBError)(new Error,a,Hs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==G.CREATE_AUTHENTICATION_TOKENS&&e.operation!==G.LOGIN&&e.operation!==G.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let a=qW.default.verifyPerms(i,s);if(a)throw En.error(`${DW.FORBIDDEN} from operation ${e.operation}`),En.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),(0,Hs.handleHDBError)(new Error,a,Hs.hdbErrors.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw(0,Hs.handleHDBError)(s,"There was an error when trying to choose an operation path")}return r}function JW(e){if(En.trace(`getOperationFunction with operation: ${e.operation}`),MW.has(e.operation))return MW.get(e.operation);throw(0,Hs.handleHDBError)(new Error,Hs.hdbErrors.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Hs.hdbErrors.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}function gP(e,t,r){e.hdb_user=t?.user,e.bypass_auth=!r;let n=QW(e);return jW({body:e},n)}async function N_e(e){En.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[vy]=!0;let a;switch(i.operation){case G.INSERT:a=await zl.default.insert(i);break;case G.UPDATE:a=await zl.default.update(i);break;case G.UPSERT:a=await zl.default.upsert(i);break;case G.DELETE:a=await sf.default.deleteRecord(i);break;default:En.warn("invalid operation in catchup");break}await zW.transactToClusteringUtils.postOperationHandler(i,a,e)}catch(a){En.info("Invalid operation in transaction"),En.error(a)}}async function Fs(e){(0,YW.transformReq)(e);let t,r;try{if(r=await KT.default.addJob(e),r){t=r.createdJob,En.info("addJob result",r);let n=new mP.default.RunnerMessage(t,e);return{message:await mP.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 En.error(i),(0,Hs.handleHDBError)(n,i)}}function w_e(){let e=new Map;return e.set(G.INSERT,new Q(zl.default.insert)),e.set(G.UPDATE,new Q(zl.default.update)),e.set(G.UPSERT,new Q(zl.default.upsert)),e.set(G.SEARCH_BY_CONDITIONS,new Q(nf.default.searchByConditions)),e.set(G.SEARCH_BY_HASH,new Q(nf.default.searchByHash)),e.set(G.SEARCH_BY_ID,new Q(nf.default.searchByHash)),e.set(G.SEARCH_BY_VALUE,new Q(nf.default.searchByValue)),e.set(G.SEARCH,new Q(A_e)),e.set(G.SQL,new Q(b_e)),e.set(G.CSV_DATA_LOAD,new Q(Fs,Cp.default.csvDataLoad)),e.set(G.CSV_FILE_LOAD,new Q(Fs,Cp.default.csvFileLoad)),e.set(G.CSV_URL_LOAD,new Q(Fs,Cp.default.csvURLLoad)),e.set(G.IMPORT_FROM_S3,new Q(Fs,Cp.default.importFromS3)),e.set(G.CREATE_SCHEMA,new Q(ji.default.createSchema)),e.set(G.CREATE_DATABASE,new Q(ji.default.createSchema)),e.set(G.CREATE_TABLE,new Q(ji.default.createTable)),e.set(G.CREATE_ATTRIBUTE,new Q(ji.default.createAttribute)),e.set(G.DROP_SCHEMA,new Q(ji.default.dropSchema)),e.set(G.DROP_DATABASE,new Q(ji.default.dropSchema)),e.set(G.DROP_TABLE,new Q(ji.default.dropTable)),e.set(G.DROP_ATTRIBUTE,new Q(ji.default.dropAttribute)),e.set(G.DESCRIBE_SCHEMA,new Q(Pp.default.describeSchema)),e.set(G.DESCRIBE_DATABASE,new Q(Pp.default.describeSchema)),e.set(G.DESCRIBE_TABLE,new Q(Pp.default.describeTable)),e.set(G.DESCRIBE_ALL,new Q(Pp.default.describeAll)),e.set(G.DELETE,new Q(sf.default.deleteRecord)),e.set(G.ADD_USER,new Q(rf.default.addUser)),e.set(G.ALTER_USER,new Q(rf.default.alterUser)),e.set(G.DROP_USER,new Q(rf.default.dropUser)),e.set(G.LIST_USERS,new Q(rf.default.listUsersExternal)),e.set(G.LIST_ROLES,new Q(Lp.default.listRoles)),e.set(G.ADD_ROLE,new Q(Lp.default.addRole)),e.set(G.ALTER_ROLE,new Q(Lp.default.alterRole)),e.set(G.DROP_ROLE,new Q(Lp.default.dropRole)),e.set(G.USER_INFO,new Q(rf.default.userInfo)),e.set(G.READ_LOG,new Q(UW.default)),e.set(G.ADD_NODE,new Q(xW.default)),e.set(G.UPDATE_NODE,new Q(uP.default)),e.set(G.SET_NODE_REPLICATION,new Q(uP.default)),e.set(G.REMOVE_NODE,new Q(BW.default)),e.set(G.CONFIGURE_CLUSTER,new Q(FW.default)),e.set(G.PURGE_STREAM,new Q(HW.default)),e.set(G.SET_CONFIGURATION,new Q(hP.default.setConfiguration)),e.set(G.CLUSTER_STATUS,new Q(kW.default.clusterStatus)),e.set(G.CLUSTER_NETWORK,new Q(GW.default)),e.set(G.CLUSTER_SET_ROUTES,new Q(qT.default.setRoutes)),e.set(G.CLUSTER_GET_ROUTES,new Q(qT.default.getRoutes)),e.set(G.CLUSTER_DELETE_ROUTES,new Q(qT.default.deleteRoutes)),e.set(G.EXPORT_TO_S3,new Q(Fs,dP.default.export_to_s3)),e.set(G.CREATE_CSR,new Q(Wl.default.createCsr)),e.set(G.SIGN_CERTIFICATE,new Q(Wl.default.signCertificate)),e.set(G.LIST_CERTIFICATES,new Q(Wl.default.listCertificates)),e.set(G.ADD_CERTIFICATES,new Q(Wl.default.addCertificate)),e.set(G.REMOVE_CERTIFICATE,new Q(Wl.default.removeCertificate)),e.set(G.GET_KEY,new Q(Wl.default.getKey)),e.set(G.ADD_NODE_BACK,new Q(oO)),e.set(G.REMOVE_NODE_BACK,new Q(aO)),e.set(G.DELETE_FILES_BEFORE,new Q(Fs,sf.default.deleteFilesBefore)),e.set(G.DELETE_RECORDS_BEFORE,new Q(Fs,sf.default.deleteFilesBefore)),e.set(G.EXPORT_LOCAL,new Q(Fs,dP.default.export_local)),e.set(G.SEARCH_JOBS_BY_START_DATE,new Q(KT.default.handleGetJobsByStartDate)),e.set(G.GET_JOB,new Q(KT.default.handleGetJob)),e.set(G.GET_FINGERPRINT,new Q($T.default.getFingerprint)),e.set(G.SET_LICENSE,new Q($T.default.setLicense)),e.set(G.GET_REGISTRATION_INFO,new Q($T.default.getRegistrationInfo)),e.set(G.RESTART,new Q(fP.default.restart)),e.set(G.RESTART_SERVICE,new Q(Fs,fP.default.restartService)),e.set(G.CATCHUP,new Q(N_e)),e.set(G.SYSTEM_INFORMATION,new Q(VW.default.systemInformation)),e.set(G.DELETE_AUDIT_LOGS_BEFORE,new Q(Fs,sf.default.deleteAuditLogsBefore)),e.set(G.READ_AUDIT_LOG,new Q(vW.default)),e.set(G.CREATE_AUTHENTICATION_TOKENS,new Q(xN)),e.set(G.REFRESH_OPERATION_TOKEN,new Q(BN)),e.set(G.LOGIN,new Q(tC)),e.set(G.LOGOUT,new Q(rC)),e.set(G.GET_CONFIGURATION,new Q(hP.default.getConfiguration)),e.set(G.CUSTOM_FUNCTIONS_STATUS,new Q(Ct.default.customFunctionsStatus)),e.set(G.GET_CUSTOM_FUNCTIONS,new Q(Ct.default.getCustomFunctions)),e.set(G.GET_COMPONENT_FILE,new Q(Ct.default.getComponentFile)),e.set(G.GET_COMPONENTS,new Q(Ct.default.getComponents)),e.set(G.SET_COMPONENT_FILE,new Q(Ct.default.setComponentFile)),e.set(G.DROP_COMPONENT,new Q(Ct.default.dropComponent)),e.set(G.GET_CUSTOM_FUNCTION,new Q(Ct.default.getCustomFunction)),e.set(G.SET_CUSTOM_FUNCTION,new Q(Ct.default.setCustomFunction)),e.set(G.DROP_CUSTOM_FUNCTION,new Q(Ct.default.dropCustomFunction)),e.set(G.ADD_CUSTOM_FUNCTION_PROJECT,new Q(Ct.default.addComponent)),e.set(G.ADD_COMPONENT,new Q(Ct.default.addComponent)),e.set(G.DROP_CUSTOM_FUNCTION_PROJECT,new Q(Ct.default.dropCustomFunctionProject)),e.set(G.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Q(Ct.default.packageComponent)),e.set(G.PACKAGE_COMPONENT,new Q(Ct.default.packageComponent)),e.set(G.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Q(Ct.default.deployComponent)),e.set(G.DEPLOY_COMPONENT,new Q(Ct.default.deployComponent)),e.set(G.READ_TRANSACTION_LOG,new Q(pP.default.readTransactionLog)),e.set(G.DELETE_TRANSACTION_LOGS_BEFORE,new Q(Fs,pP.default.deleteTransactionLogsBefore)),e.set(G.INSTALL_NODE_MODULES,new Q(EP.default.installModules)),e.set(G.AUDIT_NODE_MODULES,new Q(EP.default.auditModules)),e.set(G.GET_BACKUP,new Q(ji.default.getBackup)),e.set(G.ADD_SSH_KEY,new Q(Ct.default.addSSHKey)),e.set(G.UPDATE_SSH_KEY,new Q(Ct.default.updateSSHKey)),e.set(G.DELETE_SSH_KEY,new Q(Ct.default.deleteSSHKey)),e.set(G.LIST_SSH_KEYS,new Q(Ct.default.listSSHKeys)),e.set(G.SET_SSH_KNOWN_HOSTS,new Q(Ct.default.setSSHKnownHosts)),e.set(G.GET_SSH_KNOWN_HOSTS,new Q(Ct.default.getSSHKnownHosts)),e.set(G.GET_ANALYTICS,new Q(mC)),e.set(G.LIST_METRICS,new Q(hC)),e.set(G.DESCRIBE_METRIC,new Q(pC)),e.set(G.GET_STATUS,new Q(TC)),e.set(G.SET_STATUS,new Q(RC)),e.set(G.CLEAR_STATUS,new Q(SC)),e}var nf,VT,Cp,ji,Pp,sf,vW,rf,Lp,Ct,Dp,UW,xW,uP,BW,FW,HW,kW,GW,qT,dP,qW,KT,Hs,$T,fP,_P,zl,$W,VW,mP,hP,pP,EP,KW,YW,Wl,WW,zW,DW,En,A_e,b_e,I_e,MW,uC=fe(()=>{nf=w(on()),VT=w(OT()),Cp=w(tP()),ji=w(CS()),Pp=w(Pa()),sf=w(dl()),vW=w(vw()),rf=w(Jn()),Lp=w(hh()),Ct=w(cC()),Dp=w(z()),UW=w(Hw()),xW=w(GS()),uP=w(fO()),BW=w($S()),FW=w(pO()),HW=w(EO()),kW=w(SO()),GW=w(RO()),qT=w(zS()),dP=w(sP()),qW=w(NT()),KT=w(aP());k();Hs=w(Ee()),$T=w(vO()),fP=w(Kd()),_P=w(require("util")),zl=w(Mn()),$W=w(ei()),VW=w(Dd()),mP=w(OW());cd();uT();hP=w(yt()),pP=w(gT()),EP=w(lp());Sm();KW=w(Ws()),YW=w(ie());Pr();Wl=w(rs());vd();_C();WW=w(VC()),zW=w(PW());Sp();LW();({HTTP_STATUS_CODES:DW}=Hs.hdbErrors),En=Dp.default.loggerWithTag("operation"),A_e=_P.promisify(nf.default.search),b_e=_P.promisify(VT.default.evaluateSQL),I_e={[G.CREATE_ATTRIBUTE]:!0,[G.CREATE_TABLE]:!0,[G.CREATE_SCHEMA]:!0,[G.DROP_ATTRIBUTE]:!0,[G.DROP_TABLE]:!0,[G.DROP_SCHEMA]:!0};o(jW,"processLocalTransaction");MW=w_e();tN(exports);ve.operation=gP;o(QW,"chooseOperation");o(JW,"getOperationFunction");(0,KW._assignPackageExport)("operation",gP);o(gP,"operation");o(N_e,"catchup");o(Fs,"executeJob");o(w_e,"initializeOperationFunctionMap")});var zT=M((r0e,ez)=>{"use strict";var YT=(k(),v(K)),O_e=ie(),Mp=z(),{handleHDBError:SP,hdbErrors:WT}=Ee(),{isMainThread:C_e}=require("worker_threads"),{Readable:P_e}=require("stream"),XW=require("os"),L_e=require("util"),D_e=HN(),M_e=L_e.promisify(D_e.authorize),ZW=(uC(),v(lC)),{createGzip:v_e,constants:U_e}=require("zlib"),x_e=[YT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,YT.OPERATIONS_ENUM.LOGIN,YT.OPERATIONS_ENUM.LOGOUT];function B_e(e){let t=`Found an uncaught exception with message: ${e.message}. ${XW.EOL}Stack: ${e.stack} ${XW.EOL}Terminating ${C_e?"HDB":"thread"}.`;console.error(t),Mp.fatal(t),process.exit(1)}o(B_e,"handleServerUncaughtException");function F_e(e,t,r){if(Mp[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:WT.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}o(F_e,"serverErrorHandler");function H_e(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=SP(new Error,"Invalid JSON.",WT.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(O_e.isEmpty(e.body.operation)){let n=SP(new Error,"Request body must include an 'operation' property.",WT.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}o(H_e,"reqBodyValidationHandler");function k_e(e,t,r){let n;!x_e.includes(e.body.operation)||e.body.operation===YT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&!e.body.username&&!e.body.password?M_e(e,t).then(i=>{n=i,e.body.hdb_user=n,r()}).catch(i=>{Mp.warn(i),Mp.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${i.stack}"`);let a=typeof i=="string"?{error:i}:{error:i.message};r(SP(i,a,WT.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}o(k_e,"authHandler");async function G_e(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=ZW.chooseOperation(e.body);let s=await ZW.processLocalTransaction(e,n);if(s instanceof P_e&&s.headers){for(let[i,a]of s.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(v_e({level:U_e.Z_BEST_SPEED})))}return s}catch(s){throw Mp.error(s),s}}o(G_e,"handlePostRequest");ez.exports={authHandler:k_e,handlePostRequest:G_e,handleServerUncaughtException:B_e,serverErrorHandler:F_e,reqBodyValidationHandler:H_e}});var sz=M((s0e,nz)=>{"use strict";var q_e=require("fastify-plugin"),{handlePostRequest:tz,authHandler:$_e,reqBodyValidationHandler:V_e}=zT();async function K_e(e){e.decorate("hdbCore",{preValidation:[V_e,$_e],request:o(t=>rz(tz(t,response)),"request"),requestWithoutAuthentication:o((t,r)=>rz(tz(t,r,!0)),"requestWithoutAuthentication")})}o(K_e,"hdbCore");async function rz(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}o(rz,"convertAsyncIterators");nz.exports=q_e(K_e)});var oz=M((a0e,iz)=>{"use strict";var o0e=require("fs"),jT=ce();jT.initSync();var{CONFIG_PARAMS:TP}=(k(),v(K)),Y_e=1024*1024*1024;function W_e(e){let t=jT.get(TP.HTTP_TIMEOUT),r=jT.get(TP.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Y_e,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,maxParamLength:jT.get(TP.HTTP_MAXPARAMLENGTH)??1e3,https:e}}o(W_e,"getServerOptions");iz.exports=W_e});var lz=M((l0e,cz)=>{"use strict";var RP=ce();RP.initSync();var{CONFIG_PARAMS:az}=(k(),v(K));function z_e(){let e=RP.get(az.HTTP_CORSACCESSLIST),t=RP.get(az.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}o(z_e,"getCORSOptions");cz.exports=z_e});var fz=M((d0e,dz)=>{"use strict";var uz=ce();uz.initSync();var j_e=(k(),v(K));function Q_e(){return uz.get(j_e.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}o(Q_e,"getHeaderTimeoutConfig");dz.exports=Q_e});var AP={};Ce(AP,{customFunctionsServer:()=>Z_e,ready:()=>Nz,start:()=>X_e});function X_e(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Vo||(Vo=Iz(t),ve.http((await Vo).server));let a=await Vo,c=(0,yP.dirname)(s),l=(0,yP.dirname)(n);if(l.startsWith("/")&&(l=l.slice(1)),!mz.has(c)){mz.add(c);try{a.register(tge(c,l))}catch(u){if(u.message==="Root plugin has already booted")St.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw u}}},ready:Nz}}async function Z_e(){try{St.info("In Custom Functions Fastify server"+process.cwd()),St.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),St.debug(`Custom Functions server process ${process.pid} starting up.`),await ege();let e=Sz.get(U.HTTP_SECUREPORT)>0,t;try{t=Vo=await Iz(e)}catch(r){throw St.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw St.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){St.error(`Custom Functions ${process.pid} Error: ${e}`),St.error(e),process.exit(1)}}async function ege(){try{St.info("Custom Functions starting configuration."),await Tz.setUsersWithRolesCache(),St.info("Custom Functions completed configuration.")}catch(e){St.error(e)}}function tge(e,t){return async function(r){try{St.info("Custom Functions starting buildRoutes"),St.trace("Loading fastify routes folder "+e),(0,hz.existsSync)(e)&&r.register(gz.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:St.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,a)=>{s?.message?St.error(s.message):s&&St.error(s),a()})}catch(n){St.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Iz(e){St.info("Custom Functions starting buildServer.");let t=(0,Rz.default)(e),r=(0,pz.default)(t);r.server.headersTimeout=(0,Az.default)(),r.setErrorHandler(bz.serverErrorHandler);let n=(0,yz.default)();return n&&r.register(Ez.default,n),r.register(function(s,i,a){s.setNotFoundHandler(function(c,l){r.server.emit("unhandled",c.raw,l.raw)}),a()}),r.register(_z.default),await r.register(J_e),await r.after(),tm(r),St.info("Custom Functions completed buildServer."),r}function Nz(){if(Vo)return Vo.then?Vo.then(e=>e.ready()):Vo.ready()}var yP,hz,pz,Ez,_z,gz,Sz,St,J_e,Tz,Rz,yz,Az,bz,Vo,mz,wz=fe(()=>{yP=require("path"),hz=require("fs"),pz=w(require("fastify")),Ez=w(require("@fastify/cors")),_z=w(DN()),gz=w(require("@fastify/autoload")),Sz=w(ce());k();St=w(z()),J_e=w(sz()),Tz=w(Jn()),Rz=w(oz()),yz=w(lz()),Az=w(fz()),bz=w(zT());po();Pr();mz=new Set;o(X_e,"start");o(Z_e,"customFunctionsServer");o(ege,"setUp");o(tge,"buildRouteFolder");o(Iz,"buildServer");o(Nz,"ready")});var bP={};Ce(bP,{start:()=>rge});function rge(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Dz.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(a=>n(s._nodeRequest,s._nodeResponse,()=>{a(i(s))}))}),!0}},handleFile(t,r,n){Cz||(Cz=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let a=Oz.get(s.pathname);if(a)return{handlesHeaders:!0,body:(0,Pz.default)(s,(0,Lz.realpathSync)(a))}}return i(s)},{runFirst:!0})),Oz.set(r,n)}}}var Pz,Lz,Dz,Oz,Cz,Mz=fe(()=>{Pz=w(require("send")),Lz=require("fs"),Dz=w(require("serve-static")),Oz=new Map;o(rge,"start")});var IP={};Ce(IP,{start:()=>nge});function nge({override:e}){return{handleFile:o((t,r,n)=>{QT.default.debug(`Loading env file: ${n}`);for(let[s,i]of Object.entries((0,vz.parse)(t))){if(process.env[s]!==void 0)if(QT.default.warn(`Environment variable conflict: ${s} from ${n} is already set on process.env`),e)QT.default.debug(`override option enabled. overriding environment variable: ${s}`);else continue;process.env[s]=i}},"handleFile")}}var vz,QT,Uz=fe(()=>{vz=require("dotenv"),QT=w(z());o(nge,"start")});var NP={};Ce(NP,{DataLoaderError:()=>as,DataLoaderResult:()=>of,EmptyFileError:()=>ZT,FileParseError:()=>XT,InvalidPropertyTypeError:()=>eR,MissingRequiredPropertyError:()=>vp,RecordProcessingError:()=>Up,SystemDatabaseError:()=>tR,UnsupportedFileExtensionError:()=>JT,handleApplication:()=>ige,loadDataFile:()=>kz,suppressHandleApplicationWarning:()=>sge});function ige(e){if((0,Bz.getWorkerIndex)()!==0){Qi.debug?.("Skipping data loader initialization on non-primary worker");return}e.handleEntry(t=>{t.entryType!=="file"||t.eventType==="unlink"||kz(t,cn,Ge).then(r=>{Qi.debug?.("Data loader processed file: %s: %s",(0,Ko.basename)(t.absolutePath),r.message)})})}async function kz({contents:e,absolutePath:t,stats:r},n,s){let i=(0,Ko.extname)(t)||"unknown",a;try{if(i===".yaml"||i===".yml")a=(0,xz.parseDocument)(e.toString()).toJSON();else if(i===".json")a=JSON.parse(e.toString());else throw new JT(t,i);a.mtime=r.mtimeMs}catch(f){throw f instanceof as?f:new XT(t,f)}if(!a)throw new ZT(t);let{database:c,table:l,records:u}=a;if(!l)throw new vp(t,"table");if(!u)throw new vp(t,"records");if(!Array.isArray(u))throw new eR(t,"records","array");let d=c?`${c}.${l}`:l;if(c?.toLowerCase()==="system")throw new tR(c,l);try{let f;if(c&&s[c]&&s[c][l])Qi.debug?.(`Using existing table ${d} from database tables`),f=s[c][l];else if(n&&n[l])Qi.debug?.(`Using existing table ${d} from global tables`),f=n[l];else{Qi.debug?.(`Table ${d} not found, creating new table`);let y=[];if(u.length>0){let T=u[0];Object.keys(T).map(R=>{let I={name:R,type:typeof T[R]};return R==="id"&&(I.isPrimaryKey=!0),I}).forEach(R=>{y.push(R)})}f=await et({database:c,table:l,attributes:y})}let m=u.length,h=0,p=0,_=0,g=100;for(let y=0;y<u.length;y+=g){let T=u.slice(y,y+g),R=[];for(let I of T)R.push(async()=>{try{let P=null,Y=I.id;if(Y!==void 0&&(P=await f.get(Y)),!P)return h++,f.put(I);let te=P.getUpdatedTime();return a.mtime>te?(p++,f.put(I)):(_++,Promise.resolve({inserted:0,updated:0}))}catch(P){if(P instanceof as)Qi.error?.(`Record processing error: ${P.message}`);else{let Y=new Up(d,P);Qi.error?.(`Record processing error: ${Y.message}`)}return Promise.resolve({inserted:0,updated:0,error:P.message})}});await Promise.all(R.map(I=>I()))}if(h>0||p>0){let y=`Loaded ${h} new and updated ${p} records in ${d}`;return _>0&&(y+=` (${_} records skipped)`),Qi.info?.(y),new of(t,c,l,"success",h+p,y)}else if(_>0){let y=`All ${_} records in ${d} already up-to-date`;return Qi.info?.(y),new of(t,c,l,"skipped",m,y)}else{let y=`No records to process in ${d}`;return Qi.info?.(y),new of(t,c,l,"success",0,y)}}catch(f){throw f instanceof as?f:new Up(d,f)}}var Ko,xz,Bz,Yo,Fz,Hz,Qi,sge,as,JT,XT,ZT,vp,eR,tR,Up,of,Gz=fe(()=>{Ko=require("node:path"),xz=require("yaml");Le();Bz=w(st()),Yo=w(tn()),Fz=w(Ee()),Hz=w(z()),Qi=Hz.default.forComponent("dataLoader"),sge=!0;o(ige,"handleApplication");o(kz,"loadDataFile");as=class extends Fz.ClientError{static{o(this,"DataLoaderError")}constructor(t,r=Yo.HTTP_STATUS_CODES.BAD_REQUEST){super(t,r),this.name="DataLoaderError"}},JT=class extends as{static{o(this,"UnsupportedFileExtensionError")}constructor(t,r){super(`Unsupported file extension in ${(0,Ko.basename)(t)}: ${r}. Only YAML and JSON files are supported.`,Yo.HTTP_STATUS_CODES.BAD_REQUEST),this.name="UnsupportedFileExtensionError"}},XT=class extends as{static{o(this,"FileParseError")}constructor(t,r){super(`Failed to parse data file ${(0,Ko.basename)(t)}: ${r.message}`,Yo.HTTP_STATUS_CODES.BAD_REQUEST),this.name="FileParseError"}},ZT=class extends as{static{o(this,"EmptyFileError")}constructor(t){super(`Data file ${(0,Ko.basename)(t)} is empty or invalid`,Yo.HTTP_STATUS_CODES.BAD_REQUEST),this.name="EmptyFileError"}},vp=class extends as{static{o(this,"MissingRequiredPropertyError")}constructor(t,r){super(`Data file ${(0,Ko.basename)(t)} is missing required "${r}" property`,Yo.HTTP_STATUS_CODES.BAD_REQUEST),this.name="MissingRequiredPropertyError"}},eR=class extends as{static{o(this,"InvalidPropertyTypeError")}constructor(t,r,n){super(`Data file ${(0,Ko.basename)(t)} has invalid "${r}" property, expected ${n}`,Yo.HTTP_STATUS_CODES.BAD_REQUEST),this.name="InvalidPropertyTypeError"}},tR=class extends as{static{o(this,"SystemDatabaseError")}constructor(t,r){super(`Cannot load data into system database: ${t}.${r}`,Yo.HTTP_STATUS_CODES.FORBIDDEN),this.name="SystemDatabaseError"}},Up=class extends as{static{o(this,"RecordProcessingError")}constructor(t,r){super(`Failed to process record in ${t}: ${r.message}`,Yo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR),this.name="RecordProcessingError"}},of=class{static{o(this,"DataLoaderResult")}#e;#t;#r;#n;#s;#i;constructor(t,r,n,s,i,a){this.#e=t,this.#t=r||"unknown",this.#r=n||"unknown",this.#n=s,this.#s=i,this.#i=a}get filePath(){return this.#e}get database(){return this.#t}get table(){return this.#r}get status(){return this.#n}get count(){return this.#s}get message(){return this.#i}toJSON(){return{filePath:this.#e,database:this.#t,table:this.#r,status:this.#n,count:this.#s,message:this.#i}}}});var OP=M((A0e,qz)=>{"use strict";var xp=ce();xp.initSync();var af=require("fs-extra"),wP=require("path"),cf=(k(),v(K)),oge=require("crypto"),age=require("uuid").v4;qz.exports=cge;function cge(){if(xp.getHdbBasePath()!==void 0){let e=wP.join(xp.getHdbBasePath(),cf.LICENSE_KEY_DIR_NAME,cf.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=wP.join(xp.getHdbBasePath(),cf.LICENSE_KEY_DIR_NAME,cf.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=wP.join(xp.getHdbBasePath(),cf.LICENSE_KEY_DIR_NAME,cf.JWT_ENUM.JWT_PASSPHRASE_NAME);try{af.accessSync(r),af.accessSync(e),af.accessSync(t)}catch(n){if(n.code==="ENOENT"){let s=age(),i=oge.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:s}});af.writeFileSync(r,s),af.writeFileSync(e,i.privateKey),af.writeFileSync(t,i.publicKey)}else throw n}}}o(cge,"checkJWTTokenExist")});var Vz=M((I0e,$z)=>{"use strict";var CP=class{static{o(this,"HdbInfoInsertObject")}constructor(t,r,n){this.info_id=t,this.data_version_num=r,this.hdb_version_num=n}};$z.exports={HdbInfoInsertObject:CP}});var Wz=M((w0e,Yz)=>{"use strict";var Kz=(k(),v(K)),PP=class{static{o(this,"UpgradeObject")}constructor(t,r){this[Kz.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Kz.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};Yz.exports={UpgradeObject:PP}});var rR=M((C0e,jz)=>{"use strict";var ks=require("prompt"),lf=require("chalk"),zz=z(),Si=require("os"),LP=Lc(),DP=["yes","y"];async function lge(e){let t=`${Si.EOL}`+lf.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Si.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Si.EOL}${Si.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Si.EOL}`;ks.override=LP(["CONFIRM_UPGRADE"]),ks.start(),ks.message=t;let r={properties:{CONFIRM_UPGRADE:{description:lf.magenta(`${Si.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n;try{n=await ks.get([r])}catch(s){return zz.error("There was an error when prompting user about an upgrade."),zz.error(s),!1}return DP.includes(n.CONFIRM_UPGRADE)}o(lge,"forceUpdatePrompt");async function uge(e){let t=`${Si.EOL}`+lf.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Si.EOL}`);ks.override=LP(["CONFIRM_DOWNGRADE"]),ks.start(),ks.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:lf.magenta(`${Si.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},n=await ks.get([r]);return DP.includes(n.CONFIRM_DOWNGRADE)}o(uge,"forceDowngradePrompt");async function dge(){let e=`${Si.EOL}`+lf.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");ks.override=LP(["GENERATE_CERTS"]),ks.start(),ks.message=e;let t={properties:{GENERATE_CERTS:{description:lf.magenta(`${Si.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await ks.get([t]);return DP.includes(r.GENERATE_CERTS)}o(dge,"upgradeCertsPrompt");jz.exports={forceUpdatePrompt:lge,forceDowngradePrompt:uge,upgradeCertsPrompt:dge}});var vP=M((L0e,Qz)=>{"use strict";var MP=class{static{o(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};Qz.exports=MP});var Xz=M((B0e,Jz)=>{"use strict";var fge=ie(),mge=yt(),M0e=z(),v0e=require("path"),U0e=require("fs"),x0e=(k(),v(K));Jz.exports={getOldPropsValue:hge};function hge(e,t,r=!1){let n=t.getRaw(e);return fge.isNotEmptyAndHasValue(n)?n:r?mge.getDefaultConfig(e):""}o(hge,"getOldPropsValue")});var rj=M((H0e,tj)=>{"use strict";var sc=require("path"),ic=require("fs-extra"),pge=require("properties-reader"),Ege=vP(),pr=z(),{getOldPropsValue:Tt}=Xz(),{HDB_SETTINGS_NAMES:Te,CONFIG_PARAMS:jl}=(k(),v(K)),Ql=yt(),nR=ce(),Zz=ie(),Ji=(k(),v(K)),UP=new Ege("3.1.0"),ej=[];function _ge(){let e=pge(nR.get(Te.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),pr.info(t);let r=` ;Settings for the HarperDB process.
33
33
 
34
34
  ;The directory selected during install where the database files reside.
35
35
  ${Te.HDB_ROOT_KEY} = ${Tt(Te.HDB_ROOT_KEY,e)}
@@ -95,37 +95,37 @@ ${Te.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Ql.getDefaultConfig(jl.CUSTOMFUNCTIONS_EN
95
95
  ;The port used to access the custom functions server.
96
96
  ${Te.CUSTOM_FUNCTIONS_PORT_KEY} = ${Ql.getDefaultConfig(jl.HTTP_PORT)}
97
97
  ;The path to the folder containing HarperDB custom function files.
98
- ${Te.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${nc.join(Tt(Te.HDB_ROOT_KEY,e),"custom_functions")}
98
+ ${Te.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${sc.join(Tt(Te.HDB_ROOT_KEY,e),"custom_functions")}
99
99
  ;Set the max number of processes HarperDB will start for the Custom Functions server
100
100
  ${Te.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Ql.getDefaultConfig(jl.HTTP_THREADS)}
101
- `,n=rR.get("settings_path"),s=nc.dirname(n),i=nc.join(s,"3_1_0_upgrade_settings.bak");try{pr.info(`Backing up old settings file to: ${i}`),sc.copySync(n,i)}catch(c){throw pr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{pr.info("New settings file values for 3.1.0 upgrade:",r),pr.info(`Creating new/upgraded settings file at '${n}'`),sc.writeFileSync(n,r),pr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),pr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),pr.error(c),sc.copySync(i,n),c}rR.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),pr.info(a),a}o(fge,"updateSettingsFile310");function mge(){let e=nc.join(jz.getHomeDir(),Ji.HDB_HOME_DIR_NAME,Ji.LICENSE_KEY_DIR_NAME,Ji.LICENSE_FILE_NAME),t=nc.join(jz.getHomeDir(),Ji.HDB_HOME_DIR_NAME,Ji.LICENSE_KEY_DIR_NAME,Ji.REG_KEY_FILE_NAME),r=nc.join(rR.getHdbBasePath(),Ji.LICENSE_KEY_DIR_NAME,Ji.LICENSE_FILE_NAME),n=nc.join(r,Ji.LICENSE_FILE_NAME),s=nc.join(r,Ji.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),pr.info(i);let a="Creating .license directory";console.log(a),pr.info(a),sc.mkdirpSync(r);try{sc.accessSync(e);try{let c="Moving licence file";console.log(c),pr.info(c),sc.moveSync(e,n);let l="License file successfully moved.";console.log(l),pr.info(l)}catch{let l="moving license file failed";console.error(l),pr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),pr.warn(l)}try{sc.accessSync(t);try{let c="Moving registration file";console.log(c),pr.info(c),sc.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),pr.info(l)}catch{let l="moving registration file failed";console.error(l),pr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),pr.warn(l)}}o(mge,"moveLicenseFiles");vP.sync_functions.push(fge);vP.sync_functions.push(mge);Qz.push(vP);Jz.exports=Qz});var nj=M((x0e,rj)=>{"use strict";var cs=_t(),{insertRecords:hge}=Jc(),pge=An(),ic=kt(),Ege=ie(),Yo=z(),_ge=ie(),Xi=require("fs-extra"),Wo=require("path"),gge=require("cli-progress"),Bp=require("assert"),Sge=require("pino"),Tge=ce();rj.exports=Rge;var nR,Zz,sR,UP,_n,Fp=!1;async function Rge(e=!0){return nR=Tge.getHdbBasePath(),Zz=Wo.join(nR,"schema"),sR=Wo.join(nR,"4_0_0_upgrade_tmp"),UP=Wo.join(nR,"transactions"),console.info("Reindexing upgrade started for schemas"),Yo.notify("Reindexing upgrade started for schemas"),await ej(Zz,!1,e),await Xi.pathExists(UP)&&(console.info(`
101
+ `,n=nR.get("settings_path"),s=sc.dirname(n),i=sc.join(s,"3_1_0_upgrade_settings.bak");try{pr.info(`Backing up old settings file to: ${i}`),ic.copySync(n,i)}catch(c){throw pr.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{pr.info("New settings file values for 3.1.0 upgrade:",r),pr.info(`Creating new/upgraded settings file at '${n}'`),ic.writeFileSync(n,r),pr.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),pr.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),pr.error(c),ic.copySync(i,n),c}nR.initSync();let a="New settings file for 3.1.0 upgrade successfully created.";return console.log(a),pr.info(a),a}o(_ge,"updateSettingsFile310");function gge(){let e=sc.join(Zz.getHomeDir(),Ji.HDB_HOME_DIR_NAME,Ji.LICENSE_KEY_DIR_NAME,Ji.LICENSE_FILE_NAME),t=sc.join(Zz.getHomeDir(),Ji.HDB_HOME_DIR_NAME,Ji.LICENSE_KEY_DIR_NAME,Ji.REG_KEY_FILE_NAME),r=sc.join(nR.getHdbBasePath(),Ji.LICENSE_KEY_DIR_NAME,Ji.LICENSE_FILE_NAME),n=sc.join(r,Ji.LICENSE_FILE_NAME),s=sc.join(r,Ji.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),pr.info(i);let a="Creating .license directory";console.log(a),pr.info(a),ic.mkdirpSync(r);try{ic.accessSync(e);try{let c="Moving licence file";console.log(c),pr.info(c),ic.moveSync(e,n);let l="License file successfully moved.";console.log(l),pr.info(l)}catch{let l="moving license file failed";console.error(l),pr.error(l)}}catch{let l=`license file '${e}' does not exist.`;console.warn(l),pr.warn(l)}try{ic.accessSync(t);try{let c="Moving registration file";console.log(c),pr.info(c),ic.moveSync(t,s);let l="Registration file successfully moved.";console.log(l),pr.info(l)}catch{let l="moving registration file failed";console.error(l),pr.error(l)}}catch{let l=`registration file '${t}' does not exist.`;console.warn(l),pr.warn(l)}}o(gge,"moveLicenseFiles");UP.sync_functions.push(_ge);UP.sync_functions.push(gge);ej.push(UP);tj.exports=ej});var aj=M((G0e,oj)=>{"use strict";var cs=_t(),{insertRecords:Sge}=Xc(),Tge=An(),oc=kt(),Rge=ie(),Wo=z(),yge=ie(),Xi=require("fs-extra"),zo=require("path"),Age=require("cli-progress"),Bp=require("assert"),bge=require("pino"),Ige=ce();oj.exports=Nge;var sR,nj,iR,xP,_n,Fp=!1;async function Nge(e=!0){return sR=Ige.getHdbBasePath(),nj=zo.join(sR,"schema"),iR=zo.join(sR,"4_0_0_upgrade_tmp"),xP=zo.join(sR,"transactions"),console.info("Reindexing upgrade started for schemas"),Wo.notify("Reindexing upgrade started for schemas"),await sj(nj,!1,e),await Xi.pathExists(xP)&&(console.info(`
102
102
 
103
- Reindexing upgrade started for transaction logs`),Yo.notify("Reindexing upgrade started for transaction logs"),await ej(UP,!0,e)),Yo.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Fp?", but errors occurred":"")}o(Rge,"reindexUpgrade");async function ej(e,t,r){let n=await Xi.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=Wo.join(e,a.toString());if(a===".DS_Store")continue;let l=await Xi.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&Xi.statSync(Wo.join(c,f)).isDirectory())try{await yge(a,f,t),_n.info(`Reindexing started for ${a}.${f}`),Yo.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await bge(a,f,c,t,r),_n.info(`Reindexing completed for ${a}.${f}`),Yo.notify(`Reindexing completed for ${a}.${f}`)}catch(m){Fp=!0,m.schema_path=c,m.table_name=f,Yo.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Yo.error(m),_n.error(m),console.error(m)}}}if(!Fp)try{await Xi.rm(sR,{recursive:!0})}catch{}}o(ej,"processTables");async function yge(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Wo.join(sR,s);await Xi.ensureDir(sR),await Xi.writeFile(i,""),_n=Sge({level:"debug",formatters:{bindings(){}}},i)}o(yge,"initPinoLogger");var Age=20;async function bge(e,t,r,n,s){let i;try{i=await cs.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Yo.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`),_n.error(T);return}throw T}let a=wge(i.dbis),c=cs.openDBI(i,a),l=Object.keys(i.dbis),u=cs.statDBI(i,a);_n.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new gge.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 cs.createEnvironment(r,t,!1);cs.createDBI(f,a,!1,!0);let m=[];try{for(let T of c.getRange({start:!1}))T.value={...T.value},m.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),m.length>Age&&await h();await h()}catch(T){throw Fp=!0,_n.error(T),T}async function h(){let T,R=m.map(({value:P})=>P);n?T=await Promise.all(R.map(P=>Ige(f,P))):T=await hge(f,a,l.filter(P=>P!=="__blob__"),R,!1);for(let P=0,Y=m.length;P<Y;P++){let{key:te,value:x}=m[P];_n.info(`Record hash value: ${te} hash: ${a}`);let $;n?$=T[P]:$=T.written_hashes.indexOf(te)>-1,Bp($,!0),Nge(f,a,x[a],n),_n.info(`Insert success, written hashes: ${T.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&Yo.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),_n.info(`${d.value}/${d.total} records inserted`)}o(h,"finishOutstanding"),d.stop();let p=cs.statDBI(i,a),_=cs.statDBI(f,a);if(_n.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${_.entryCount}`),Bp.deepStrictEqual(p.entryCount,_.entryCount),await cs.closeEnvironment(i),await cs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let T=Wo.join(r,t),R=Wo.join(T,"data.mdb"),I=Wo.join(T,"lock.mdb");await Xi.unlink(R),await Xi.unlink(I),await Xi.rmdir(T),_n.info(`Deleted old environment files from schema folder: ${R}, ${I}`)}let g=await cs.openEnvironment(r,t),y=cs.statDBI(g,a);_n.info(`New stats: ${JSON.stringify(_)}. New stats after move: ${JSON.stringify(y)}`),Bp.deepStrictEqual(y.entryCount,_.entryCount),await cs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(bge,"processTable");async function Ige(e,t){cs.initializeDBIs(e,ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ic.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[ic.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),_ge.isEmpty(t.user_name)||e.dbis[ic.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[ic.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(Ige,"insertTransaction");function Nge(e,t,r,n){let i=e.dbis[t].get(r);Bp.deepStrictEqual(typeof i,"object");let a;if(n){let c={[ic.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[ic.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!Ege.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];tj(e,c,f,r)}else tj(e,c,l,r)}o(Nge,"validateIndices");function tj(e,t,r,n){try{let s=!1,i=pge.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||_n.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),Bp.deepStrictEqual(s,!0)}catch(s){Fp=!0,_n.error(s),console.error(s)}}o(tj,"validateIndex");function wge(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(wge,"getHashDBI")});var cj=M((H0e,aj)=>{"use strict";var iR=require("path"),oc=require("fs-extra"),Oge=MP(),Jl=z(),sj=yt(),xP=ce(),Ti=(k(),v(K)),oR=ie(),Cge=require("properties-reader"),Pge=ri(),Lge=kg(),Dge=on(),F0e=require("util"),Mge=Dge.searchByValue,vge=Mn(),Uge=WS(),xge=It(),Bge=nj(),ij=rs(),Fge=tR(),Gp=new Oge("4.0.0"),oj=[],Hp,kp;async function Hge(){try{if(await Fge.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Hp){let t=oR.changeExtension(Hp,".bak");await oc.move(Hp,t)}if(kp){let t=oR.changeExtension(kp,".bak");await oc.move(kp,t)}await ij.generateKeys()}else console.log("Using existing certificates."),ij.updateConfigCert(Hp,kp,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(Hge,"generateNewKeys");async function kge(){console.log("Updating HarperDB nodes."),Jl.info("Updating HarperDB nodes.");let e=[];try{let t=new Pge(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Mge(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!xge.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],h=m.channel.split(":");u.push({schema:h[0],table:h[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ti.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(oR.isEmptyOrZeroLength(n))return;let s=new Lge(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await vge.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Uge.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(kge,"updateNodes");async function Gge(){let e=xP.get(Ti.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(iR.join("config","settings.js"))){Jl.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),Jl.info(t);let r=iR.dirname(e),n=xP.get(Ti.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=iR.join(n,"backup","4_0_0_upgrade_settings.bak"),i=iR.join(n,Ti.HDB_CONFIG_FILE);try{Jl.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{Jl.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),Jl.info("Updating env variables with new settings values");let f=sj.initOldConfig(e);Hp=f[Ti.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],kp=f[Ti.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],sj.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let a=oR.getPropsFilePath();oc.accessSync(a,oc.constants.F_OK|oc.constants.R_OK);let l=Cge(a).get(Ti.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
104
- install_user = ${l}`;try{oc.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{xP.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),Jl.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(Gge,"updateSettingsFile400");Gp.async_functions.push(Gge);Gp.async_functions.push(Hge);Gp.async_functions.push(Bge);Gp.async_functions.push(kge);oj.push(Gp);aj.exports=oj});var BP=M((G0e,fj)=>{"use strict";var Xl=ie(),qge=(k(),v(K)),lj=z(),{DATA_VERSION:$ge,UPGRADE_VERSION:Vge}=qge.UPGRADE_JSON_FIELD_NAMES_ENUM,uj=Xz(),aR=cj(),Zl=new Map;uj&&uj.forEach(e=>{Zl.set(e.version,e)});aR&&aR.forEach(e=>{Zl.set(e.version,e)});aR&&aR.forEach(e=>{Zl.set(e.version,e)});function Kge(){return[...Zl.keys()].sort(Xl.compareVersions)}o(Kge,"getSortedVersions");function dj(e){let t=e[$ge],r=e[Vge];return Xl.isEmptyOrZeroLength(t)||Xl.isEmptyOrZeroLength(r)?(lj.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),lj.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."),[]):[...Zl.keys()].sort(Xl.compareVersions).filter(function(n){return Xl.compareVersions(n,t)>0&&Xl.compareVersions(n,r)<=0})}o(dj,"getVersionsForUpgrade");function Yge(e){return dj(e).length>0}o(Yge,"hasUpgradesRequired");function Wge(e){return Xl.isEmptyOrZeroLength(e)?null:Zl.has(e)?Zl.get(e):null}o(Wge,"getDirectiveByVersion");fj.exports={getSortedVersions:Kge,getDirectiveByVersion:Wge,getVersionsForUpgrade:dj,hasUpgradesRequired:Yge}});var lR=M(($0e,_j)=>{"use strict";var zge=require("util"),FP=require("chalk"),jge=require("os"),hj=Mn(),Qge=on(),ls=(k(),v(K)),pj=kz(),kP=AI(),{UpgradeObject:mj}=$z(),{forceDowngradePrompt:Jge}=tR(),{packageJson:Xge}=Rt(),cR=z(),uf=ie(),GP=ei(),Zge=(Le(),v(ft)),eSe=BP(),tSe=zge.promisify(GP.setSchemaDataToGlobal),rSe=Qge.searchByValue,nSe="info_id",sSe="2.9.9",iSe="3.0.0";async function oSe(e){let t=new pj.HdbInfoInsertObject(1,e,e),r=new kP.InsertObject(ls.OPERATIONS_ENUM.INSERT,ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ls.INFO_TABLE_HASH_ATTRIBUTE,[t]);return GP.setSchemaDataToGlobal(),hj.insert(r)}o(oSe,"insertHdbInstallInfo");async function HP(e){let t,r=await Ej(),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 pj.HdbInfoInsertObject(i,e,e);let a=new kP.InsertObject(ls.OPERATIONS_ENUM.INSERT,ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ls.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await tSe(),hj.insert(a)}o(HP,"insertHdbUpgradeInfo");async function Ej(){let e=new kP.NoSQLSeachObject(ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,nSe,ls.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await rSe(e))}catch(r){console.error(r)}return t}o(Ej,"getAllHdbInfoRecords");async function aSe(){let e=await Ej();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(aSe,"getLatestHdbInfoRecord");async function cSe(){cR.info("Checking if HDB software has been updated");try{let e=Xge.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await aSe(),r;if(uf.isEmpty(t))r=sSe;else if(r=t.data_version_num,uf.compareVersions(r.toString(),e.toString())>0){if(!uf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(FP.yellow(`This instance's data was last run on version ${r}`)),console.error(FP.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.${jge.EOL}${ls.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");uf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(FP.yellow(`This instance's data was last run on version ${r}`)),await Jge(new mj(r,e))?await HP(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(GP.setSchemaDataToGlobal(),lSe(r),e.toString()===r.toString())return;let n=new mj(r,e);if(eSe.hasUpgradesRequired(n))return n;uf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await HP(n.upgrade_version),cR.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw cR.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),cR.fatal(e),e}}o(cSe,"getVersionUpdateInfo");function lSe(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 ${ls.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Zge.databases.system))throw console.log(t),new Error(t);if(!uf.isEmpty(e)&&e<iSe)throw console.log(t),new Error(t)}o(lSe,"checkIfInstallIsSupported");_j.exports={insertHdbInstallInfo:oSe,insertHdbUpgradeInfo:HP,getVersionUpdateInfo:cSe}});var Rj=M((K0e,Tj)=>{"use strict";var uR=require("joi"),{boolean:uSe,string:qP,number:dSe}=uR.types(),gj=require("fs-extra"),qp=(k(),v(K)),Sj=require("path"),fSe=at();Tj.exports=mSe;function mSe(e){let t=qP.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=uR.object({[qp.INSTALL_PROMPTS.ROOTPATH]:uR.custom(hSe),[qp.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:uR.alternatives([dSe.min(0),qP]).allow("null",null),[qp.INSTALL_PROMPTS.TC_AGREEMENT]:qP.valid("yes","YES","Yes"),[qp.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[qp.INSTALL_PROMPTS.CLUSTERING_ENABLED]:uSe});return fSe.validateBySchema(e,r)}o(mSe,"installValidator");function hSe(e,t){if(gj.existsSync(Sj.join(e,"system/hdb_user/data.mdb"))||gj.existsSync(Sj.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(hSe,"validateRootAvailable")});var Aj=M((W0e,yj)=>{"use strict";var{mkdirpSync:pSe,copySync:ESe}=require("fs-extra"),ac=require("path"),$p=(k(),v(K)),{PACKAGE_ROOT:_Se}=Rt(),VP=z(),gSe=jn(),$P=Ro(),SSe=At();yj.exports=TSe;async function TSe(e){VP.trace("Mounting HarperDB"),eu(e),eu(ac.join(e,"backup")),eu(ac.join(e,"keys")),eu(ac.join(e,"keys",$p.LICENSE_FILE_NAME)),eu(ac.join(e,"log")),eu(ac.join(e,"database")),eu(ac.join(e,"components")),ESe(ac.resolve(_Se,"./utility/install/README.md"),ac.join(e,"README.md")),await RSe()}o(TSe,"mountHdb");async function RSe(){let e=Um(),t=Object.keys($P);for(let r=0;r<t.length;r++){let n=t[r],s=$P[n].hash_attribute;try{SSe.initSystemSchemaPaths($p.SYSTEM_SCHEMA_NAME,n);let i=new e($p.SYSTEM_SCHEMA_NAME,n,s);i.attributes=$P[n].attributes;let a=i.attributes.find(({attribute:c})=>c===s);a.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await gSe.createTable(n,i)}catch(i){throw VP.error(`issue creating environment for ${$p.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}o(RSe,"createLMDBTables");function eu(e){pSe(e,{mode:$p.HDB_FILE_PERMISSIONS}),VP.info(`Directory ${e} created`)}o(eu,"makeDirectory")});var Bj=M((J0e,xj)=>{"use strict";var YP=require("os"),Oj=require("inquirer"),qs=require("fs-extra"),ySe=require("properties-reader"),ru=require("chalk"),eo=require("path"),ASe=require("human-readable-ids").hri,bSe=require("ora"),ISe=require("yaml"),Er=z(),cc=ce(),Vp=ie(),fR=Pc(),Cj=lR(),{packageJson:Pj}=Rt(),pe=(k(),v(K)),{CONFIG_PARAM_MAP:j0e,CONFIG_PARAMS:Bt}=pe,NSe=Rj(),wSe=Aj(),WP=yt(),OSe=Jn(),CSe=hh(),PSe=wP(),LSe=ei(),DSe=require("util").promisify,MSe=DSe(LSe.setSchemaDataToGlobal),bj=rs(),tu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Xr=o(e=>ru.magenta.bold(e),"HDB_PROMPT_MSG"),vSe="https://harperdb.io/legal/end-user-license-agreement",lc=YP.EOL,zo="",USe="yes",Ij="Starting HarperDB install...",Nj="HarperDB installation was successful.",wj="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",xSe="An out of date version of HarperDB is already installed.",KP="It appears that HarperDB is already installed. Exiting install...",BSe="Aborting install",Q0e=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])$/),FSe=new RegExp(/^[^\s.,*>]+$/),HSe=YP.homedir(),kSe=eo.join(HSe,pe.HDB_ROOT_DIR_NAME),GSe="HDB_ADMIN",qSe="CLUSTER_USER",$Se="dev",VSe="localhost",dR={[Bt.HTTP_CORS]:!0,[Bt.HTTP_CORSACCESSLIST]:["*"],[Bt.HTTP_PORT]:9926,[Bt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Bt.THREADS_COUNT]:1,[Bt.THREADS_DEBUG]:!0,[Bt.LOGGING_STDSTREAMS]:!0,[Bt.LOGGING_LEVEL]:"info",[Bt.OPERATIONSAPI_NETWORK_PORT]:9925,[Bt.LOCALSTUDIO_ENABLED]:!0},Jr={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:"},uc=fR([pe.INSTALL_PROMPTS.HDB_CONFIG]),Zi,Lj=!1,zP=!1,Dj=!1;xj.exports={install:Mj,updateConfigEnv:tTe,setIgnoreExisting:rTe};Mj.createSuperUser=Uj;async function Mj(){console.log(Xr(lc+Ij+lc)),Er.notify(Ij);let e;uc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=KSe());let t=WSe();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(Dj=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=NSe(t);if(r)throw r.message;await zSe(),await jSe(t);let n=await YSe(t);Zi=n[pe.INSTALL_PROMPTS.ROOTPATH],uc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&eo.dirname(uc[pe.INSTALL_PROMPTS.HDB_CONFIG])===Zi&&(Lj=!0),!zP&&!uc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await qs.pathExists(eo.join(Zi,pe.HDB_CONFIG_FILE))&&(console.error(KP),process.exit());let s=bSe({prefixText:Xr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Vp.isEmpty(Zi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");cc.setHdbBasePath(Zi),await wSe(Zi),await QSe(),await JSe(n),Er.initLogSettings(!0),await Uj(n),await ZSe(n),await bj.updateConfigCert(),await bj.generateCertsKeys(),await eTe(),PSe(),s.stop(),console.log(Xr(lc+Nj+lc)),Er.notify(Nj)}o(Mj,"install");function KSe(){let e=ISe.parseDocument(qs.readFileSync(uc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=WP.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(KSe,"getConfigFromFile");async function YSe(e){Er.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:tu,when:jo(e[pe.INSTALL_PROMPTS.ROOTPATH],Jr.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:zo,default:kSe,validate:o(async s=>Gs(s)?Gs(s):await qs.pathExists(eo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Xr(Jr.DESTINATION)},{type:"input",transformer:tu,when:jo(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Jr.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:zo,default:GSe,validate:o(s=>Gs(s)?Gs(s):(t=s,!0),"validate"),message:Xr(Jr.HDB_USERNAME)},{type:"password",when:jo(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Jr.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:zo,validate:o(s=>Gs(s)?Gs(s):!0,"validate"),message:Xr(Jr.HDB_PASS)},{type:"input",transformer:tu,when:jo(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],Jr.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:zo,default:$Se,validate:o(s=>Gs(s)?Gs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Xr(Jr.DEFAULTS_MODE)}];if(Dj||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:tu,when:jo(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Jr.REPLICATION_HOSTNAME),prefix:zo,default:VSe,message:Xr(Jr.REPLICATION_HOSTNAME)}),Vp.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:tu,when:jo(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],Jr.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:zo,default:ASe.random(),validate:o(i=>FSe.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Xr(Jr.NODE_NAME)},{type:"input",transformer:tu,when:jo(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],Jr.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:zo,default:qSe,validate:o(i=>Gs(i)?Gs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Xr(Jr.CLUSTER_USERNAME)},{type:"password",when:jo(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Jr.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:zo,validate:o(i=>Gs(i)?Gs(i):!0,"validate"),message:Xr(Jr.CLUSTER_PASS)}];r.push(...s)}let n=await Oj.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(YSe,"installPrompts");function jo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Xr(t)} ${ru.gray("[hidden]")}`),Er.trace(`${Xr(t)} [hidden]`)):(console.log(`${Xr(t)} ${e}`),Er.trace(`${Xr(t)} ${e}`)),!1):!0}o(jo,"displayCmdEnvVar");function Gs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Gs,"checkForEmptyValue");function WSe(){let e=Object.keys(pe.INSTALL_PROMPTS),t=fR(e),r=fR(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(WSe,"checkForPromptOverride");async function zSe(){Er.trace("Checking for existing install.");let e=Vp.getPropsFilePath(),t=await qs.pathExists(e),r;if(t){Er.trace(`Install found an existing boot prop file at:${e}`);let n=ySe(e),s=WP.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await qs.pathExists(s)}if(!t&&Vp.noBootFile()&&(r=!0),r&&!zP){if(Er.trace(`Install found existing HDB config at:${e}`),await Cj.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${Pj.version}. Exiting install...`;console.log(lc+ru.magenta.bold(xSe)),console.log(ru.magenta.bold(s)),Er.error(s)}else console.log(lc+ru.magenta.bold(KP)),Er.error(KP);process.exit(0)}}o(zSe,"checkForExistingInstall");async function jSe(e){Er.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${vSe}${lc}and can be viewed by typing or copying and pasting the URL into your web browser.${lc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:zo,transformer:tu,when:jo(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:Xr(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:ru.yellow("Please enter 'yes' or 'no'"),"validate")},n=await Oj.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==USe&&(console.log(ru.yellow(wj)),Er.error(wj),process.exit(0))}o(jSe,"termsAgreement");async function QSe(){let e=eo.join(Zi,pe.HDB_CONFIG_FILE),t;try{t=YP.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}
105
- install_user = ${t}`,n=Vp.getHomeDir(),s=eo.join(n,pe.HDB_HOME_DIR_NAME),i=eo.join(s,pe.LICENSE_KEY_DIR_NAME);try{qs.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),qs.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=eo.join(s,pe.BOOT_PROPS_FILE_NAME);try{await qs.writeFile(a,r)}catch(c){throw Er.error(`There was an error creating the boot file at path: ${a}`),c}cc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),cc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),cc.setProperty(cc.BOOT_PROPS_FILE_PATH,a)}}o(QSe,"createBootPropertiesFile");async function JSe(e){Er.trace("Creating HarperDB config file");let t=fR(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in dR){if(r===Bt.HTTP_PORT&&t[Bt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??dR[r],t[Bt.HTTP_SECUREPORT]=null;continue}else if(r===Bt.HTTP_PORT)continue;if(r===Bt.OPERATIONSAPI_NETWORK_PORT&&t[Bt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??dR[r],t[Bt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Bt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=dR[r])}}else t[Bt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Bt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Bt.HTTP_PORT.toLowerCase()]&&(t[Bt.HTTP_SECUREPORT]=null);try{uc[pe.INSTALL_PROMPTS.HDB_CONFIG]||WP.createConfigFile(t),cc.initSync()}catch(r){XSe(r)}}o(JSe,"createConfigFile");function XSe(e){Er.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(BSe);let t=eo.resolve(cc.get(cc.BOOT_PROPS_FILE_PATH),"../");t&&qs.removeSync(t),Zi&&(Lj?qs.readdirSync(Zi,{withFileTypes:!0}).forEach(n=>{let s=eo.join(n.path,n.name);s!==uc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&qs.removeSync(s)}):qs.removeSync(Zi)),process.exit(1)}o(XSe,"rollbackInstall");async function vj(e,t){Er.trace("Creating admin user"),await MSe();let r;try{r=await CSe.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 OSe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(vj,"createAdminUser");async function Uj(e){Er.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await vj(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(Uj,"createSuperUser");async function ZSe(e){Er.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await vj({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(ZSe,"createClusterUser");async function eTe(){let e=Pj.version;if(e)await Cj.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(eTe,"insertHdbVersionInfo");function tTe(e){uc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}o(tTe,"updateConfigEnv");function rTe(e){zP=e}o(rTe,"setIgnoreExisting")});var kj=M((Z0e,Hj)=>{"use strict";var jP=ie(),us=z(),Fj=BP();Hj.exports={processDirectives:nTe};async function nTe(e){console.log("Starting upgrade process...");let t=Fj.getVersionsForUpgrade(e),r=oTe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;us.notify(c),console.log(c);let l=[],u=[];try{l=sTe(a.sync_functions)}catch(d){throw us.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await iTe(a.async_functions)}catch(d){throw us.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(nTe,"processDirectives");function sTe(e){if(jP.isEmptyOrZeroLength(e))return us.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return us.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(us.info(`Running function ${r.name}`),!(r instanceof Function)){us.info("Variable being processed is not a function");continue}let n=r();us.info(n),t.push(n)}return t}o(sTe,"runSyncFunctions");async function iTe(e){if(jP.isEmptyOrZeroLength(e))return us.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return us.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(us.info(`Running function ${s.name}`),!(s instanceof Function)){us.info("Variable being processed is not a function");continue}let i=await s();us.info(i),t.push(i)}return t}o(iTe,"runAsyncFunctions");function oTe(e){if(jP.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=Fj.getDirectiveByVersion(r);n&&t.push(n)}return t}o(oTe,"getUpgradeDirectivesToInstall")});var QP=M((tBe,Gj)=>{"use strict";var aTe=require("util"),cTe=require("path"),lTe=require("child_process"),uTe=aTe.promisify(lTe.execFile),dTe=1e3*1e3*10;Gj.exports={findPs:fTe};async function fTe(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await uTe("ps",["wwxo",`pid,${r}`],{maxBuffer:dTe});for(let s of n.trim().split(`
106
- `).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:cTe.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(fTe,"findPs")});var zj=M((nBe,Wj)=>{"use strict";var mR=ce();mR.initSync();var Kj=require("chalk"),qj=require("fs-extra"),Jo=z(),Qo=(k(),v(K)),mTe=kj(),JP=ie(),Yj=lR(),hTe=tR(),$j=QP(),pTe=ei(),{packageJson:Vj}=Rt(),ETe=require("util").promisify,_Te=ETe(pTe.setSchemaDataToGlobal),XP,{UPGRADE_VERSION:ZP}=Qo.UPGRADE_JSON_FIELD_NAMES_ENUM;Wj.exports={upgrade:gTe};async function gTe(e){await _Te(),XP===void 0&&(XP=Yd()),qj.existsSync(mR.get(mR.BOOT_PROPS_FILE_PATH))||(Kp("The hdb_boot_properties file was not found. Please install HDB.",Qo.LOG_LEVELS.ERROR),process.exit(1)),qj.existsSync(mR.get(Qo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Kp("The hdb settings file was not found. Please make sure HDB is installed.",Qo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Yj.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Kp(`This version of HarperDB is ${Vj.version}`,Qo.LOG_LEVELS.INFO);let r=t[ZP]??Vj.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Qo.HDB_SUPPORT_ADDRESS}`),Jo.notify("Missing new version field from upgrade info object"),process.exit(1)),await STe();let n,s=0;try{n=await hTe.forceUpdatePrompt(t)}catch(i){Jo.error("There was an error when prompting user about upgrade."),Jo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Jo.info(`Starting upgrade to version ${r}`),await TTe(t),Kp(`HarperDB was successfully upgraded to version ${t[ZP]}`,Qo.LOG_LEVELS.INFO)}o(gTe,"upgrade");async function STe(){let e=!1,t=await $j.findPs(Qo.HDB_PROC_NAME);if(JP.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await $j.findPs("hdb_express");JP.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await XP.list();JP.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Kj.red(r)),Jo.error(r),process.exit(1)}}o(STe,"checkIfRunning");async function TTe(e){try{await mTe.processDirectives(e)}catch(t){throw Kp("There was an error during the data upgrade. Please check the logs.",Qo.LOG_LEVELS.ERROR),t}try{await Yj.insertHdbUpgradeInfo(e[ZP])}catch(t){Jo.error("Error updating the 'hdb_info' system table."),Jo.error(t)}}o(TTe,"runUpgrade");function Kp(e,t=void 0){t||(t=Jo.info),Jo[t](e),console.log(Kj.magenta(e))}o(Kp,"printToLogAndConsole")});var t2=M(Yp=>{"use strict";var Re=ce();Re.initSync();Kd();var rr=(k(),v(K)),{CONFIG_PARAMS:De}=rr,ds=z(),Xo=require("fs-extra"),Zo=require("path"),RTe=wP(),{install:yTe}=Bj(),eL=require("chalk"),{packageJson:ATe,PACKAGE_ROOT:bTe}=Rt(),ea=ie(),tL=yt(),Qj=Pc(),jj=tT(),ITe=zj(),{compactOnStart:NTe}=($O(),v(qO)),wTe=require("minimist"),OTe=rs(),{startHTTPThreads:CTe}=(rL(),v(r2)),PTe=lR(),{isMainThread:LTe}=require("worker_threads"),iBe=Ro(),oBe=Ca(),aBe=$b(),cBe=Um(),hR=(k(),v(K)),to,df,Jj=!1,DTe="Upgrade complete. Starting HarperDB.",MTe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",vTe="HarperDB not found, starting install process.",UTe="There was an error during install, check install_log.log for more details. Exiting.",xTe="HarperDB successfully started.";function BTe(){if(!Jj){let e=o(()=>{Xo.removeSync(Zo.join(Re.get(rr.CONFIG_PARAMS.ROOTPATH),rr.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(BTe,"addExitListeners");async function Xj(e=!1,t=!1){if(console.log(eL.magenta("Starting HarperDB...")),ds.suppressLogging?.(()=>{console.log(eL.magenta(""+Xo.readFileSync(Zo.join(bTe,"utility/install/ascii_logo.txt"))))}),await e2()===!1){console.log(vTe);try{await yTe()}catch(l){console.error(UTe,l),ds.error(l),process.exit(1)}}if(!e){let l=Qj(Object.keys(rr.CONFIG_PARAM_MAP),!0);!ea.isEmpty(l)&&!ea.isEmptyOrZeroLength(Object.keys(l))&&tL.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=df?.service==="clustering";df?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=Zo.join(Re.get(rr.CONFIG_PARAMS.ROOTPATH),rr.HDB_PID_FILE),i=qTe(s);i&&i!==1&&$Te(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),to===void 0&&(to=Yd()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Re.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await jj.generateNatsConfig(),await to.startClusteringProcesses(!0),process.exit()),BTe(),await Xo.writeFile(Zo.join(Re.get(hR.CONFIG_PARAMS.ROOTPATH),hR.HDB_PID_FILE),`${process.pid}`),ds.info("HarperDB PID",process.pid);let a;try{let l=await PTe.getVersionUpdateInfo();l!==void 0&&(a=l[rr.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await ITe.upgrade(l),console.log(DTe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),ds.error(l)):(console.error(MTe,l),ds.error(l)),process.exit(1)}RTe(),kTe(),await OTe.reviewSelfSignedCert(),ea.autoCastBoolean(Re.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&LTe&&await jj.generateNatsConfig(t)}o(Xj,"initialize");async function FTe(e=!1){try{df=wTe(process.argv),df.ROOTPATH&&tL.updateConfigObject("settings_path",Zo.join(df.ROOTPATH,rr.HDB_CONFIG_FILE)),await Xj(e,!0),Re.get(rr.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await NTe();let t=process.env.IS_SCRIPTED_SERVICE&&!df.service;ea.autoCastBoolean(Re.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await to.startClusteringProcesses(),await to.startClusteringThreads()),await CTe(process.env.DEV_MODE?1:Re.get(hR.CONFIG_PARAMS.THREADS_COUNT)??Re.get(hR.CONFIG_PARAMS.THREADS)),t||Zj()}catch(t){console.error(t),ds.error(t),process.exit(1)}}o(FTe,"main");function Zj(){ds.suppressLogging(()=>{console.log(eL.magenta(`HarperDB ${ATe.version} successfully started`))}),ds.notify(xTe)}o(Zj,"started");async function HTe(e=!0){Jj=!e;try{to===void 0&&(to=Yd()),to.enterPM2Mode(),await Xj(),ea.autoCastBoolean(Re.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await to.startClusteringProcesses(),await to.startService(rr.PROCESS_DESCRIPTORS.HDB),Zj(),e&&process.exit(0)}catch(t){console.error(t),ds.error(t),process.exit(1)}}o(HTe,"launch");function kTe(){let e=Zo.join(Re.get(rr.CONFIG_PARAMS.ROOTPATH),rr.LICENSE_KEY_DIR_NAME,rr.LICENSE_FILE_NAME),t=Zo.join(e,rr.LICENSE_FILE_NAME),r=Zo.join(e,rr.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=Qj(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ea.isEmpty(n)||ea.isEmpty(s))return;Xo.mkdirpSync(e),Xo.writeFileSync(r,n),Xo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ds.error(s)}}o(kTe,"writeLicenseFromVars");Yp.launch=HTe;Yp.main=FTe;Yp.isHdbInstalled=e2;Yp.startupLog=GTe;async function e2(){try{await Xo.stat(ea.getPropsFilePath()),await Xo.stat(Re.get(rr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ea.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ds.error(`Error checking for HDB install - ${e}`),e}return!0}o(e2,"isHdbInstalled");function GTe(e){let r=o(h=>h.padEnd(20),"pad"),n=`
103
+ Reindexing upgrade started for transaction logs`),Wo.notify("Reindexing upgrade started for transaction logs"),await sj(xP,!0,e)),Wo.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Fp?", but errors occurred":"")}o(Nge,"reindexUpgrade");async function sj(e,t,r){let n=await Xi.readdir(e),s=n.length;for(let i=0;i<s;i++){let a=n[i],c=zo.join(e,a.toString());if(a===".DS_Store")continue;let l=await Xi.readdir(c),u=l.length;for(let d=0;d<u;d++){let f=l[d];if(f!==".DS_Store"&&Xi.statSync(zo.join(c,f)).isDirectory())try{await wge(a,f,t),_n.info(`Reindexing started for ${a}.${f}`),Wo.notify(`${t?"Transaction":"Schema"} reindexing started for ${a}.${f}`),await Cge(a,f,c,t,r),_n.info(`Reindexing completed for ${a}.${f}`),Wo.notify(`Reindexing completed for ${a}.${f}`)}catch(m){Fp=!0,m.schema_path=c,m.table_name=f,Wo.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Wo.error(m),_n.error(m),console.error(m)}}}if(!Fp)try{await Xi.rm(iR,{recursive:!0})}catch{}}o(sj,"processTables");async function wge(e,t,r){let s=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=zo.join(iR,s);await Xi.ensureDir(iR),await Xi.writeFile(i,""),_n=bge({level:"debug",formatters:{bindings(){}}},i)}o(wge,"initPinoLogger");var Oge=20;async function Cge(e,t,r,n,s){let i;try{i=await cs.openEnvironment(r,t,n)}catch(T){if(T.message==="MDB_INVALID: File is not an LMDB file"){Wo.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`),_n.error(T);return}throw T}let a=Dge(i.dbis),c=cs.openDBI(i,a),l=Object.keys(i.dbis),u=cs.statDBI(i,a);_n.info(`Old environment stats: ${JSON.stringify(u)}`);let d=new Age.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 cs.createEnvironment(r,t,!1);cs.createDBI(f,a,!1,!0);let m=[];try{for(let T of c.getRange({start:!1}))T.value={...T.value},m.push(T),n||e==="system"&&(t==="hdb_schema"&&(T.key=T.key.toString(),T.value.name=T.value.name.toString()),t==="hdb_table"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.name=T.value.name.toString()),t==="hdb_attribute"&&(T.key=T.key.toString(),T.value.schema=T.value.schema.toString(),T.value.table=T.value.table.toString(),T.value.attribute=T.value.attribute.toString())),m.length>Oge&&await h();await h()}catch(T){throw Fp=!0,_n.error(T),T}async function h(){let T,R=m.map(({value:P})=>P);n?T=await Promise.all(R.map(P=>Pge(f,P))):T=await Sge(f,a,l.filter(P=>P!=="__blob__"),R,!1);for(let P=0,Y=m.length;P<Y;P++){let{key:te,value:x}=m[P];_n.info(`Record hash value: ${te} hash: ${a}`);let $;n?$=T[P]:$=T.written_hashes.indexOf(te)>-1,Bp($,!0),Lge(f,a,x[a],n),_n.info(`Insert success, written hashes: ${T.written_hashes}`),d.increment()}m=[],d.value/d.total*100%10===0&&Wo.notify(`${e}.${t} ${d.value}/${d.total} records inserted`),_n.info(`${d.value}/${d.total} records inserted`)}o(h,"finishOutstanding"),d.stop();let p=cs.statDBI(i,a),_=cs.statDBI(f,a);if(_n.info(`Old stats entry count: ${p.entryCount}. New stats entry count: ${_.entryCount}`),Bp.deepStrictEqual(p.entryCount,_.entryCount),await cs.closeEnvironment(i),await cs.closeEnvironment(f),delete global.lmdb_map[`${e}.${t}`],s){let T=zo.join(r,t),R=zo.join(T,"data.mdb"),I=zo.join(T,"lock.mdb");await Xi.unlink(R),await Xi.unlink(I),await Xi.rmdir(T),_n.info(`Deleted old environment files from schema folder: ${R}, ${I}`)}let g=await cs.openEnvironment(r,t),y=cs.statDBI(g,a);_n.info(`New stats: ${JSON.stringify(_)}. New stats after move: ${JSON.stringify(y)}`),Bp.deepStrictEqual(y.entryCount,_.entryCount),await cs.closeEnvironment(g),delete global.lmdb_map[`${e}.${t}`]}o(Cge,"processTable");async function Pge(e,t){cs.initializeDBIs(e,oc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,oc.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[oc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[oc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),yge.isEmpty(t.user_name)||e.dbis[oc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let n of t.hash_values)e.dbis[oc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n,r)})}o(Pge,"insertTransaction");function Lge(e,t,r,n){let i=e.dbis[t].get(r);Bp.deepStrictEqual(typeof i,"object");let a;if(n){let c={[oc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[oc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};a=Object.entries(c)}else a=Object.entries(i);for(let[c,l]of a)if(c!==t&&e.dbis[c]!==void 0&&!Rge.isEmptyOrZeroLength(l))if(n&&c==="hash_value")for(let u=0,d=l.length;u<d;u++){let f=l[u];ij(e,c,f,r)}else ij(e,c,l,r)}o(Lge,"validateIndices");function ij(e,t,r,n){try{let s=!1,i=Tge.getIndexedValues(r);if(!i)return;for(let a of i)s=e.dbis[t].doesExist(a,n),s||_n.info(`Validate indices did not find value in new DBI: ${a}. Hash: ${n}`),Bp.deepStrictEqual(s,!0)}catch(s){Fp=!0,_n.error(s),console.error(s)}}o(ij,"validateIndex");function Dge(e){let t;for(let[r,n]of Object.entries(e))if(n.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}o(Dge,"getHashDBI")});var fj=M((V0e,dj)=>{"use strict";var oR=require("path"),ac=require("fs-extra"),Mge=vP(),Jl=z(),cj=yt(),BP=ce(),Ti=(k(),v(K)),aR=ie(),vge=require("properties-reader"),Uge=ri(),xge=Gg(),Bge=on(),$0e=require("util"),Fge=Bge.searchByValue,Hge=Mn(),kge=zS(),Gge=It(),qge=aj(),lj=rs(),$ge=rR(),Gp=new Mge("4.0.0"),uj=[],Hp,kp;async function Vge(){try{if(await $ge.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Hp){let t=aR.changeExtension(Hp,".bak");await ac.move(Hp,t)}if(kp){let t=aR.changeExtension(kp,".bak");await ac.move(kp,t)}await lj.generateKeys()}else console.log("Using existing certificates."),lj.updateConfigCert(Hp,kp,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}o(Vge,"generateNewKeys");async function Kge(){console.log("Updating HarperDB nodes."),Jl.info("Updating HarperDB nodes.");let e=[];try{let t=new Uge(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Fge(t)),n=[];for(let i=0,a=r.length;i<a;i++){let c=r[i];if(!Gge.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],h=m.channel.split(":");u.push({schema:h[0],table:h[1],publish:m.publish,subscribe:m.subscribe})}n.push({name:c.name,subscriptions:u,system_info:{hdb_version:Ti.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(aR.isEmptyOrZeroLength(n))return;let s=new xge(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,n);await Hge.update(s)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{kge.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}o(Kge,"updateNodes");async function Yge(){let e=BP.get(Ti.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(oR.join("config","settings.js"))){Jl.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),Jl.info(t);let r=oR.dirname(e),n=BP.get(Ti.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),s=oR.join(n,"backup","4_0_0_upgrade_settings.bak"),i=oR.join(n,Ti.HDB_CONFIG_FILE);try{Jl.info(`Backing up old settings file to: ${s}`),console.log(`Backing up old settings file to: ${s}`),ac.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{Jl.info(`Creating new/upgraded settings file at '${new_settings_path}'`),console.log(`Creating new/upgraded settings file at '${new_settings_path}'`),Jl.info("Updating env variables with new settings values");let f=cj.initOldConfig(e);Hp=f[Ti.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],kp=f[Ti.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],cj.createConfigFile(f)}catch(f){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),f}let a=aR.getPropsFilePath();ac.accessSync(a,ac.constants.F_OK|ac.constants.R_OK);let l=vge(a).get(Ti.HDB_SETTINGS_NAMES.INSTALL_USER),u=`settings_path = ${i}
104
+ install_user = ${l}`;try{ac.writeFileSync(a,u)}catch(f){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),f}try{BP.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{ac.removeSync(r),console.log(d),Jl.info(d)}catch(f){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),f}}o(Yge,"updateSettingsFile400");Gp.async_functions.push(Yge);Gp.async_functions.push(Vge);Gp.async_functions.push(qge);Gp.async_functions.push(Kge);uj.push(Gp);dj.exports=uj});var FP=M((Y0e,Ej)=>{"use strict";var Xl=ie(),Wge=(k(),v(K)),mj=z(),{DATA_VERSION:zge,UPGRADE_VERSION:jge}=Wge.UPGRADE_JSON_FIELD_NAMES_ENUM,hj=rj(),cR=fj(),Zl=new Map;hj&&hj.forEach(e=>{Zl.set(e.version,e)});cR&&cR.forEach(e=>{Zl.set(e.version,e)});cR&&cR.forEach(e=>{Zl.set(e.version,e)});function Qge(){return[...Zl.keys()].sort(Xl.compareVersions)}o(Qge,"getSortedVersions");function pj(e){let t=e[zge],r=e[jge];return Xl.isEmptyOrZeroLength(t)||Xl.isEmptyOrZeroLength(r)?(mj.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),mj.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."),[]):[...Zl.keys()].sort(Xl.compareVersions).filter(function(n){return Xl.compareVersions(n,t)>0&&Xl.compareVersions(n,r)<=0})}o(pj,"getVersionsForUpgrade");function Jge(e){return pj(e).length>0}o(Jge,"hasUpgradesRequired");function Xge(e){return Xl.isEmptyOrZeroLength(e)?null:Zl.has(e)?Zl.get(e):null}o(Xge,"getDirectiveByVersion");Ej.exports={getSortedVersions:Qge,getDirectiveByVersion:Xge,getVersionsForUpgrade:pj,hasUpgradesRequired:Jge}});var uR=M((z0e,Rj)=>{"use strict";var Zge=require("util"),HP=require("chalk"),eSe=require("os"),gj=Mn(),tSe=on(),ls=(k(),v(K)),Sj=Vz(),GP=II(),{UpgradeObject:_j}=Wz(),{forceDowngradePrompt:rSe}=rR(),{packageJson:nSe}=Rt(),lR=z(),uf=ie(),qP=ei(),sSe=(Le(),v(ft)),iSe=FP(),oSe=Zge.promisify(qP.setSchemaDataToGlobal),aSe=tSe.searchByValue,cSe="info_id",lSe="2.9.9",uSe="3.0.0";async function dSe(e){let t=new Sj.HdbInfoInsertObject(1,e,e),r=new GP.InsertObject(ls.OPERATIONS_ENUM.INSERT,ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ls.INFO_TABLE_HASH_ATTRIBUTE,[t]);return qP.setSchemaDataToGlobal(),gj.insert(r)}o(dSe,"insertHdbInstallInfo");async function kP(e){let t,r=await Tj(),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 Sj.HdbInfoInsertObject(i,e,e);let a=new GP.InsertObject(ls.OPERATIONS_ENUM.INSERT,ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,ls.INFO_TABLE_HASH_ATTRIBUTE,[t]);return await oSe(),gj.insert(a)}o(kP,"insertHdbUpgradeInfo");async function Tj(){let e=new GP.NoSQLSeachObject(ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,cSe,ls.INFO_TABLE_HASH_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await aSe(e))}catch(r){console.error(r)}return t}o(Tj,"getAllHdbInfoRecords");async function fSe(){let e=await Tj();if(e.length===0)return;let t,r=new Map;for(let s of e)r.set(s.info_id,s);let n=Math.max.apply(null,[...r.keys()]);return t=r.get(n),t}o(fSe,"getLatestHdbInfoRecord");async function mSe(){lR.info("Checking if HDB software has been updated");try{let e=nSe.version;if(!e)throw new Error("Could not find the version number in the package.json file");let t=await fSe(),r;if(uf.isEmpty(t))r=lSe;else if(r=t.data_version_num,uf.compareVersions(r.toString(),e.toString())>0){if(!uf.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(HP.yellow(`This instance's data was last run on version ${r}`)),console.error(HP.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.${eSe.EOL}${ls.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");uf.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(HP.yellow(`This instance's data was last run on version ${r}`)),await rSe(new _j(r,e))?await kP(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(qP.setSchemaDataToGlobal(),hSe(r),e.toString()===r.toString())return;let n=new _j(r,e);if(iSe.hasUpgradesRequired(n))return n;uf.compareVersions(n.data_version.toString(),n.upgrade_version.toString())<0&&(await kP(n.upgrade_version),lR.notify(`HarperDB running on upgraded version: ${n.upgrade_version}`))}catch(e){throw lR.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),lR.fatal(e),e}}o(mSe,"getVersionUpdateInfo");function hSe(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 ${ls.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in sSe.databases.system))throw console.log(t),new Error(t);if(!uf.isEmpty(e)&&e<uSe)throw console.log(t),new Error(t)}o(hSe,"checkIfInstallIsSupported");Rj.exports={insertHdbInstallInfo:dSe,insertHdbUpgradeInfo:kP,getVersionUpdateInfo:mSe}});var Ij=M((Q0e,bj)=>{"use strict";var dR=require("joi"),{boolean:pSe,string:$P,number:ESe}=dR.types(),yj=require("fs-extra"),qp=(k(),v(K)),Aj=require("path"),_Se=at();bj.exports=gSe;function gSe(e){let t=$P.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=dR.object({[qp.INSTALL_PROMPTS.ROOTPATH]:dR.custom(SSe),[qp.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:dR.alternatives([ESe.min(0),$P]).allow("null",null),[qp.INSTALL_PROMPTS.TC_AGREEMENT]:$P.valid("yes","YES","Yes"),[qp.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[qp.INSTALL_PROMPTS.CLUSTERING_ENABLED]:pSe});return _Se.validateBySchema(e,r)}o(gSe,"installValidator");function SSe(e,t){if(yj.existsSync(Aj.join(e,"system/hdb_user/data.mdb"))||yj.existsSync(Aj.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}o(SSe,"validateRootAvailable")});var wj=M((X0e,Nj)=>{"use strict";var{mkdirpSync:TSe,copySync:RSe}=require("fs-extra"),cc=require("path"),$p=(k(),v(K)),{PACKAGE_ROOT:ySe}=Rt(),KP=z(),ASe=jn(),VP=Ro(),bSe=At();Nj.exports=ISe;async function ISe(e){KP.trace("Mounting HarperDB"),eu(e),eu(cc.join(e,"backup")),eu(cc.join(e,"keys")),eu(cc.join(e,"keys",$p.LICENSE_FILE_NAME)),eu(cc.join(e,"log")),eu(cc.join(e,"database")),eu(cc.join(e,"components")),RSe(cc.resolve(ySe,"./utility/install/README.md"),cc.join(e,"README.md")),await NSe()}o(ISe,"mountHdb");async function NSe(){let e=Um(),t=Object.keys(VP);for(let r=0;r<t.length;r++){let n=t[r],s=VP[n].hash_attribute;try{bSe.initSystemSchemaPaths($p.SYSTEM_SCHEMA_NAME,n);let i=new e($p.SYSTEM_SCHEMA_NAME,n,s);i.attributes=VP[n].attributes;let a=i.attributes.find(({attribute:c})=>c===s);a.isPrimaryKey=!0,["hdb_user","hdb_role"].includes(n)&&(i.audit=!0),await ASe.createTable(n,i)}catch(i){throw KP.error(`issue creating environment for ${$p.SYSTEM_SCHEMA_NAME}.${n}: ${i}`),i}}}o(NSe,"createLMDBTables");function eu(e){TSe(e,{mode:$p.HDB_FILE_PERMISSIONS}),KP.info(`Directory ${e} created`)}o(eu,"makeDirectory")});var Gj=M((rBe,kj)=>{"use strict";var WP=require("os"),Dj=require("inquirer"),qs=require("fs-extra"),wSe=require("properties-reader"),ru=require("chalk"),eo=require("path"),OSe=require("human-readable-ids").hri,CSe=require("ora"),PSe=require("yaml"),Er=z(),lc=ce(),Vp=ie(),mR=Lc(),Mj=uR(),{packageJson:vj}=Rt(),pe=(k(),v(K)),{CONFIG_PARAM_MAP:eBe,CONFIG_PARAMS:Bt}=pe,LSe=Ij(),DSe=wj(),zP=yt(),MSe=Jn(),vSe=hh(),USe=OP(),xSe=ei(),BSe=require("util").promisify,FSe=BSe(xSe.setSchemaDataToGlobal),Oj=rs(),tu=o(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Xr=o(e=>ru.magenta.bold(e),"HDB_PROMPT_MSG"),HSe="https://harperdb.io/legal/end-user-license-agreement",uc=WP.EOL,jo="",kSe="yes",Cj="Starting HarperDB install...",Pj="HarperDB installation was successful.",Lj="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",GSe="An out of date version of HarperDB is already installed.",YP="It appears that HarperDB is already installed. Exiting install...",qSe="Aborting install",tBe=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])$/),$Se=new RegExp(/^[^\s.,*>]+$/),VSe=WP.homedir(),KSe=eo.join(VSe,pe.HDB_ROOT_DIR_NAME),YSe="HDB_ADMIN",WSe="CLUSTER_USER",zSe="dev",jSe="localhost",fR={[Bt.HTTP_CORS]:!0,[Bt.HTTP_CORSACCESSLIST]:["*"],[Bt.HTTP_PORT]:9926,[Bt.AUTHENTICATION_AUTHORIZELOCAL]:!0,[Bt.THREADS_COUNT]:1,[Bt.THREADS_DEBUG]:!0,[Bt.LOGGING_STDSTREAMS]:!0,[Bt.LOGGING_LEVEL]:"info",[Bt.OPERATIONSAPI_NETWORK_PORT]:9925,[Bt.LOCALSTUDIO_ENABLED]:!0},Jr={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:"},dc=mR([pe.INSTALL_PROMPTS.HDB_CONFIG]),Zi,Uj=!1,jP=!1,xj=!1;kj.exports={install:Bj,updateConfigEnv:oTe,setIgnoreExisting:aTe};Bj.createSuperUser=Hj;async function Bj(){console.log(Xr(uc+Cj+uc)),Er.notify(Cj);let e;dc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&(e=QSe());let t=XSe();Object.assign(t,e),t[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&t[pe.INSTALL_PROMPTS.ROOTPATH]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME]&&t[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]&&t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]===void 0&&(xj=!0,t[pe.INSTALL_PROMPTS.DEFAULTS_MODE]="prod");let r=LSe(t);if(r)throw r.message;await ZSe(),await eTe(t);let n=await JSe(t);Zi=n[pe.INSTALL_PROMPTS.ROOTPATH],dc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&eo.dirname(dc[pe.INSTALL_PROMPTS.HDB_CONFIG])===Zi&&(Uj=!0),!jP&&!dc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&await qs.pathExists(eo.join(Zi,pe.HDB_CONFIG_FILE))&&(console.error(YP),process.exit());let s=CSe({prefixText:Xr("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),Vp.isEmpty(Zi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");lc.setHdbBasePath(Zi),await DSe(Zi),await tTe(),await rTe(n),Er.initLogSettings(!0),await Hj(n),await sTe(n),await Oj.updateConfigCert(),await Oj.generateCertsKeys(),await iTe(),USe(),s.stop(),console.log(Xr(uc+Pj+uc)),Er.notify(Pj)}o(Bj,"install");function QSe(){let e=PSe.parseDocument(qs.readFileSync(dc[pe.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=zP.flattenConfig(e.toJSON());return t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[pe.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}o(QSe,"getConfigFromFile");async function JSe(e){Er.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:tu,when:Qo(e[pe.INSTALL_PROMPTS.ROOTPATH],Jr.DESTINATION),name:pe.INSTALL_PROMPTS.ROOTPATH,prefix:jo,default:KSe,validate:o(async s=>Gs(s)?Gs(s):await qs.pathExists(eo.join(s,"system","hdb_user.mdb"))?`'${s}' is already in use. Please enter a different path.`:!0,"validate"),message:Xr(Jr.DESTINATION)},{type:"input",transformer:tu,when:Qo(e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Jr.HDB_USERNAME),name:pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:jo,default:YSe,validate:o(s=>Gs(s)?Gs(s):(t=s,!0),"validate"),message:Xr(Jr.HDB_USERNAME)},{type:"password",when:Qo(e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Jr.HDB_PASS),name:pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:jo,validate:o(s=>Gs(s)?Gs(s):!0,"validate"),message:Xr(Jr.HDB_PASS)},{type:"input",transformer:tu,when:Qo(e[pe.INSTALL_PROMPTS.DEFAULTS_MODE],Jr.DEFAULTS_MODE),name:pe.INSTALL_PROMPTS.DEFAULTS_MODE,prefix:jo,default:zSe,validate:o(s=>Gs(s)?Gs(s):s!=="dev"&&s!=="prod"?`Invalid response '${s}', options are 'dev' or 'prod'.`:!0,"validate"),message:Xr(Jr.DEFAULTS_MODE)}];if(xj||r.push({type:"input",name:pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME,transformer:tu,when:Qo(e[pe.INSTALL_PROMPTS.REPLICATION_HOSTNAME],Jr.REPLICATION_HOSTNAME),prefix:jo,default:jSe,message:Xr(Jr.REPLICATION_HOSTNAME)}),Vp.autoCastBoolean(e[pe.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let s=[{type:"input",transformer:tu,when:Qo(e[pe.INSTALL_PROMPTS.CLUSTERING_NODENAME],Jr.NODE_NAME),name:pe.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:jo,default:OSe.random(),validate:o(i=>$Se.test(i)?!0:"Invalid node name, must not contain ., * or >","validate"),message:Xr(Jr.NODE_NAME)},{type:"input",transformer:tu,when:Qo(e[pe.INSTALL_PROMPTS.CLUSTERING_USER],Jr.CLUSTER_USERNAME),name:pe.INSTALL_PROMPTS.CLUSTERING_USER,prefix:jo,default:WSe,validate:o(i=>Gs(i)?Gs(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,"validate"),message:Xr(Jr.CLUSTER_USERNAME)},{type:"password",when:Qo(e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Jr.CLUSTER_PASS),name:pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:jo,validate:o(i=>Gs(i)?Gs(i):!0,"validate"),message:Xr(Jr.CLUSTER_PASS)}];r.push(...s)}let n=await Dj.prompt(r);if(Object.keys(n).length===0)return e;for(let s in n)e[s]===void 0&&(e[s]=n[s]);return e}o(JSe,"installPrompts");function Qo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Xr(t)} ${ru.gray("[hidden]")}`),Er.trace(`${Xr(t)} [hidden]`)):(console.log(`${Xr(t)} ${e}`),Er.trace(`${Xr(t)} ${e}`)),!1):!0}o(Qo,"displayCmdEnvVar");function Gs(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}o(Gs,"checkForEmptyValue");function XSe(){let e=Object.keys(pe.INSTALL_PROMPTS),t=mR(e),r=mR(Object.keys(pe.CONFIG_PARAM_MAP),!0),n={};for(let s of e){let i=pe.CONFIG_PARAM_MAP[s.toLowerCase()];t[s]?i===void 0?n[s]=t[s]:n[i.toUpperCase()]=t[s]:i!==void 0&&r[i.toLowerCase()]&&(n[s]=r[i.toLowerCase()])}return n}o(XSe,"checkForPromptOverride");async function ZSe(){Er.trace("Checking for existing install.");let e=Vp.getPropsFilePath(),t=await qs.pathExists(e),r;if(t){Er.trace(`Install found an existing boot prop file at:${e}`);let n=wSe(e),s=zP.getConfigValue(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||n.get(pe.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await qs.pathExists(s)}if(!t&&Vp.noBootFile()&&(r=!0),r&&!jP){if(Er.trace(`Install found existing HDB config at:${e}`),await Mj.getVersionUpdateInfo()){let s=`Please use \`harperdb upgrade\` to update to ${vj.version}. Exiting install...`;console.log(uc+ru.magenta.bold(GSe)),console.log(ru.magenta.bold(s)),Er.error(s)}else console.log(uc+ru.magenta.bold(YP)),Er.error(YP);process.exit(0)}}o(ZSe,"checkForExistingInstall");async function eTe(e){Er.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${HSe}${uc}and can be viewed by typing or copying and pasting the URL into your web browser.${uc}I agree to the HarperDB Terms and Conditions: (yes/no)`,r={prefix:jo,transformer:tu,when:Qo(e[pe.INSTALL_PROMPTS.TC_AGREEMENT],t),name:pe.INSTALL_PROMPTS.TC_AGREEMENT,message:Xr(t),validate:o(s=>s.toLowerCase()==="yes"||s.toLowerCase()==="no"?!0:ru.yellow("Please enter 'yes' or 'no'"),"validate")},n=await Dj.prompt([r]);n[pe.INSTALL_PROMPTS.TC_AGREEMENT]&&n[pe.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==kSe&&(console.log(ru.yellow(Lj)),Er.error(Lj),process.exit(0))}o(eTe,"termsAgreement");async function tTe(){let e=eo.join(Zi,pe.HDB_CONFIG_FILE),t;try{t=WP.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}
105
+ install_user = ${t}`,n=Vp.getHomeDir(),s=eo.join(n,pe.HDB_HOME_DIR_NAME),i=eo.join(s,pe.LICENSE_KEY_DIR_NAME);try{qs.mkdirpSync(s,{mode:pe.HDB_FILE_PERMISSIONS}),qs.mkdirpSync(i,{mode:pe.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${pe.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let a=eo.join(s,pe.BOOT_PROPS_FILE_NAME);try{await qs.writeFile(a,r)}catch(c){throw Er.error(`There was an error creating the boot file at path: ${a}`),c}lc.setProperty(pe.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),lc.setProperty(pe.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),lc.setProperty(lc.BOOT_PROPS_FILE_PATH,a)}}o(tTe,"createBootPropertiesFile");async function rTe(e){Er.trace("Creating HarperDB config file");let t=mR(Object.keys(pe.CONFIG_PARAM_MAP),!0);if(Object.assign(t,e),e[pe.INSTALL_PROMPTS.DEFAULTS_MODE]==="dev"){process.env.DEV_MODE="true";for(let r in fR){if(r===Bt.HTTP_PORT&&t[Bt.HTTP_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??fR[r],t[Bt.HTTP_SECUREPORT]=null;continue}else if(r===Bt.HTTP_PORT)continue;if(r===Bt.OPERATIONSAPI_NETWORK_PORT&&t[Bt.OPERATIONSAPI_NETWORK_SECUREPORT.toLowerCase()]===void 0){t[r]=t[r.toLowerCase()]??fR[r],t[Bt.OPERATIONSAPI_NETWORK_SECUREPORT]=null;continue}else if(r===Bt.OPERATIONSAPI_NETWORK_PORT)continue;t[r.toLowerCase()]===void 0&&(t[r]=fR[r])}}else t[Bt.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]&&(t[Bt.OPERATIONSAPI_NETWORK_SECUREPORT]=null),t[Bt.HTTP_PORT.toLowerCase()]&&(t[Bt.HTTP_SECUREPORT]=null);try{dc[pe.INSTALL_PROMPTS.HDB_CONFIG]||zP.createConfigFile(t),lc.initSync()}catch(r){nTe(r)}}o(rTe,"createConfigFile");function nTe(e){Er.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(qSe);let t=eo.resolve(lc.get(lc.BOOT_PROPS_FILE_PATH),"../");t&&qs.removeSync(t),Zi&&(Uj?qs.readdirSync(Zi,{withFileTypes:!0}).forEach(n=>{let s=eo.join(n.path,n.name);s!==dc[pe.INSTALL_PROMPTS.HDB_CONFIG]&&qs.removeSync(s)}):qs.removeSync(Zi)),process.exit(1)}o(nTe,"rollbackInstall");async function Fj(e,t){Er.trace("Creating admin user"),await FSe();let r;try{r=await vSe.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 MSe.addUser(t)}catch(n){throw n.message=`Error creating user - ${n}`,n}}o(Fj,"createAdminUser");async function Hj(e){Er.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Fj(t,r),delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[pe.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}o(Hj,"createSuperUser");async function sTe(e){Er.trace("Creating Cluster user.");let t;e[pe.INSTALL_PROMPTS.CLUSTERING_USER]&&e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[pe.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Fj({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[pe.INSTALL_PROMPTS.CLUSTERING_USER],delete e[pe.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}o(sTe,"createClusterUser");async function iTe(){let e=vj.version;if(e)await Mj.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}o(iTe,"insertHdbVersionInfo");function oTe(e){dc[pe.INSTALL_PROMPTS.HDB_CONFIG]=e}o(oTe,"updateConfigEnv");function aTe(e){jP=e}o(aTe,"setIgnoreExisting")});var Vj=M((sBe,$j)=>{"use strict";var QP=ie(),us=z(),qj=FP();$j.exports={processDirectives:cTe};async function cTe(e){console.log("Starting upgrade process...");let t=qj.getVersionsForUpgrade(e),r=dTe(t),n=[],s=r.length;for(let i=0;i<s;i++){let a=r[i],c=`Running upgrade for version ${a.version}`;us.notify(c),console.log(c);let l=[],u=[];try{l=lTe(a.sync_functions)}catch(d){throw us.error(`Error while running an upgrade script for ${a.version}`),d}try{u=await uTe(a.async_functions)}catch(d){throw us.error(`Error while running an upgrade script for ${a.version}`),d}n.push(...l,...u)}return n}o(cTe,"processDirectives");function lTe(e){if(QP.isEmptyOrZeroLength(e))return us.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return us.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(us.info(`Running function ${r.name}`),!(r instanceof Function)){us.info("Variable being processed is not a function");continue}let n=r();us.info(n),t.push(n)}return t}o(lTe,"runSyncFunctions");async function uTe(e){if(QP.isEmptyOrZeroLength(e))return us.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return us.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let n=0;n<r;n++){let s=e[n];if(us.info(`Running function ${s.name}`),!(s instanceof Function)){us.info("Variable being processed is not a function");continue}let i=await s();us.info(i),t.push(i)}return t}o(uTe,"runAsyncFunctions");function dTe(e){if(QP.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let n=qj.getDirectiveByVersion(r);n&&t.push(n)}return t}o(dTe,"getUpgradeDirectivesToInstall")});var JP=M((oBe,Kj)=>{"use strict";var fTe=require("util"),mTe=require("path"),hTe=require("child_process"),pTe=fTe.promisify(hTe.execFile),ETe=1e3*1e3*10;Kj.exports={findPs:_Te};async function _Te(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await pTe("ps",["wwxo",`pid,${r}`],{maxBuffer:ETe});for(let s of n.trim().split(`
106
+ `).slice(1)){s=s.trim();let[i]=s.split(" ",1),a=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:mTe.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}o(_Te,"findPs")});var Xj=M((cBe,Jj)=>{"use strict";var hR=ce();hR.initSync();var jj=require("chalk"),Yj=require("fs-extra"),Xo=z(),Jo=(k(),v(K)),gTe=Vj(),XP=ie(),Qj=uR(),STe=rR(),Wj=JP(),TTe=ei(),{packageJson:zj}=Rt(),RTe=require("util").promisify,yTe=RTe(TTe.setSchemaDataToGlobal),ZP,{UPGRADE_VERSION:eL}=Jo.UPGRADE_JSON_FIELD_NAMES_ENUM;Jj.exports={upgrade:ATe};async function ATe(e){await yTe(),ZP===void 0&&(ZP=Yd()),Yj.existsSync(hR.get(hR.BOOT_PROPS_FILE_PATH))||(Kp("The hdb_boot_properties file was not found. Please install HDB.",Jo.LOG_LEVELS.ERROR),process.exit(1)),Yj.existsSync(hR.get(Jo.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Kp("The hdb settings file was not found. Please make sure HDB is installed.",Jo.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Qj.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Kp(`This version of HarperDB is ${zj.version}`,Jo.LOG_LEVELS.INFO);let r=t[eL]??zj.version;r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Jo.HDB_SUPPORT_ADDRESS}`),Xo.notify("Missing new version field from upgrade info object"),process.exit(1)),await bTe();let n,s=0;try{n=await STe.forceUpdatePrompt(t)}catch(i){Xo.error("There was an error when prompting user about upgrade."),Xo.error(i),n=!1,s=1}n||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(s)),Xo.info(`Starting upgrade to version ${r}`),await ITe(t),Kp(`HarperDB was successfully upgraded to version ${t[eL]}`,Jo.LOG_LEVELS.INFO)}o(ATe,"upgrade");async function bTe(){let e=!1,t=await Wj.findPs(Jo.HDB_PROC_NAME);if(XP.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Wj.findPs("hdb_express");XP.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await ZP.list();XP.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(jj.red(r)),Xo.error(r),process.exit(1)}}o(bTe,"checkIfRunning");async function ITe(e){try{await gTe.processDirectives(e)}catch(t){throw Kp("There was an error during the data upgrade. Please check the logs.",Jo.LOG_LEVELS.ERROR),t}try{await Qj.insertHdbUpgradeInfo(e[eL])}catch(t){Xo.error("Error updating the 'hdb_info' system table."),Xo.error(t)}}o(ITe,"runUpgrade");function Kp(e,t=void 0){t||(t=Xo.info),Xo[t](e),console.log(jj.magenta(e))}o(Kp,"printToLogAndConsole")});var i2=M(Yp=>{"use strict";var Re=ce();Re.initSync();Kd();var rr=(k(),v(K)),{CONFIG_PARAMS:De}=rr,ds=z(),Zo=require("fs-extra"),ea=require("path"),NTe=OP(),{install:wTe}=Gj(),tL=require("chalk"),{packageJson:OTe,PACKAGE_ROOT:CTe}=Rt(),ta=ie(),rL=yt(),e2=Lc(),Zj=rT(),PTe=Xj(),{compactOnStart:LTe}=(VO(),v($O)),DTe=require("minimist"),MTe=rs(),{startHTTPThreads:vTe}=(nL(),v(o2)),UTe=uR(),{isMainThread:xTe}=require("worker_threads"),uBe=Ro(),dBe=Pa(),fBe=Kb(),mBe=Um(),pR=(k(),v(K)),to,df,t2=!1,BTe="Upgrade complete. Starting HarperDB.",FTe="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",HTe="HarperDB not found, starting install process.",kTe="There was an error during install, check install_log.log for more details. Exiting.",GTe="HarperDB successfully started.";function qTe(){if(!t2){let e=o(()=>{Zo.removeSync(ea.join(Re.get(rr.CONFIG_PARAMS.ROOTPATH),rr.HDB_PID_FILE)),process.exit(0)},"removeHdbPid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}}o(qTe,"addExitListeners");async function r2(e=!1,t=!1){if(console.log(tL.magenta("Starting HarperDB...")),ds.suppressLogging?.(()=>{console.log(tL.magenta(""+Zo.readFileSync(ea.join(CTe,"utility/install/ascii_logo.txt"))))}),await s2()===!1){console.log(HTe);try{await wTe()}catch(l){console.error(kTe,l),ds.error(l),process.exit(1)}}if(!e){let l=e2(Object.keys(rr.CONFIG_PARAM_MAP),!0);!ta.isEmpty(l)&&!ta.isEmptyOrZeroLength(Object.keys(l))&&rL.updateConfigValue(void 0,void 0,l,!0,!0)}let r,n=df?.service==="clustering";df?.service&&!n&&(console.error("Unrecognized service argument"),process.exit(1));let s=ea.join(Re.get(rr.CONFIG_PARAMS.ROOTPATH),rr.HDB_PID_FILE),i=WTe(s);i&&i!==1&&zTe(i)&&(n?r=!0:(console.error(`Error: HarperDB is already running (pid: ${i})`),process.exit(4))),to===void 0&&(to=Yd()),n&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Re.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await Zj.generateNatsConfig(),await to.startClusteringProcesses(!0),process.exit()),qTe(),await Zo.writeFile(ea.join(Re.get(pR.CONFIG_PARAMS.ROOTPATH),pR.HDB_PID_FILE),`${process.pid}`),ds.info("HarperDB PID",process.pid);let a;try{let l=await UTe.getVersionUpdateInfo();l!==void 0&&(a=l[rr.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await PTe.upgrade(l),console.log(BTe))}catch(l){a?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${a}. Exiting HarperDB.`,l),ds.error(l)):(console.error(FTe,l),ds.error(l)),process.exit(1)}NTe(),KTe(),await MTe.reviewSelfSignedCert(),ta.autoCastBoolean(Re.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&xTe&&await Zj.generateNatsConfig(t)}o(r2,"initialize");async function $Te(e=!1){try{df=DTe(process.argv),df.ROOTPATH&&rL.updateConfigObject("settings_path",ea.join(df.ROOTPATH,rr.HDB_CONFIG_FILE)),await r2(e,!0),Re.get(rr.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await LTe();let t=process.env.IS_SCRIPTED_SERVICE&&!df.service;ta.autoCastBoolean(Re.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await to.startClusteringProcesses(),await to.startClusteringThreads()),await vTe(process.env.DEV_MODE?1:Re.get(pR.CONFIG_PARAMS.THREADS_COUNT)??Re.get(pR.CONFIG_PARAMS.THREADS)),t||n2()}catch(t){console.error(t),ds.error(t),process.exit(1)}}o($Te,"main");function n2(){ds.suppressLogging(()=>{console.log(tL.magenta(`HarperDB ${OTe.version} successfully started`))}),ds.notify(GTe)}o(n2,"started");async function VTe(e=!0){t2=!e;try{to===void 0&&(to=Yd()),to.enterPM2Mode(),await r2(),ta.autoCastBoolean(Re.get(rr.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await to.startClusteringProcesses(),await to.startService(rr.PROCESS_DESCRIPTORS.HDB),n2(),e&&process.exit(0)}catch(t){console.error(t),ds.error(t),process.exit(1)}}o(VTe,"launch");function KTe(){let e=ea.join(Re.get(rr.CONFIG_PARAMS.ROOTPATH),rr.LICENSE_KEY_DIR_NAME,rr.LICENSE_FILE_NAME),t=ea.join(e,rr.LICENSE_FILE_NAME),r=ea.join(e,rr.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:n,HARPERDB_LICENSE:s}=e2(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ta.isEmpty(n)||ta.isEmpty(s))return;Zo.mkdirpSync(e),Zo.writeFileSync(r,n),Zo.writeFileSync(t,s)}catch(n){let s=`Failed to write license & fingerprint due to: ${n.message}`;console.error(s),ds.error(s)}}o(KTe,"writeLicenseFromVars");Yp.launch=VTe;Yp.main=$Te;Yp.isHdbInstalled=s2;Yp.startupLog=YTe;async function s2(){try{await Zo.stat(ta.getPropsFilePath()),await Zo.stat(Re.get(rr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ta.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw ds.error(`Error checking for HDB install - ${e}`),e}return!0}o(s2,"isHdbInstalled");function YTe(e){let r=o(h=>h.padEnd(20),"pad"),n=`
107
107
  `;Re.get(De.REPLICATION_HOSTNAME)&&(n+=`${r("Hostname:")}${Re.get(De.REPLICATION_HOSTNAME)}
108
108
  `),Re.get(De.REPLICATION_URL)&&(n+=`${r("Replication Url:")}${Re.get(De.REPLICATION_URL)}
109
109
  `),n+=`${r("Worker Threads:")}${Re.get(De.THREADS_COUNT)}
110
110
  `,n+=`${r("Root Path:")}${Re.get(De.ROOTPATH)}
111
111
  `,Re.get(De.THREADS_DEBUG)!==!1&&(n+=`${r("Debugging:")}enabled: true`,n+=Re.get(De.THREADS_DEBUG_PORT)?`, TCP: ${Re.get(De.THREADS_DEBUG_PORT)}
112
112
  `:`
113
- `);let s=Zo.join(Re.get(De.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${Re.get(De.LOGGING_LEVEL)}, location: ${s+(Re.get(De.LOGGING_STDSTREAMS)?", stdout/err":"")}
113
+ `);let s=ea.join(Re.get(De.LOGGING_ROOT),"hdb.log");n+=`${r("Logging:")}level: ${Re.get(De.LOGGING_LEVEL)}, location: ${s+(Re.get(De.LOGGING_STDSTREAMS)?", stdout/err":"")}
114
114
  `,n+=r("Default:"),n+=Re.get(De.HTTP_PORT)?`HTTP (and WS): ${Re.get(De.HTTP_PORT)}, `:"",n+=Re.get(De.HTTP_SECUREPORT)?`HTTPS (and WS): ${Re.get(De.HTTP_SECUREPORT)}, `:"",n+=`CORS: ${Re.get(De.HTTP_CORS)?`enabled for ${Re.get(De.HTTP_CORSACCESSLIST)}`:"disabled"}
115
115
  `,n+=r("Operations API:"),n+=Re.get(De.OPERATIONSAPI_NETWORK_PORT)?`HTTP: ${Re.get(De.OPERATIONSAPI_NETWORK_PORT)}, `:"",n+=Re.get(De.OPERATIONSAPI_NETWORK_SECUREPORT)?`HTTPS: ${Re.get(De.OPERATIONSAPI_NETWORK_SECUREPORT)}, `:"",n+=`CORS: ${Re.get(De.OPERATIONSAPI_NETWORK_CORS)?`enabled for ${Re.get(De.OPERATIONSAPI_NETWORK_CORSACCESSLIST)}`:"disabled"}`,n+=`, unix socket: ${Re.get(De.OPERATIONSAPI_NETWORK_DOMAINSOCKET)}
116
116
  `,n+=r("MQTT:"),n+=Re.get(De.MQTT_NETWORK_PORT)?`TCP: ${Re.get(De.MQTT_NETWORK_PORT)}, `:"",n+=Re.get(De.MQTT_NETWORK_SECUREPORT)?`TLS: ${Re.get(De.MQTT_NETWORK_SECUREPORT)}`:"",n+=Re.get(De.MQTT_WEBSOCKET)&&Re.get(De.HTTP_PORT)?`, WS: ${Re.get(De.HTTP_PORT)}`:"",n+=Re.get(De.MQTT_WEBSOCKET)&&Re.get(De.HTTP_SECUREPORT)?`, WSS: ${Re.get(De.HTTP_SECUREPORT)}
117
117
  `:`
118
118
  `;let i=Re.get(De.REPLICATION_PORT)??Re.get(De.OPERATIONSAPI_NETWORK_PORT),a=Re.get(De.REPLICATION_SECUREPORT)??Re.get(De.OPERATIONSAPI_NETWORK_SECUREPORT),c=r("Replication:");c+=i?`WS: ${i}, `:"",c+=a?`WSS: ${a} `:"",n+=`${c.slice(0,-2)}
119
- `;let l=[],u=tL.getConfigObj();for(let h in u)u[h].package&&l.push(h);let d={},f=`${r("REST:")}`;for(let[h,p]of e)for(let _ of p){let g=_.name;g==="rest"&&(f+=`${_.protocol_name}: ${h}, `),l.includes(g)&&(d[g]?d[g]+=`${_.protocol_name}: ${h}, `:d[g]=`${_.protocol_name}: ${h}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
119
+ `;let l=[],u=rL.getConfigObj();for(let h in u)u[h].package&&l.push(h);let d={},f=`${r("REST:")}`;for(let[h,p]of e)for(let _ of p){let g=_.name;g==="rest"&&(f+=`${_.protocol_name}: ${h}, `),l.includes(g)&&(d[g]?d[g]+=`${_.protocol_name}: ${h}, `:d[g]=`${_.protocol_name}: ${h}, `)}f.length>21&&(f=f.slice(0,-2),n+=`${f}
120
120
  `);let m=Re.get(De.HTTP_PORT)?`HTTP: ${Re.get(De.HTTP_PORT)}, `:"";m+=Re.get(De.HTTP_SECUREPORT)?`HTTPS: ${Re.get(De.HTTP_SECUREPORT)}, `:"",m.length>21&&(m=m.slice(0,-2));for(let h of l)d[h]?n+=`${r(h+": ")}${d[h].slice(0,-2)}
121
121
  `:n+=`${r(h+": ")}${m}
122
- `;console.log(n),Re.get(De.LOGGING_STDSTREAMS)&&ds.logsAtLevel("info")&&ds.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}o(GTe,"startupLog");function qTe(e){try{return Number.parseInt(Xo.readFileSync(e,"utf8"),10)}catch{return null}}o(qTe,"readPidFile");function $Te(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o($Te,"isProcessRunning")});var n2={};Ce(n2,{SERVERS:()=>ff,portServer:()=>nL,setPortServerMap:()=>pR});function pR(e,t){let r=nL.get(e)??[];nL.set(e,[...r,t])}var ff,nL,sL=fe(()=>{ff={},nL=new Map;o(pR,"setPortServerMap")});var RR={};Ce(RR,{deliverSocket:()=>E2,getHttpOptions:()=>WTe,getRequestId:()=>T2,handleComponent:()=>YTe,httpServer:()=>fL,logRequest:()=>jp,proxyRequest:()=>zTe,registerServer:()=>uL,suppressHandleComponentWarning:()=>KTe});function YTe(e){Qp=e.options.getAll(),e.options.on("change",t=>{Qp=e.options.getAll()})}function WTe(){return Qp}function E2(e,t,r){let n=e?.read?e:new c2.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=ff[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=ff[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ta.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function zTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=s2.get(s),r){case"connection":i=E2(void 0,t),s2.set(s,i),i.write=(c,l,u)=>(_R.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(_R.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),_R.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 uL(e,t,r=!0){t||(t=Br.default.get(U.HTTP_PORT));let n=ff[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",a2),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else ff[t]=e;e.on("unhandled",a2)}function dL(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=[],Br.default.get(U.HTTP_PORT)!=null&&t.push({port:Br.default.get(U.HTTP_PORT),secure:Br.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Br.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Br.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Br.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,l2.resolvePath)(Br.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function fL(e,t){let r=[];for(let{port:n,secure:s}of dL(t))r.push(_2(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?cL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,uL(e,n,!1)),gR[n]=SR(cL,n);return r}function _2(e,t,r,n){if(pR(e,{protocol_name:t?"HTTPS":"HTTP",name:yR()}),!ER[e]){let s=r?"operationsApi_network":"http",i=Br.default.get(s+"_keepAliveTimeout"),a=Br.default.get(s+"_timeout"),c=Br.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Br.default.get(U.HTTP_MAXHEADERSIZE)},u=Br.default.get(s+"_mtls"),d=Br.default.get(s+"_mtls_required"),f;if(t){let p=Br.default.get("tls");f=Br.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,u2.getTicketKeys)(),SNICallback:(0,d2.createTLSSelector)(r?"operations-api":"server",u),ciphers:p.ciphers??p[0]?.ciphers})}let m=(0,f2.checkMemoryLimit)(),h=ER[e]=(t?f?m2.createSecureServer:h2.createServer:TR.createServer)(l,async(p,_)=>{let g=performance.now(),y=0;try{let R=new xa(p,_);r&&(R.isOperationsServer=!0),Qp.logging?.id&&(R.requestId=y=T2());let I=await gR[e](R);if(!I){if(R._nodeResponse.statusCode){jp(p,R._nodeResponse.statusCode,y,performance.now()-g);return}I=g2(R)}if(I.headers?.set||(I.headers=new Ns(I.headers)),m?I.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):I.headers?.set?.("Server","HarperDB"),I.status===-1){for(let re of I.headers||[])_.setHeader(re[0],re[1]);return p.baseRequest=R,_.baseResponse=I,ER[e].emit("unhandled",p,_)}let P=I.status||200,Y=performance.now(),te=Y-g,x=I.body,$,j=!1;if(!I.handlesHeaders){let re=I.headers||new Ns;x?x.length>=0?(typeof x=="string"?re.set("Content-Length",Buffer.byteLength(x)):re.set("Content-Length",x.length),$=!0):x instanceof Ss&&(x.size?re.set("Content-Length",x.size):x.on&&(j=!0,x.on("size",_e=>{_.headersSent||_.setHeader("Content-Length",_e)})),x=x.stream()):(re.set("Content-Length","0"),$=!0);let se=`hdb;dur=${te.toFixed(2)}`;if(I.wasCacheMiss&&(se+=", miss"),rh(re,"Server-Timing",se,!0),!_.headersSent)if(j){if(_.statusCode=P,re)if(re[Symbol.iterator])for(let[_e,Ne]of re)_.setHeader(_e,Ne);else for(let _e in re)_.setHeader(_e,re[_e])}else _.writeHead(P,re&&(re[Symbol.iterator]?Array.from(re):re));$&&_.end(x)}let V=R.handlerPath,le=R.method;if(gt(te,"duration",V,le,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),Kr(P<400,"success",V,le),Kr(1,"response_"+P,V,le),jp(p,P,y,te),!$)if(x instanceof ReadableStream&&(x=aL.Readable.fromWeb(x)),(x[Symbol.iterator]||x[Symbol.asyncIterator])&&(x=aL.Readable.from(x)),x?.pipe){x.pipe(_),x.destroy&&_.on("close",()=>{x.destroy()});let re=0;x.on("data",se=>{re+=se.length}),x.on("end",()=>{gt(performance.now()-Y,"transfer",V,le),gt(re,"bytes-sent",V,le)})}else x?.then?x.then(re=>{_.end(re)},T):_.end(x)}catch(R){T(R)}function T(R){let I=R.headers,P=R.statusCode||500;_.writeHead(P,I&&(I[Symbol.iterator]?Array.from(I):I)),_.end(VTe(R)),jp(p,P,y,performance.now()-g),R.statusCode?R.statusCode===500?ta.default.warn(R):ta.default.info(R):ta.default.error(R)}o(T,"onError")});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",p=>{p._parent.startTime&&gt(performance.now()-p._parent.startTime,"tls-handshake",e),gt(p.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),uL(h,e)}return ER[e]}function SR(e,t){let r=g2;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function g2(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Ns}}function jTe(e,t){fL(e,{requestOnly:!0,...t})}function S2(e,t){for(let{port:r}of dL(t))i2[t?.runFirst?"unshift":"push"]({listener:e,port:r}),lL[r]=SR(i2,r)}function QTe(e,t){let r=[];for(let{port:n,secure:s}of dL(t)){pR(n,{protocol_name:s?"WSS":"WS",name:yR()});let i=_2(n,s,t?.isOperationsServer,t?.mtls);Wp[n]||(Wp[n]=new p2.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Wp[n].on("connection",(a,c)=>{try{let l=new xa(c);l.isWebSocket=!0;let u=gR[n](l);ta.default.debug("Received WS connection, calling listeners",iL),o2[n](a,l,u)}catch(l){ta.default.warn("Error in handling WS connection",l)}}),S2((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):Wp[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),Wp[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{lL[n]&&lL[n](a,c,l)})),r.push(i),iL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),o2[n]=SR(iL,n),gR[n]=SR(cL,n)}return r}function a2(e,t){t.writeHead(404),t.end(`Not found
123
- `),jp(e,404,0,e.requestId)}function jp(e,t,r,n){let s=Qp.logging;if(s){oL||(oL=ta.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";oL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+JTe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function JTe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function T2(){return zp||(zp=new BigInt64Array([1n]),zp=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",zp.buffer))),Number(Atomics.add(zp,0,1n))}var c2,ta,_R,Br,l2,u2,d2,f2,m2,h2,TR,aL,p2,VTe,Wp,ER,gR,cL,Qp,KTe,s2,i2,lL,iL,o2,oL,zp,mL=fe(()=>{c2=require("node:net"),ta=w(z()),_R=require("node:worker_threads"),Br=w(ce());k();l2=w(yt()),u2=w(st()),d2=w(rs()),f2=w(kd()),m2=require("node:http2"),h2=require("node:https"),TR=require("node:http");Eh();nh();Ts();Hi();aL=require("node:stream");Pr();sL();Qd();p2=require("ws"),{errorToString:VTe}=ta.default;ve.http=fL;ve.request=jTe;ve.ws=QTe;ve.upgrade=S2;Wp={},ER={},gR={},cL=[],Qp={},KTe=!0;o(YTe,"handleComponent");o(WTe,"getHttpOptions");o(E2,"deliverSocket");s2=new Map;o(zTe,"proxyRequest");o(uL,"registerServer");o(dL,"getPorts");o(fL,"httpServer");o(_2,"getHTTPServer");o(SR,"makeCallbackChain");o(g2,"unhandled");o(jTe,"onRequest");Object.defineProperty(TR.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){}});i2=[],lL={};o(S2,"onUpgrade");iL=[],o2={};o(QTe,"onWebSocket");o(a2,"defaultNotFound");o(jp,"logRequest");o(JTe,"headersToString");o(T2,"getRequestId")});var pL=M(Xp=>{"use strict";Wy();var{isMainThread:hL,parentPort:R2,threadId:AR,workerData:XTe}=require("node:worker_threads"),{createServer:ZTe}=require("node:net"),{unlinkSync:A2,existsSync:eRe}=require("fs"),b2;Xp.whenComponentsLoaded=new Promise(e=>{b2=e});var Ri=z(),$s=ce(),fs=(k(),v(K)),{server:tRe}=(Pr(),v(Bf)),{createServer:rRe}=require("node:tls"),{restartNumber:nRe,getWorkerIndex:mf}=st(),{createReuseportFd:Jp}=(Eh(),v(Kk)),{createTLSSelector:sRe}=rs(),{resolvePath:iRe}=yt(),{startupLog:oRe}=t2(),{SERVERS:hf,setPortServerMap:y2,portServer:aRe}=(sL(),v(n2)),cRe=(mL(),v(RR)),lRe=Ws(),I2=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG),uRe=$s.get(fs.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);tRe.socket=dRe;if(I2){let e;if(hL)e=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ri.info("Could not close debugger",t)}});else{let t=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&mf()>=0&&(e=t+mf())}if(e){let t=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ri.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&hL)try{require("inspector").open(9229)}catch(e){nRe<=1&&Ri.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"&&Ri.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:TBe,CONFIG_PARAMS:RBe}=fs;$s.initSync();Xp.globals=lRe;Xp.listenOnPorts=w2;Xp.startServers=N2;function N2(){let e=$s.get(fs.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=bR().loadRootComponents(!0).then(()=>{R2?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)cRe.proxyRequest(n);else if(n.type===fs.ITC_EVENT_TYPES.SHUTDOWN){Ri.trace("received shutdown request",AR);for(let c in hf){let l=hf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(p=>p.description.includes("connections")),m=0,h=setInterval(()=>{m++;let p=m>=100,_=l[f][p?"all":"idle"]();if(_.length===0){p&&clearInterval(h);return}m===1?Ri.info(`Closing ${_.length} idle connections`):p&&Ri.warn(`Forcefully closing ${_.length} active connections`);for(let g=0,y=_.length;g<y;g++){let T=_[g].socket;T._httpMessage&&!T._httpMessage.finished&&!p||(p?T.destroySoon():T.end(`HTTP/1.1 408 Request Timeout\r
122
+ `;console.log(n),Re.get(De.LOGGING_STDSTREAMS)&&ds.logsAtLevel("info")&&ds.suppressLogging(()=>{console.log(`Note that log messages are being sent to the console (stdout and stderr) in addition to the log file ${s}. This can be disabled by setting logging.stdStreams to false, and the log file can be directly monitored/tailed.`)})}o(YTe,"startupLog");function WTe(e){try{return Number.parseInt(Zo.readFileSync(e,"utf8"),10)}catch{return null}}o(WTe,"readPidFile");function zTe(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}o(zTe,"isProcessRunning")});var a2={};Ce(a2,{SERVERS:()=>ff,portServer:()=>sL,setPortServerMap:()=>ER});function ER(e,t){let r=sL.get(e)??[];sL.set(e,[...r,t])}var ff,sL,iL=fe(()=>{ff={},sL=new Map;o(ER,"setPortServerMap")});var yR={};Ce(yR,{deliverSocket:()=>T2,getHttpOptions:()=>XTe,getRequestId:()=>b2,handleApplication:()=>JTe,httpServer:()=>mL,logRequest:()=>jp,proxyRequest:()=>ZTe,registerServer:()=>dL,suppressHandleApplicationWarning:()=>QTe});function JTe(e){Qp=e.options.getAll(),e.options.on("change",t=>{Qp=e.options.getAll()})}function XTe(){return Qp}function T2(e,t,r){let n=e?.read?e:new f2.Socket({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=ff[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=o(a=>{setTimeout(()=>{let c=ff[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):a<5?i(a+1):(ra.default.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}function ZTe(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=c2.get(s),r){case"connection":i=T2(void 0,t),c2.set(s,i),i.write=(c,l,u)=>(gR.parentPort.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),u&&u(),!0),i.end=(c,l,u)=>(gR.parentPort.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),u&&u(),!0);let a=i.destroy;i.destroy=()=>{a.call(i),gR.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 dL(e,t,r=!0){t||(t=Br.default.get(U.HTTP_PORT));let n=ff[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",d2),s.on("unhandled",(i,a)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,a)}),n.lastServer=e}else ff[t]=e;e.on("unhandled",d2)}function fL(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=[],Br.default.get(U.HTTP_PORT)!=null&&t.push({port:Br.default.get(U.HTTP_PORT),secure:Br.default.get(U.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Br.default.get(U.HTTP_SECUREPORT)!=null&&t.push({port:Br.default.get(U.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&Br.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:(0,m2.resolvePath)(Br.default.get(U.OPERATIONSAPI_NETWORK_DOMAINSOCKET)),secure:!1}),t}function mL(e,t){let r=[];for(let{port:n,secure:s}of fL(t))r.push(R2(n,s,t?.isOperationsServer,t?.mtls)),typeof e=="function"?lL[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||n}):(e.isSecure=s,dL(e,n,!1)),SR[n]=TR(lL,n);return r}function R2(e,t,r,n){if(ER(e,{protocol_name:t?"HTTPS":"HTTP",name:AR()}),!_R[e]){let s=r?"operationsApi_network":"http",i=Br.default.get(s+"_keepAliveTimeout"),a=Br.default.get(s+"_timeout"),c=Br.default.get(s+"_headersTimeout"),l={keepAliveTimeout:i,headersTimeout:c,requestTimeout:a,highWaterMark:128*1024,noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600,maxHeaderSize:Br.default.get(U.HTTP_MAXHEADERSIZE)},u=Br.default.get(s+"_mtls"),d=Br.default.get(s+"_mtls_required"),f;if(t){let p=Br.default.get("tls");f=Br.default.get(s+"_http2"),Object.assign(l,{allowHTTP1:!0,rejectUnauthorized:!!d,requestCert:!!(u||n),ticketKeys:(0,h2.getTicketKeys)(),SNICallback:(0,p2.createTLSSelector)(r?"operations-api":"server",u),ciphers:p.ciphers??p[0]?.ciphers})}let m=(0,E2.checkMemoryLimit)(),h=_R[e]=(t?f?_2.createSecureServer:g2.createServer:RR.createServer)(l,async(p,_)=>{let g=performance.now(),y=0;try{let R=new Ba(p,_);r&&(R.isOperationsServer=!0),Qp.logging?.id&&(R.requestId=y=b2());let I=await SR[e](R);if(!I){if(R._nodeResponse.statusCode){jp(p,R._nodeResponse.statusCode,y,performance.now()-g);return}I=y2(R)}if(I.headers?.set||(I.headers=new Ns(I.headers)),m?I.headers?.set?.("Server","Unlicensed HarperDB, this should only be used for educational and development purposes"):I.headers?.set?.("Server","HarperDB"),I.status===-1){for(let re of I.headers||[])_.setHeader(re[0],re[1]);return p.baseRequest=R,_.baseResponse=I,_R[e].emit("unhandled",p,_)}let P=I.status||200,Y=performance.now(),te=Y-g,x=I.body,$,j=!1;if(!I.handlesHeaders){let re=I.headers||new Ns;x?x.length>=0?(typeof x=="string"?re.set("Content-Length",Buffer.byteLength(x)):re.set("Content-Length",x.length),$=!0):x instanceof Ss&&(x.size?re.set("Content-Length",x.size):x.on&&(j=!0,x.on("size",_e=>{_.headersSent||_.setHeader("Content-Length",_e)})),x=x.stream()):(re.set("Content-Length","0"),$=!0);let se=`hdb;dur=${te.toFixed(2)}`;if(I.wasCacheMiss&&(se+=", miss"),rh(re,"Server-Timing",se,!0),!_.headersSent)if(j){if(_.statusCode=P,re)if(re[Symbol.iterator])for(let[_e,Ne]of re)_.setHeader(_e,Ne);else for(let _e in re)_.setHeader(_e,re[_e])}else _.writeHead(P,re&&(re[Symbol.iterator]?Array.from(re):re));$&&_.end(x)}let V=R.handlerPath,le=R.method;if(gt(te,"duration",V,le,I.wasCacheMiss==null?void 0:I.wasCacheMiss?"cache-miss":"cache-hit"),Kr(P<400,"success",V,le),Kr(1,"response_"+P,V,le),jp(p,P,y,te),!$)if(x instanceof ReadableStream&&(x=cL.Readable.fromWeb(x)),(x[Symbol.iterator]||x[Symbol.asyncIterator])&&(x=cL.Readable.from(x)),x?.pipe){x.pipe(_),x.destroy&&_.on("close",()=>{x.destroy()});let re=0;x.on("data",se=>{re+=se.length}),x.on("end",()=>{gt(performance.now()-Y,"transfer",V,le),gt(re,"bytes-sent",V,le)})}else x?.then?x.then(re=>{_.end(re)},T):_.end(x)}catch(R){T(R)}function T(R){let I=R.headers,P=R.statusCode||500;_.writeHead(P,I&&(I[Symbol.iterator]?Array.from(I):I)),_.end(jTe(R)),jp(p,P,y,performance.now()-g),R.statusCode?R.statusCode===500?ra.default.warn(R):ra.default.info(R):ra.default.error(R)}o(T,"onError")});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",p=>{p._parent.startTime&&gt(performance.now()-p._parent.startTime,"tls-handshake",e),gt(p.isSessionReused(),"tls-reused",e)}),h.isSecure=!0),dL(h,e)}return _R[e]}function TR(e,t){let r=y2;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let a=r;r=o((...c)=>s(...c,a),"nextCallback")}}return r}function y2(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new Ns}}function eRe(e,t){mL(e,{requestOnly:!0,...t})}function A2(e,t){for(let{port:r}of fL(t))l2[t?.runFirst?"unshift":"push"]({listener:e,port:r}),uL[r]=TR(l2,r)}function tRe(e,t){let r=[];for(let{port:n,secure:s}of fL(t)){ER(n,{protocol_name:s?"WSS":"WS",name:AR()});let i=R2(n,s,t?.isOperationsServer,t?.mtls);Wp[n]||(Wp[n]=new S2.WebSocketServer({noServer:!0,maxPayload:t.maxPayload??100*1024*1024}),Wp[n].on("connection",(a,c)=>{try{let l=new Ba(c);l.isWebSocket=!0;let u=SR[n](l);ra.default.debug("Received WS connection, calling listeners",oL),u2[n](a,l,u)}catch(l){ra.default.warn("Error in handling WS connection",l)}}),A2((a,c,l,u)=>a.__harperdbRequestUpgraded?u(a,c,l):Wp[n].handleUpgrade(a,c,l,d=>{a.__harperdbRequestUpgraded=!0,u(a,c,l),Wp[n].emit("connection",d,a)}),{port:n}),i.on("upgrade",(a,c,l)=>{uL[n]&&uL[n](a,c,l)})),r.push(i),oL[t?.runFirst?"unshift":"push"]({listener:e,port:n}),u2[n]=TR(oL,n),SR[n]=TR(lL,n)}return r}function d2(e,t){t.writeHead(404),t.end(`Not found
123
+ `),jp(e,404,0,e.requestId)}function jp(e,t,r,n){let s=Qp.logging;if(s){aL||(aL=ra.default.forComponent("http"));let i=t<400?"info":t===500?"error":"warn";aL[i]?.(`${e.method} ${e.url} ${e.socket.encrypted?"HTTPS":"HTTP"}/${e.httpVersion}${s.headers?" "+rRe(e.headers):""} ${t}${s.timing&&n?" "+n.toFixed(2)+"ms":""}${r?" id: "+r:""}`)}}function rRe(e){let t=[];for(let r in e)t.push(`${r}: ${e[r]}`);return t.join(", ")}function b2(){return zp||(zp=new BigInt64Array([1n]),zp=new BigInt64Array(databases.system.hdb_analytics.primaryStore.getUserSharedBuffer("next-request-id",zp.buffer))),Number(Atomics.add(zp,0,1n))}var f2,ra,gR,Br,m2,h2,p2,E2,_2,g2,RR,cL,S2,jTe,Wp,_R,SR,lL,Qp,QTe,c2,l2,uL,oL,u2,aL,zp,hL=fe(()=>{f2=require("node:net"),ra=w(z()),gR=require("node:worker_threads"),Br=w(ce());k();m2=w(yt()),h2=w(st()),p2=w(rs()),E2=w(kd()),_2=require("node:http2"),g2=require("node:https"),RR=require("node:http");Eh();nh();Ts();Hi();cL=require("node:stream");Pr();iL();Qd();S2=require("ws"),{errorToString:jTe}=ra.default;ve.http=mL;ve.request=eRe;ve.ws=tRe;ve.upgrade=A2;Wp={},_R={},SR={},lL=[],Qp={},QTe=!0;o(JTe,"handleApplication");o(XTe,"getHttpOptions");o(T2,"deliverSocket");c2=new Map;o(ZTe,"proxyRequest");o(dL,"registerServer");o(fL,"getPorts");o(mL,"httpServer");o(R2,"getHTTPServer");o(TR,"makeCallbackChain");o(y2,"unhandled");o(eRe,"onRequest");Object.defineProperty(RR.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){}});l2=[],uL={};o(A2,"onUpgrade");oL=[],u2={};o(tRe,"onWebSocket");o(d2,"defaultNotFound");o(jp,"logRequest");o(rRe,"headersToString");o(b2,"getRequestId")});var EL=M(Xp=>{"use strict";jy();var{isMainThread:pL,parentPort:I2,threadId:bR,workerData:nRe}=require("node:worker_threads"),{createServer:sRe}=require("node:net"),{unlinkSync:w2,existsSync:iRe}=require("fs"),O2;Xp.whenComponentsLoaded=new Promise(e=>{O2=e});var Ri=z(),$s=ce(),fs=(k(),v(K)),{server:oRe}=(Pr(),v(Bf)),{createServer:aRe}=require("node:tls"),{restartNumber:cRe,getWorkerIndex:mf}=st(),{createReuseportFd:Jp}=(Eh(),v(jk)),{createTLSSelector:lRe}=rs(),{resolvePath:uRe}=yt(),{startupLog:dRe}=i2(),{SERVERS:hf,setPortServerMap:N2,portServer:fRe}=(iL(),v(a2)),mRe=(hL(),v(yR)),hRe=Ws(),C2=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG),pRe=$s.get(fs.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);oRe.socket=ERe;if(C2){let e;if(pL)e=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Ri.info("Could not close debugger",t)}});else{let t=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&mf()>=0&&(e=t+mf())}if(e){let t=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=$s.get(fs.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Ri.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&pL)try{require("inspector").open(9229)}catch(e){cRe<=1&&Ri.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"&&Ri.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:IBe,CONFIG_PARAMS:NBe}=fs;$s.initSync();Xp.globals=hRe;Xp.listenOnPorts=L2;Xp.startServers=P2;function P2(){let e=$s.get(fs.CONFIG_PARAMS.ROOTPATH);if(e)try{process.chdir(e)}catch{}let t=IR().loadRootComponents(!0).then(()=>{I2?.on("message",n=>{let{port:s,fd:i,data:a}=n;if(i)deliverSocket(i,s,a);else if(n.requestId)mRe.proxyRequest(n);else if(n.type===fs.ITC_EVENT_TYPES.SHUTDOWN){Ri.trace("received shutdown request",bR);for(let c in hf){let l=hf[c],u;if(l.closeIdleConnections){let f=Object.getOwnPropertySymbols(l).find(p=>p.description.includes("connections")),m=0,h=setInterval(()=>{m++;let p=m>=100,_=l[f][p?"all":"idle"]();if(_.length===0){p&&clearInterval(h);return}m===1?Ri.info(`Closing ${_.length} idle connections`):p&&Ri.warn(`Forcefully closing ${_.length} active connections`);for(let g=0,y=_.length;g<y;g++){let T=_[g].socket;T._httpMessage&&!T._httpMessage.finished&&!p||(p?T.destroySoon():T.end(`HTTP/1.1 408 Request Timeout\r
124
124
  Connection: close\r
125
125
  \r
126
- `))}},25).unref()}l.close?.(()=>{if($s.get(fs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&mf()==0)try{A2(iRe($s.get(fs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,AR),l.cantCleanupProperly||Ri.warn("Had to forcefully exit the thread",AR),process.exit(0)},5e3).unref()})}if(I2||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Ri.info("Could not close debugger",c)}}}).ref();let r;Jp&&!uRe&&(r=w2()),Promise.resolve(r).then(()=>{if(mf()===0)try{oRe(aRe)}catch(n){console.error("Error displaying start-up log",n)}R2?.postMessage({type:fs.ITC_EVENT_TYPES.CHILD_STARTED})})});return b2(t),t}o(N2,"startServers");function w2(){let e=[];for(let t in hf){let r=hf[t];if(t.includes?.("/")&&mf()==0){eRe(t)&&A2(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Ri.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=$s.get(fs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=mf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?Jp?n={fd:Jp(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:Jp?n={fd:Jp(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Ri.trace("Listening on port "+t,AR)}).on("error",c)}))}return Promise.all(e)}o(w2,"listenOnPorts");!hL&&!XTe?.noServerStart&&N2();function dRe(e,t){let r=(Qd(),v(fp)).getComponentName,n;if(t.securePort){y2(t.securePort,{protocol_name:"TLS",name:r()});let s=sRe("server",t.mtls),i=$s.get("tls");n=rRe({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),hf[t.securePort]=n}return t.port&&(y2(t.port,{protocol_name:"TCP",name:r()}),n=ZTe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),hf[t.port]=n),n}o(dRe,"onSocket")});var r2={};Ce(r2,{startHTTPThreads:()=>mRe,startSocketServer:()=>TL,updateWorkerIdleness:()=>x2});async function mRe(e=2,t){jI().catch(r=>Sf.error?.("Error recording hostname for analytics:",r));try{if(t)gL(0,1,!0);else{let{loadRootComponents:r}=bR();if(e===0)return(0,Vs.setMainIsWorker)(!0),await pL().startServers(),Promise.resolve([]);await r()}U2();for(let r=0;r<e;r++)gL(r,e);return Promise.all(v2)}finally{(0,Vs.threadsHaveStarted)()}}function U2(){let e=(0,L2.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),_L=setInterval(()=>{Sf.notify(e)},fRe).unref())}function gL(e,t=1,r){if(EL++,(0,Vs.startWorker)("server/threads/threadServer.js",{name:Uy.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===Ly.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});v2.push(s),await s,pf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=NR.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=pf.indexOf(n);a>-1&&pf.splice(a,1)}if(o(i,"removeWorker"),Ef){let a=Ef;Ef=[];for(let c of a)M2[c.localPort](null,c)}}}),r){let n=setInterval(()=>{SL?SL=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Vs.shutdownWorkers)(),EL=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function TL(e=0,t){if(typeof e=="string")try{(0,wR.existsSync)(e)&&(0,wR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=hRe:r=pRe(t):r=RL;let n=(0,_f.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=M2[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),SL=!0,r(i,(a,c)=>{if(!a){if(O2){let u=i._socket||new _f.Socket({handle:i,writable:!0,readable:!0});O2.deliverSocket(u,e,c),u.resume()}else EL>0?(Ef.length===0&&setTimeout(()=>{Ef.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,Ef.push(i)):(console.log("start up a dynamic thread to handle request"),gL(0));gt(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new _f.Socket({handle:i,writable:!0,readable:!0});gRe(u,a,e)}gt(!0,"socket-routed")})},Sf.info(`HarperDB ${D2.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 RL(e,t){let r,n=0;for(let s of pf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=IR)return IR=i,t(r);n=i}IR=0,t(r)}function hRe(e,t){let r={};e.getpeername(r);let n=r.address,s=gf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);RL(e,a=>{gf.set(n,{worker:a,lastUsed:i}),t(a)})}function pRe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new _f.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=gf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);RL(n,f=>{gf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function x2(){IR=0;for(let e of pf)e.expectedIdle=e.recentELU.idle+ERe,e.requests=1;pf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function gRe(e,t,r){let n=_Re++;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(),NR.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")),NR.delete(n)),s.event=="destroy"&&(e.destroy(),NR.delete(n))})}var Vs,_f,Sf,wR,P2,L2,D2,pf,Ef,M2,O2,EL,v2,_L,fRe,SL,IR,C2,gf,ERe,NR,_Re,rL=fe(()=>{Vs=w(st()),_f=require("net");k();Sf=w(z()),wR=require("fs");Hi();P2=require("worker_threads"),L2=w(kd()),D2=w(Rt()),pf=[],Ef=[],M2=[],EL=0,v2=[];P2.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Vs.onMessageFromWorkers)(e=>{e.type===vy.RESTART&&_L&&(clearInterval(_L),U2())}));fRe=6e5;o(mRe,"startHTTPThreads");o(U2,"licenseWarning");o(gL,"startHTTPWorker");o(TL,"startSocketServer");IR=0;o(RL,"findMostIdleWorker");C2=36e5,gf=new Map;o(hRe,"findByRemoteAddressAffinity");o(pRe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of gf)r.lastUsed+C2<e&&gf.delete(t)},C2).unref();ERe=1e3;o(x2,"updateWorkerIdleness");(0,Vs.setMonitorListener)(x2);NR=new Map,_Re=1;o(gRe,"proxySocket")});var yL={};Ce(yL,{hdbServer:()=>yRe,start:()=>yRe});async function yRe(e){try{ro.default.debug("In Fastify server"+process.cwd()),ro.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ro.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=B2.default.isMaster,await ARe();let t=e.securePort>0;Tf=bRe(t),await Tf.ready(),e||(e={}),e.isOperationsServer=!0;try{ve.http(Tf.server,e),Tf.server.closeIdleConnections||await Tf.listen({port:0,host:"::"})}catch(r){throw Tf.close(),ro.default.error(r),ro.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),ro.default.fatal(t),process.exit(1)}}async function ARe(){ro.default.trace("Configuring HarperDB process."),K2.default.setSchemaDataToGlobal(),await W2.default.setUsersWithRolesCache(),await z2.default.getLicense()}function bRe(e){ro.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=IRe(e),r=(0,F2.default)(t);r.server.headersTimeout=wRe(),r.setErrorHandler(fc.serverErrorHandler);let n=NRe();n&&r.register(H2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(q2.default),r.register(k2.default),r.register(G2.default,{root:$2.default.join(V2.PACKAGE_ROOT,"studio/build-local")}),tm(r);let s=dc.default.get(Py.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!Y2.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[fc.reqBodyValidationHandler,fc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,fc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),ro.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function IRe(e){let t=dc.default.get(Zp.OPERATIONSAPI_NETWORK_TIMEOUT),r=dc.default.get(Zp.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:TRe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function NRe(){let e=dc.default.get(Zp.OPERATIONSAPI_NETWORK_CORS),t=dc.default.get(Zp.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===RRe)&&(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 wRe(){return dc.default.get(Zp.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??SRe}var B2,dc,ro,F2,H2,k2,G2,q2,$2,V2,K2,Y2,W2,z2,fc,SRe,TRe,RRe,Zp,Tf,j2=fe(()=>{B2=w(require("cluster")),dc=w(ce());k();ro=w(z()),F2=w(require("fastify")),H2=w(require("@fastify/cors")),k2=w(require("@fastify/compress")),G2=w(require("@fastify/static")),q2=w(LN()),$2=w(require("path")),V2=w(Rt()),K2=w(ei()),Y2=w(ie()),W2=w(Jn()),z2=w(kd());Pr();fc=w(WT());po();dc.default.initSync();SRe=6e4,TRe=1024*1024*1024,RRe="TRUE",{CONFIG_PARAMS:Zp}=K;o(yRe,"operationsServer");o(ARe,"setUp");o(bRe,"buildServer");o(IRe,"getServerOptions");o(NRe,"getCORSOpts");o(wRe,"getHeaderTimeoutConfig")});var OL={};Ce(OL,{disableNATS:()=>CRe,publishToStream:()=>PR,setNATSReplicator:()=>AL,setPublishToStream:()=>PRe,setSubscription:()=>wL,start:()=>ORe});function ORe(){eE.default.get(U.CLUSTERING_ENABLED)&&DRe()}function CRe(e=!0){eQ=e}function PRe(e,t){PR=e,wL=t}function DRe(){if(eQ||process.env._DISABLE_NATS)return;let e=it(),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];AL(s,r,i)}}_l((r,n)=>{AL(r.tableName,r.databaseName,r),n&&rQ(r)}),!Q2&&(Q2=!0)}function AL(e,t,r){if(t==="system"&&MRe.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 Dr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){rQ(i)}static subscribe(){let i=new $n;return wL(t,e,i),i}static subscribeOnThisThread(i){return i<(eE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??LRe)}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 OR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=tQ;return i}o(n,"getNATSTransaction")}function rQ(e){let t=eE.default.get(U.CLUSTERING_NODENAME);PR(`${IL.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,NL.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 J2,IL,NL,X2,Z2,eE,CR,eQ,PR,wL,LRe,tQ,Q2,MRe,OR,bL,nQ=fe(()=>{Le();Aa();J2=w(lr()),IL=w(It()),NL=w(xi());pu();X2=w(WN()),Z2=w(An()),eE=w(ce());k();CR=w(z());o(ORe,"start");o(CRe,"disableNATS");PR=J2.publishToStream,wL=X2.setSubscription;o(PRe,"setPublishToStream");LRe=2;o(DRe,"assignReplicationSource");MRe=["hdb_job","hdb_raw_analytics","hdb_info","hdb_license"];o(AL,"setNATSReplicator");o(rQ,"publishSchema");OR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=eE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(CR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(PR(`${IL.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,NL.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw CR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},bL=class extends OR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Z2.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};tQ=new bL});async function cQ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await CL.get(e,{returnNonexistent:!0});i=new DL(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await CL.get(e);a&&a.delete()}i=new DR(e,t)}return n&&(n.id=e,n.user={username:t?.username},tE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function PL(){return LR++,LR>65500&&(LR=1),LR}function LL(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=As.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new Js(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return vt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var iQ,mc,oQ,aQ,sQ,CL,tE,LR,DR,DL,lQ=fe(()=>{Le();Pu();iQ=w(An()),mc=w(z());vc();oQ=w(st()),aQ=w(pL());Pr();y_();sQ=100,CL=et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),tE=et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,oQ.getWorkerIndex)()===0&&(async()=>{await aQ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of tE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await ve.getUser(r.user.username));try{await LL(r,t,r)}catch{(0,mc.warn)("Failed to publish will",t)}tE.delete(e.id)}})();o(cQ,"getSession");LR=1;o(PL,"getNextMessageId");DR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(T=>T.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,mc.trace)("Resuming subscription from",s,"from",a);let h=As.getMatch(u,"mqtt");if(!h){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}m.url=h.relativeURL;let p;if(m.url.indexOf("+")>-1||(p=m.url.indexOf("#"))>-1){let T=m.url.slice(1);if(p--,p>-1&&p!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,T.indexOf("+")===T.length-1)m.onlyChildren=!0,m.url="/"+T.slice(0,T.length-1);else{let R=T.split("/"),I;for(let te=0;te<R.length;te++)if(R[te].indexOf("+")>-1)if(R[te]==="+")I=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&I)throw new Error("Filters can not be combined");let P=!0;R[R.length-1]==="#"&&(R.length--,P=!1),I&&(n=o(te=>{let x=te.id;if(!Array.isArray(x))if(x?.indexOf?.("/")>-1)x=x.split("/");else return!1;if(P&&x.length!==R.length)return!1;for(let $=0;$<R.length;$++)if(R[$]!=="+"&&R[$]!==x[$])return!1;return!0},"filter"));let Y=R.indexOf("+");m.url="/"+(Y>-1?R.slice(0,Y):R).concat("").join("/")}}else m.isCollection=!1;let _=h.path,g=h.Resource,y=await vt(m,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i,T.isCollection=m.isCollection;let R=await g.subscribe(m,T);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let I=(async()=>{for await(let P of R)try{let Y;if(P.type&&P.type!=="put"&&P.type!=="delete"&&P.type!=="message"&&P.type!=="patch"||n&&!n(P))continue;r?(P.topic=s,Y=this.needsAcknowledge(P)):(P.acknowledge?.(),Y=PL());let te=P.id;if(Array.isArray(te)&&(te=Cu(te)),te==null&&(te=""),await this.listener(_+"/"+te,P.value,Y,t)===!1)break;this.awaitingAcks?.size>sQ?await new Promise($=>setTimeout($,this.awaitingAcks.size-sQ)):await new Promise(setImmediate)}catch(Y){(0,mc.warn)(Y)}})();return R});if(y)return y.topic=s,y.qos=t.qos,this.subscriptions.push(y),y}resume(){}needsAcknowledge(t){let r=PL();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 LL(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();vt(r,async()=>{try{if(!t){let n=await tE.get(this.sessionId);n?.doesExist()&&await LL(n,n.data,r)}}finally{await tE.delete(this.sessionId)}}).catch(n=>{(0,mc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(LL,"publish");DL=class extends DR{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=PL(),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,mc.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,iQ.getNextMonotonicTime)()),(0,mc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),CL.put(this.sessionRecord)}}});var ML={};Ce(ML,{bypassAuth:()=>vRe,start:()=>xRe});function vRe(){EQ=!0}function xRe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new pQ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),nr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:h,onClose:p}=dQ(u,_=>{u.send(_)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",h),u.on("close",p),u.on("error",_=>{nr.info?.("WebSocket error",_)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),nr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{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,Rf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&vR.notify?.({username:d?.username,status:Ys.SUCCESS,type:ma.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(p){throw(0,Rf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&vR.error?.({username:h,status:Ys.FAILURE,type:ma.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),p}}else nr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(h){a.events.emit("error",h,u),nr.error?.(h)}else if(l.required)return nr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&URe(u.remoteAddress)&&(d=await(0,fQ.getSuperUser)(),nr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=dQ(u,h=>u.write(h),null,d,a);u.on("data",f),u.on("close",m),u.on("error",h=>{nr.info?.("Socket error",h)})},{port:t,securePort:s,mtls:l})),c}function dQ(e,t,r,n,s){uQ||(uQ=!0,th(f=>{MR>0&&f.push({metric:"mqtt-connections",connections:MR,byThread:!0})}));let i;MR++;let a,c={protocolVersion:4},l=(0,UR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){MR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),Kr(!1,"connection","mqtt","disconnect"),nr.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),nr.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){nr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let h=f.topic,p=h?.indexOf("/",1),_=p>0?h.slice(0,p):h;gt(f.length,"bytes-received",_,y(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await ve.getUser(f.username,f.password.toString(),r),(0,Rf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&vR.notify?.({username:n?.username,status:Ys.SUCCESS,type:ma.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(j){return(0,Rf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&vR.error?.({username:f.username,status:Ys.FAILURE,type:ma.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,j),Kr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),Kr(!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=ho(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?j(f.will.payload):void 0,delete f.will.payload}a=cQ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(j){return nr.error?.(j),s.events.emit("auth-failed",f,e,j),Kr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:j.code||5,returnCode:j.code||128})}s.events.emit("connected",a,e),Kr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(j,V,le,re)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",j);let se=j.indexOf("/",1),_e=se>0?j.slice(0,se):j;g({cmd:"publish",topic:j,payload:await T(V),messageId:le||Math.floor(Math.random()*1e8),qos:re.qos},_e);let Ne=e._socket??e;return Ne.writableNeedDrain?new Promise(Fe=>Ne.once("drain",Fe)):!Ne.closed}catch(se){return nr.error?.(se),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let I=[];for(let j of f.subscriptions){let V;try{let le=await a.addSubscription(j,j.qos>=1);V=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,j,a),le.statusCode?le.statusCode===500?nr.warn?.(le):nr.info?.(le):nr.error?.(le),V=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}I.push(V)}await a.committed,g({cmd:"suback",granted:I,messageId:f.messageId});break;case"unsubscribe":{let j=[];for(let V of f.unsubscriptions)j.push(a.removeSubscription(V)?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 P=f.qos===2?"pubrec":"puback",Y=e.deserialize||(e.deserialize=ho(r?.headers.get?.("content-type"))),x=(f.payload?.length||0)>0?Y(f.payload):void 0,$;try{$=await a.publish(f,x)}catch(j){s.events.emit("error",j,e,f,a),nr.warn?.(j),f.qos>0&&g({cmd:P,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:P,messageId:f.messageId,reasonCode:$===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),Kr(!0,"connection","mqtt","disconnect"),nr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),nr.error?.(R),g({cmd:"disconnect"})}function g(R,I){let P=(0,UR.generate)(R,c);t(P),gt(P.length,"bytes-sent",I,y(R),"mqtt")}o(g,"sendPacket");function y(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(y,"packetMethodName");function T(R){return _a(R,r)}o(T,"serialize")}),l.on("error",f=>{nr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var UR,fQ,Rf,mQ,hQ,pQ,vR,nr,EQ,URe,uQ,MR,_Q=fe(()=>{UR=require("mqtt-packet");lQ();fQ=w(Jn());po();Hi();Pr();Rf=w(ce());k();mQ=w(Ni()),hQ=w(z()),pQ=require("events"),vR=(0,mQ.loggerWithTag)("auth-event"),nr=(0,hQ.forComponent)("mqtt"),EQ=(0,Rf.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(vRe,"bypassAuth");URe=o(e=>EQ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(xRe,"start");MR=0;o(dQ,"onSocket")});function xR(e,t){if(t?.includes(".."))throw new vL(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var vL,UL=fe(()=>{vL=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(xR,"resolveBaseURLPath")});function gQ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var SQ=fe(()=>{o(gQ,"deriveCommonPatternBase")});function BR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var xL=fe(()=>{o(BR,"deriveGlobOptions")});var TQ,BL,rE,RQ=fe(()=>{UL();SQ();xL();TQ=require("micromatch"),BL=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},rE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=xR(this.name,this.config.urlPath),this.globOptions=BR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new BL(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,TQ.scan)(s).base),this.commonPatternBase=gQ(this.patternBases)}}});function yQ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function nu(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(yQ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(yQ(n,t)){t=t.slice(n.length+1);break}}}return(0,AQ.join)(e.baseURLPath,t)}var AQ,FL=fe(()=>{AQ=require("node:path");o(yQ,"pathStartsWithBase");o(nu,"deriveURLPath")});function bQ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var HR,IQ,NQ,HL,wQ,OQ,FR,CQ=fe(()=>{HR=require("node:events");RQ();IQ=w(z()),NQ=w(require("chokidar")),HL=require("node:path"),wQ=require("node:fs/promises");FL();OQ=require("micromatch"),FR=class extends HR.EventEmitter{static{o(this,"EntryHandler")}#e;#r;#t;constructor(t,r,n,s){super(),this.#e=new rE(t,r,bQ(n)),this.#t=s||IQ.default.loggerWithTag(t),this.#o()}get name(){return this.#e.name}get directory(){return this.#e.directory}#n(...[t,r,n]){if(r===""&&(r="/"),!(0,OQ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,HL.join)(this.directory,r);switch(t){case"add":case"change":{let i=nu(this.#e,r,"file");(0,wQ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=nu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=nu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#o(){await this.#r?.close(),this.#r=void 0;let t=this.#e.patternBases.map(r=>(0,HL.join)(this.#e.directory,r));return this.#r=NQ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready()}close(){return this.#r?.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}ready(){return(0,HR.once)(this,"ready")}update(t){return this.#e=new rE(this.name,this.directory,bQ(t)),this.#o()}};o(bQ,"castConfig")});var GR,PQ,LQ,DQ,MQ,vQ,kL,GL,qL,$L,VL,kR,UQ=fe(()=>{GR=require("events"),PQ=w(require("yaml")),LQ=w(require("chokidar")),DQ=require("node:fs/promises"),MQ=require("util"),vQ=w(z()),kL=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},GL=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},qL=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},$L=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},VL=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},kR=class extends GR.EventEmitter{static{o(this,"OptionsWatcher")}#e;#r;#t;#n;#s;#i;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||vQ.default.loggerWithTag(t),this.#r=LQ.default.watch(r,{persistent:!1}).on("add",this.#o.bind(this)).on("change",this.#o.bind(this)).on("error",this.#d.bind(this)).on("unlink",this.#c.bind(this)).on("ready",this.#o.bind(this))}#o(){(0,DQ.readFile)(this.#e,"utf-8").then(t=>{this.#n=PQ.default.parse(t),this.#n&&this.#s in this.#n?this.#t?this.#a(this.#n[this.#s],this.#t):(this.#t=this.#n[this.#s],this.emit("ready",this.#t)):this.#t&&(this.#t=void 0,this.emit("remove"))}).catch(t=>{if(t instanceof Error&&"code"in t&&t.code==="ENOENT"){this.#t?(this.#t=void 0,this.emit("remove")):this.emit("ready");return}this.emit("error",t)})}#d(t){this.emit("error",new kL(this.#e,t))}#c(t){this.#i.warn(`Configuration file ${t} was deleted. Recreate it to restore the options watcher.`),this.#t=void 0,this.emit("remove")}#a(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#f(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#a(i,c,a):this.#u(a,i);continue}(0,MQ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#f(t){let r=this.#t;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.#t)throw new GL;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new qL(t,r);let n=this.#t;for(let s of t.slice(0,-1)){if(n==null||typeof n!="object"||!(s in n))throw new $L(t,s);n=n[s]}if(n==null||typeof n!="object")throw new VL(t);n[t[t.length-1]]=r,this.emit("change",t,r,this.#t)}close(){return this.#r.close(),this.emit("close"),this.removeAllListeners(),this}get(t){return this.#t?this.#f(t):void 0}getAll(){return structuredClone(this.#t)}getRoot(){return this.#n}ready(){return(0,GR.once)(this,"ready")}}});function xQ(){FRe[0]=1}var BRe,FRe,BQ=fe(()=>{Sp();BRe=Gl.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),FRe=new Uint8Array(BRe);o(xQ,"requestRestart")});var VR,FQ,qR,$R,HQ=fe(()=>{VR=require("node:events");CQ();UQ();FQ=w(z());BQ();qR=class extends Error{static{o(this,"MissingDefaultEntryHandlerError")}constructor(){super("No default entry handler exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultEntryHandlerError"}},$R=class extends VR.EventEmitter{static{o(this,"Scope")}#e;#r;#t;#n;#s;#i;options;resources;server;constructor(t,r,n,s,i){super(),this.#t=t,this.#r=r,this.#e=n,this.#i=FQ.default.forComponent(this.#t),this.resources=s,this.server=i,this.#s=[],this.options=new kR(t,n,this.#i).on("error",this.#d.bind(this)).on("change",this.#l.bind(this)()).on("ready",this.#o.bind(this))}#o(){let t=this.options.getAll();t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t&&(this.#n=this.#c(t)),this.emit("ready")}#d(t){this.emit("error",t)}ready(){return(0,VR.once)(this,"ready")}close(){for(let t of this.#s)t.close();return this.options.close(),this.emit("close"),this.removeAllListeners(),this}#c(t){let r=new FR(this.#t,this.#r,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#a("add")).on("change",this.#a("change")).on("unlink",this.#a("unlink")).on("addDir",this.#a("addDir")).on("unlinkDir",this.#a("unlinkDir"));return this.#s.push(r),r}#a(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#l(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||t.requestRestart()},"handleOptionsWatcherChange")}handleEntry(t,r){if(t===void 0){if(!this.#n){this.emit("error",new qR);return}return this.#n}if(typeof t=="function"){if(!this.#n){this.emit("error",new qR);return}return this.#n.on("all",t)}let n=this.#c(t);return r?n.on("all",r):n}requestRestart(){this.#i.debug("Restart requested!"),xQ()}}});function su(e){return typeof e=="string"&&e.trim()!==""}function KL(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>su(t))}function $Q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function HRe(e){e.config.root&&nE.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 XL(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($Q(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,sE.join)(e.directory,i);KR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function VQ(e){let t=!1;if(t=await HRe(e),t)return t;let r=await(0,kQ.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,sE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=nu(e,n.path,"directory");KR.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=nu(e,n.path,"file"),a=await(0,GQ.readFile)(s);KR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else nE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var KR,kQ,nE,sE,GQ,qQ,YR,yi,YL,WL,zL,jL,QL,JL,XL,ZL,eD,KQ=fe(()=>{KR=require("node:worker_threads"),kQ=w(require("fast-glob")),nE=w(z());UL();xL();sE=require("node:path"),GQ=require("node:fs/promises");FL();qQ=require("micromatch"),YR=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!su(this.config.files)&&!KL(this.config.files)&&!$Q(this.config.files))throw new YL(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!KL(this.config.files.source)&&!su(this.config.files.source))throw new WL(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new zL(this);if(this.config.files.ignore!==void 0&&!KL(this.config.files.ignore)&&!su(this.config.files.ignore))throw new jL(this)}if(this.config.root!==void 0&&!su(this.config.root))throw new JL(this);if(this.config.path!==void 0&&!su(this.config.path))throw new ZL(this);if(this.config.path&&(nE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!su(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new eD(this);this.globOptions=BR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new QL(this,r);return r.startsWith("/")&&(nE.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,qQ.scan)(r).base),this.baseURLPath=xR(this.name,this.config.urlPath)}},yi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,sE.basename)(r.directory)}) ${t}`)}},YL=class extends yi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},WL=class extends yi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},zL=class extends yi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},jL=class extends yi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},QL=class extends yi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},JL=class extends yi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},XL=class extends yi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},ZL=class extends yi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},eD=class extends yi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(su,"isNonEmptyString");o(KL,"isArrayOfNonEmptyStrings");o($Q,"isObject");o(HRe,"handleRoots");o(VQ,"processResourceExtensionComponent")});var fp={};Ce(fp,{componentErrors:()=>iE,getComponentName:()=>yR,loadComponent:()=>QR,loadComponentDirectories:()=>zQ,setErrorReporter:()=>GRe});function zQ(e,t){t&&(rD=t),e&&(oD=e);let r=[];if((0,Pt.existsSync)(tD)){let s=(0,Pt.readdirSync)(tD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Fr.join)(tD,a);r.push(QR(c,rD,Ny,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(QR(n,rD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{WQ=!0})}function GRe(e){zR=e}function qRe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{Gl.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(Gl.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Pt.rmSync)(t,{recursive:!0,force:!0}),(0,Pt.existsSync)((0,Fr.join)(e,"node_modules"))||(0,Pt.mkdirSync)((0,Fr.join)(e,"node_modules")),(0,Pt.symlinkSync)(cD.PACKAGE_ROOT,t,"dir"),r()}finally{Gl.primaryStore.unlock(e,0)}})}async function QR(e,t,r,n,s,i){let a=(0,Pt.realpathSync)(e);if(WR.has(a))return WR.get(a);WR.set(a,!0),s&&(oD=s);try{let c;n&&(iE=new Map);let l=(0,Fr.join)(e,"harperdb-config.yaml");(0,Pt.existsSync)(l)?c=n?(0,JR.getConfigObj)():(0,sD.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Pt.existsSync)(l=(0,Fr.join)(e,"config.yaml"))?c=(0,sD.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():c=jQ;try{let m=(0,Fr.join)(e,"node_modules","harperdb");(n||((0,Pt.existsSync)(m)||!e.startsWith((0,iD.getHdbBasePath)()))&&(!(0,Pt.existsSync)(m)||(0,Pt.realpathSync)(cD.PACKAGE_ROOT)!==(0,Pt.realpathSync)(m)))&&await qRe(e,m)}catch(m){ra.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&ra.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=jR,d={};for(let m in c){jR=m;let h=c[m];if(iE.set(n?m:(0,Fr.basename)(e),!1),!h)continue;let p,_=h.package;try{if(_){let I=e,P;for(;!(0,Pt.existsSync)(P=(0,Fr.join)(I,"node_modules",m));)if(I=(0,Fr.dirname)(I),I.length<(0,iD.getHdbBasePath)().length){P=null;break}if(P)p=await QR(P,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else p=kRe[m];if(!p)continue;let g=o(I=>(I.origin=r,et(I)),"ensureTable"),y=h.network||(h.port||h.securePort)&&h,T=y?.securePort||y?.https&&y.port,R=!y?.https&&y?.port;if("handleComponent"in p&&("start"in p||"startOnMainThread"in p||"handleFile"in p||"handleDirectory"in p||"setupFile"in p||"setupDirectory"in p))throw new Error(`Component ${m} has both 'handleComponent' and 'start' or 'startOnMainThread' methods. Please use only one of them.`);if(t.isWorker&&p.handleComponent){p.suppressHandleComponentWarning!==!0&&ra.default.warn(`Extension ${m} is using the experimental handleComponent API`);let I=new $R(m,e,l,t,ve);await I.ready(),await p.handleComponent(I);continue}if(nD.isMainThread&&(p=await p.startOnMainThread?.({server:ve,ensureTable:g,port:R,securePort:T,resources:t,...h})||p,n&&y))for(let I of[R,T])try{if(+I&&!YQ.includes(I)){let P=aD.get(U.HTTP_SESSIONAFFINITY);P&&ra.default.warn("Session affinity is not recommended and may cause memory leaks"),(P||!xg)&&(YQ.push(I),TL(I,P))}}catch(P){console.error("Error listening on socket",I,P,m)}if(t.isWorker&&(p=await p.start?.({server:ve,ensureTable:g,port:R,securePort:T,resources:t,...h})||p),oD.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&h.files!=null){let I=new YR({config:h,name:m,directory:e,module:p,resources:t});d[m]=await VQ(I)}}catch(g){g.message=`Could not load component '${m}' for application '${(0,Fr.basename)(e)}' due to: ${g.message}`,zR?.(g),((0,oE.getWorkerIndex)()===0?console:ra.default).error(g),t.set(h.path||"/",new jc(g),null,!0),iE.set(n?m:(0,Fr.basename)(e),g.message)}}if(jR=u,nD.isMainThread&&!WQ&&i&&(0,oE.watchDir)(e,async()=>zQ()),c.extensionModule){let m=await Ug((0,Fr.join)(e,c.extensionModule));return WR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;zR?.(new Error(m)),((0,oE.getWorkerIndex)()===0?console:ra.default).error(m),iE.set((0,Fr.basename)(e),m)}for(let[m,h]of Object.entries(d))h||ra.default.warn(`Component ${m} from (${(0,Fr.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}`,zR?.(c),t.set("",new jc(c))}}var Pt,Fr,nD,sD,aD,cD,ra,oE,iD,JR,tD,oD,WQ,rD,iE,kRe,jQ,YQ,WR,zR,jR,yR,Qd=fe(()=>{Pt=require("node:fs"),Fr=require("node:path"),nD=require("node:worker_threads"),sD=require("yaml"),aD=w(ce()),cD=w(Rt());k();ck();gk();Dk();xk();Bk();Qk();Az();Cz();Lz();ra=w(z());Bz();oE=w(st());EN();Pr();Le();rL();iD=w(ce());j2();lT();nQ();es();_Q();JR=w(yt());Eh();GA();HQ();KQ();mL();Sp();tD=(0,JR.resolvePath)(aD.get(U.COMPONENTSROOT)),oD=new Map,iE=new Map;o(zQ,"loadComponentDirectories");kRe={REST:Fg,rest:Fg,graphql:cN,graphqlSchema:oN,roles:pN,jsResource:gN,fastifyRoutes:yP,login:TN,static:AP,operationsApi:yL,customFunctions:{},http:RR,clustering:OL,replication:vo,authentication:ip,mqtt:ML,loadEnv:bP,logging:ra.default,dataLoader:IP},jQ={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(jQ,"static",{value:{files:"web/**"}});YQ=[],WR=new Map;o(GRe,"setErrorReporter");yR=o(()=>jR,"getComponentName");o(qRe,"symlinkHarperModule");o(QR,"loadComponent")});var bR=M((jFe,JQ)=>{var{isMainThread:QQ}=require("worker_threads"),{getTables:$Re,getDatabases:WFe,table:zFe}=(Le(),v(ft)),{loadComponentDirectories:VRe,loadComponent:KRe}=(Qd(),v(fp)),{resetResources:YRe}=(Pu(),v(gU)),WRe=sC(),zRe=yt(),{dirname:jRe}=require("path"),{getConnection:QRe}=lr(),JRe=ce(),{CONFIG_PARAMS:XRe}=(k(),v(K)),{loadCertificates:ZRe}=rs(),lD=new Map;async function eye(e=!1){!QQ&&JRe.get(XRe.CLUSTERING_ENABLED)&&QRe();try{QQ&&await WRe()}catch(n){console.error(n)}let t=YRe();$Re(),t.isWorker=e,await ZRe(),await KRe(jRe(zRe.getConfigFilePath()),t,"hdb",!0,lD),await VRe(lD,t);let r=[];for(let[n]of lD)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(eye,"loadRootComponents");JQ.exports.loadRootComponents=eye});var st=M((JFe,bi)=>{"use strict";Wy();var{Worker:tye,MessageChannel:rye,parentPort:no,isMainThread:hD,threadId:nye,workerData:so}=require("worker_threads"),{PACKAGE_ROOT:sye}=Rt(),{join:tJ,isAbsolute:iye,extname:oye}=require("path"),{server:rJ}=(Pr(),v(Bf)),{watch:aye,readdir:cye}=require("fs/promises"),{totalmem:XQ}=require("os"),yf=(k(),v(K)),nJ=ce(),Ai=z(),{randomBytes:lye}=require("crypto"),{_assignPackageExport:uye}=Ws(),ZQ=1024*1024,hc=[],Ks=[],dye=50,pD=1e4,fye="restart",sJ="request_thread_info",iJ="resource_report",oJ="thread_info",aJ="added-port",mye="ack",uD;uye("threads",Ks);bi.exports={startWorker:dD,restartWorkers:_D,shutdownWorkers:gye,workers:hc,setMonitorListener:Nye,onMessageFromWorkers:Sye,onMessageByType:hJ,broadcast:Rye,broadcastWithAcknowledgement:Aye,setChildListenerByType:_ye,getWorkerIndex:cJ,getWorkerCount:lJ,getTicketKeys:dJ,setMainIsWorker:pye,setTerminateTimeout:hye,restartNumber:so?.restartNumber||1};Ks.onMessageByType=hJ;Ks.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ks.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};bi.exports.whenThreadsStarted=new Promise(e=>{bi.exports.threadsHaveStarted=e});var ED;function hye(e){pD=e}o(hye,"setTerminateTimeout");function cJ(){return so?so.workerIndex:ED?0:void 0}o(cJ,"getWorkerIndex");function lJ(){return so?so.workerCount:ED?1:void 0}o(lJ,"getWorkerCount");function pye(e){ED=e,bi.exports.threadsHaveStarted()}o(pye,"setMainIsWorker");var uJ=1,XR;function dJ(){return XR||(XR=hD?lye(48):so.ticketKeys,XR)}o(dJ,"getTicketKeys");Object.defineProperty(rJ,"workerIndex",{get(){return cJ()}});Object.defineProperty(rJ,"workerCount",{get(){return lJ()}});var fJ={[sJ](e,t){bye(t)},[iJ](e,t){Iye(t,e)}};function dD(e,t={}){let r=process.constrainedMemory?.()||XQ();r=Math.min(r,XQ(),2e4*ZQ);let n=nJ.get(yf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/ZQ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of Ks){let u=new rye;u.existingPort=l,i.push(u),a.push(u.port2)}oye(e)||(e+=".js");let c=new tye(iye(e)?e:tJ(sye,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:uJ=t.threadCount,name:t.name,restartNumber:bi.exports.restartNumber,ticketKeys:dJ()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:aJ,port:l,threadId:c.threadId},[l]);return ey(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>dD(e,t),c.on("error",l=>{Ai.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{hc.splice(hc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<dye?(t.unexpectedRestarts=c.unexpectedRestarts+1,dD(e,t)):Ai.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{fJ[l.type]?.(l,c)}),hc.push(c),Oye(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(dD,"startWorker");var Eye=[yf.THREAD_TYPES.HTTP];async function _D(e=null,t=Math.max(uJ>3,1),r=!0){if(hD){try{process.chdir(process.cwd())}catch(a){Ai.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=bR();await a()}bi.exports.restartNumber++,t<1&&(t=t*hc.length);let n=[],s=[];for(let a of hc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Ai.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:bi.exports.restartNumber,type:yf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=Eye.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Ai.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},pD*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(h=>{h.type===yf.ITC_EVENT_TYPES.CHILD_STARTED&&(Ai.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Ai.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}=Kd();r&&(e==="http"||!e)&&nJ.get(yf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else no.postMessage({type:fye,workerType:e})}o(_D,"restartWorkers");function _ye(e,t){fJ[e]=t}o(_ye,"setChildListenerByType");function gye(e){return _D(e,1/0,!1)}o(gye,"shutdownWorkers");var mJ=[];function Sye(e){mJ.push(e)}o(Sye,"onMessageFromWorkers");var fD=new Map;function hJ(e,t){let r=fD.get(e);r||fD.set(e,r=[]),r.push(t)}o(hJ,"onMessageByType");var Tye=10;async function Rye(e,t){let r=0;for(let n of Ks)try{n.postMessage(e),r++>Tye&&(r=0,await new Promise(setImmediate))}catch(s){Ai.error("Unable to send message to worker",s)}t&&EJ(e,null)}o(Rye,"broadcast");var ZR=new Map,yye=1;function Aye(e){return new Promise(t=>{let r=0;for(let n of Ks)try{let s=yye++,i=o(()=>{ZR.delete(s),--r===0&&t(),n!==no&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,ZR.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of ZR)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Ai.error("Unable to send message to worker",s)}r===0&&t()})}o(Aye,"broadcastWithAcknowledgement");function bye(e){e.postMessage({type:oJ,workers:pJ()})}o(bye,"sendThreadInfo");function pJ(){let e=Date.now();return hc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(pJ,"getChildWorkerInfo");function Iye(e,t){e.resources=t,e.resources.updated=Date.now()}o(Iye,"recordResourceReport");var mD;function Nye(e){mD=e}o(Nye,"setMonitorListener");var wye=1e3,eJ=!1;function Oye(){eJ||(eJ=!0,setInterval(()=>{for(let e of hc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}mD&&mD()},wye).unref())}o(Oye,"startMonitoring");var Cye=1e3;if(no&&so?.addPorts){ey(no);for(let e=0,t=so.addPorts.length;e<t;e++){let r=so.addPorts[e];r.threadId=so.addThreadIds[e],ey(r)}setInterval(()=>{let e=process.memoryUsage();no.postMessage({type:iJ,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Cye).unref(),uD=o(()=>new Promise((e,t)=>{no.on("message",r),no.postMessage({type:sJ});function r(n){n.type===oJ&&(no.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else uD=pJ;bi.exports.getThreadInfo=uD;function ey(e,t){Ks.push(e),e.on("message",r=>{if(r.type===aJ)r.port.threadId=r.threadId,ey(r.port);else if(r.type===mye){let n=ZR.get(r.id);n&&n()}else EJ(r,e)}).on("close",()=>{Ks.splice(Ks.indexOf(e),1)}).on("exit",()=>{Ks.splice(Ks.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(ey,"addPort");function EJ(e,t){for(let n of mJ)n(e,t);let r=fD.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Ai.error(s)}}o(EJ,"notifyMessageListeners");if(hD){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await cye(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(tJ(s,a.name));try{for await(let{filename:a}of aye(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await _D(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");bi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else no.on("message",async e=>{let{type:t}=e;t===yf.ITC_EVENT_TYPES.SHUTDOWN&&(bi.exports.restartNumber=e.restartNumber,no.unref(),setTimeout(()=>{Ai.warn("Thread did not voluntarily terminate",nye),process.exit(0)},pD).unref())})});var yJ=M((tHe,RJ)=>{"use strict";var{promises:Af,createReadStream:Pye,createWriteStream:Lye}=require("fs"),{createGzip:Dye}=require("zlib"),{promisify:Mye}=require("util"),{pipeline:vye}=require("stream"),Uye=Mye(vye),SD=require("path"),TJ=ce();TJ.initSync();var ty=z(),{CONFIG_PARAMS:xye,ITC_EVENT_TYPES:ZFe}=(k(),v(K)),{onMessageFromWorkers:eHe}=st(),{convertToMS:_J}=ie(),{onStorageReclamation:Bye}=(o_(),v(Gv)),Fye=6e4,Hye="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",kye="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",gD,gJ;RJ.exports=Gye;function Gye({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(Bye(e.path,f=>{c=f},!0),!t&&!r)throw new Error(Hye);if(!i)throw new Error(kye);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=_J(r));let d;return gD=Date.now(),ty.trace("Log rotate enabled, maxSize:",t,"interval:",r),gJ=setInterval(async()=>{if(l){let f;f=await Af.stat(e.path),f.size>=l&&(d=await SJ(e.path,i))}if(u&&Date.now()-gD>=u&&(d=await SJ(e.path,i),gD=Date.now()),n||c){let f=_J(n??"1M")/(1+c);c=0;let m=await Af.readdir(i);for(let h of m)try{let p=await Af.stat(SD.join(i,h));Date.now()-p.mtimeMs>f&&await Af.unlink(SD.join(i,h))}catch(p){ty.error("Error trying to remove log",h,p)}}},a??Fye).unref(),{end(){clearInterval(gJ)},getLastRotatedLogPath(){return d}}}o(Gye,"logRotator");async function SJ(e,t){let r=TJ.get(xye.LOGGING_ROTATION_COMPRESS),n=SD.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Af.rename(e,n),r&&(e=n,n+=".gz",await Uye(Pye(e),Dye(),Lye(n)),await Af.unlink(e)),ty.closeLogFile(),ty.notify(`hdb.log rotated, old log moved to ${n}`),n}o(SJ,"moveLogFile")});var wJ={};Ce(wJ,{RootConfigWatcher:()=>TD});var AJ,bJ,IJ,ry,NJ,TD,OJ=fe(()=>{AJ=w(require("chokidar")),bJ=require("node:fs/promises"),IJ=w(yt()),ry=require("node:stream"),NJ=require("yaml"),TD=class extends ry.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#r;#t;constructor(){super(),this.#e=(0,IJ.getConfigFilePath)(),this.#r=AJ.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,bJ.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,NJ.parse)(t);if(!this.#t){this.#t=r,this.emit("ready",this.#t);return}this.emit("change",this.#t=r)}).catch(t=>{})}ready(){return(0,ry.once)(this,"ready")}close(){return this.#r.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#t}}});var z=M((oHe,uy)=>{"use strict";var sa=require("fs-extra"),{workerData:qye,threadId:$ye,isMainThread:UJ}=require("worker_threads"),lE=require("path"),xJ=require("yaml"),BJ=require("properties-reader"),Hr=(k(),v(K)),CJ=Pc(),Vye=require("os"),{PACKAGE_ROOT:wD}=Rt(),{_assignPackageExport:Kye}=Ws(),{Console:Yye}=require("console"),PJ=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),LJ=new Map,{join:ia}=lE,DJ=1e4,sr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Wye={STDOUT:"stdOut",STDERR:"stdErr"},iHe=ia(wD,"logs"),zye=ia(wD,"config/yaml/",Hr.HDB_DEFAULT_CONFIG_FILE),jye=1e4,uE,dE,ny,na,yD,RD,iy,Lt,ms,oy,ay,bf,cE,aE;function sy(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=lE.dirname(n)):t.root?n=ia(t.root,yD):(n=Lt.path,t.root||(t.root=lE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=sr[t.level]??Lt?.level??sr.info,FJ(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Lt.path===e.path&&r)}o(sy,"updateLogger");function FJ(e){let t=e.conditional??(e.conditional={});t.notify=sr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=sr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=sr.error>=e.level?e.error.bind(e):void 0,t.warn=sr.warn>=e.level?e.warn.bind(e):void 0,t.info=sr.info>=e.level?e.info.bind(e):void 0,t.debug=sr.debug>=e.level?e.debug.bind(e):void 0,t.trace=sr.trace>=e.level?e.trace.bind(e):void 0}o(FJ,"updateConditional");async function AD(){aE||(aE=new mAe,await aE.ready(),aE.on("change",AD));let e=aE.config,t=e.logging??{};sy(Lt,t),iy=Lt.path,uE=t.console??!1,t.external&&sy(ms,t.external);for(let r in e){let n=e[r];n.logging?sy(Lt.forComponent(r),n.logging,r):Lt.hasComponent(r)&&sy(Lt.forComponent(r),t,r)}}o(AD,"updateLogSettings");var bD=class extends Yye{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){gn="trace",this.level<=sr.trace&&super.info(...t),gn="info"}debug(...t){gn="debug",this.level<=sr.debug&&super.info(...t),gn="info"}info(...t){gn="info",this.level<=sr.info&&super.info(...t),gn="info"}warn(...t){gn="warn",this.level<=sr.warn&&super.warn(...t),gn="info"}error(...t){gn="error",this.level<=sr.error&&super.error(...t),gn="info"}fatal(...t){bf=!0;try{gn="fatal",this.level<=sr.fatal&&super.error(...t),gn="info"}finally{bf=!1}}notify(...t){bf=!0;try{gn="notify",this.level<=sr.notify&&super.info(...t),gn="info"}finally{bf=!1}}withTag(t){return kJ(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};cE===void 0&&HJ();uy.exports={notify:nAe,fatal:sAe,error:ND,warn:iAe,info:eAe,debug:rAe,trace:tAe,logLevel:na,loggerWithTag:kJ,suppressLogging:Xye,initLogSettings:HJ,logCustomLevel:oAe,closeLogFile:GJ,createLogger:ly,logsAtLevel:Qye,getLogFilePath:o(()=>iy,"getLogFilePath"),forComponent:o(e=>Lt.forComponent(e),"forComponent"),setMainLogger:dAe,OUTPUTS:Wye,AuthAuditLog:fAe,start:AD,startOnMainThread:AD,errorToString:uAe};uy.exports.externalLogger={notify(...e){ms.notify(...e)},fatal(...e){ms.fatal(...e)},error(...e){ms.error(...e)},warn(...e){ms.warn(...e)},info(...e){ms.info(...e)},debug(...e){ms.debug(...e)},trace(...e){ms.trace(...e)},withTag(e){return ms.withTag(e)}};Kye("logger",uy.exports.externalLogger);function Qye(e){return sr[na]<=sr[e]}o(Qye,"logsAtLevel");function HJ(e=!1){try{if(cE===void 0||e){GJ();let t=aAe(),r=CJ(["ROOTPATH"]);try{cE=BJ(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!sa.pathExistsSync(ia(r.ROOTPATH,Hr.HDB_CONFIG_FILE)))throw s}let n;if({level:na,configLogPath:RD,toFile:dE,logConsole:uE,rotation:n,toStream:ny}=cAe(r.ROOTPATH?ia(r.ROOTPATH,Hr.HDB_CONFIG_FILE):cE.get("settings_path")),yD=Hr.LOG_NAMES.HDB,iy=ia(RD,yD),Lt=ly({path:iy,level:na,stdStreams:ny,rotation:n}),ms=Lt.forComponent("external"),ms.tag=null,UJ)try{require("segfault-handler").registerHandler(ia(RD,"crash.log"))}catch{}}}catch(t){if(cE=void 0,t.code===Hr.NODE_ERROR_CODES.ENOENT||t.code===Hr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=CJ(Object.keys(Hr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Hr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===Hr.CONFIG_PARAMS.LOGGING_LEVEL){na=a;continue}i===Hr.CONFIG_PARAMS.LOGGING_CONSOLE&&(uE=i)}let{defaultLevel:n}=lAe();dE=!1,ny=!0,na=na===void 0?n:na,Lt=ly({level:na}),ms=Lt.forComponent("external"),ms.tag=null;return}throw ND("Error initializing log settings"),ND(t),t}process.env.DEV_MODE&&(ny=!0),Jye()}o(HJ,"initLogSettings");var pc=!0;function Jye(){dE&&(process.stdout.write=function(e){return typeof e=="string"&&pc&&uE&&(e=e.toString(),e[e.length-1]===`
127
- `&&(e=e.slice(0,-1)),ay(e)),PJ.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&pc&&uE&&(e[e.length-1]===`
128
- `&&(e=e.slice(0,-1)),ay(e)),PJ.apply(process.stderr,arguments)})}o(Jye,"stdioLogging");function kJ(e,t,r=Lt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=sr[i]?function(...a){cy=e;try{return s.call(r,...a)}finally{cy=void 0}}:null}o(n,"logWithTag")}o(kJ,"loggerWithTag");function Xye(e){try{pc=!1,e()}finally{pc=!0}}o(Xye,"suppressLogging");var Zye=qye?.name?.replace(/ /g,"-")||"main",gn="info",ID,cy;function ly({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=sr[t],l;function u(h){if(dE)if(l.logToStdstreams){f(h.replace(/\x1b\[[0-9;]*m/g,"")),pc=!1;try{process.stdout.write(h)}finally{pc=!0}}else f(h);else r&&process.stdout.write(h)}o(u,"logStdOut");function d(h){if(dE){if(f(h),r){pc=!1;try{process.stderr.write(h)}finally{pc=!0}}}else r&&process.stderr.write(h)}o(d,"logStdErr");let f=e&&vJ(e,n,s);function m(h){return{write(p){let _=[gn];_.unshift(ID||Zye+"/"+$ye),cy&&_.push(cy),l.tag&&_.push(l.tag),h(`[${_.join("] [")}]: ${p}`)}}}if(o(m,"logPrepend"),s&&(ay=f),l=new bD({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),FJ(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(h){e=h,f=vJ(e,l.rotation,s),s&&(ay=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let h=new Map;l.forComponent=function(p){let _=h.get(p);return _||(_=ly({path:e,level:t,stdStreams:r,isExternalInstance:p==="external",rotation:n,writeToLog:i,component:!0}),h.set(p,_)),_},l.hasComponent=function(p){return h.has(p)}}return l}o(ly,"createLogger");var MJ=100;function vJ(e,t,r){let n=LJ.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,LJ.set(e,n)),UJ&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let p=yJ();try{n.rotator=p({logger:n,...t})}catch(_){n("Error initializing log rotator",_)}},100));let u=0;return n;function d(p){u++;let _=`${new Date().toISOString()} ${p}${p.endsWith(`
126
+ `))}},25).unref()}l.close?.(()=>{if($s.get(fs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&mf()==0)try{w2(uRe($s.get(fs.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)))}catch{}clearInterval(u),setTimeout(()=>{console.log("forced close server",c,bR),l.cantCleanupProperly||Ri.warn("Had to forcefully exit the thread",bR),process.exit(0)},5e3).unref()})}if(C2||process.env.DEV_MODE)try{require("inspector").close()}catch(c){Ri.info("Could not close debugger",c)}}}).ref();let r;Jp&&!pRe&&(r=L2()),Promise.resolve(r).then(()=>{if(mf()===0)try{dRe(fRe)}catch(n){console.error("Error displaying start-up log",n)}I2?.postMessage({type:fs.ITC_EVENT_TYPES.CHILD_STARTED})})});return O2(t),t}o(P2,"startServers");function L2(){let e=[];for(let t in hf){let r=hf[t];if(t.includes?.("/")&&mf()==0){iRe(t)&&w2(t),e.push(new Promise((a,c)=>{r.listen({path:t},()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Ri.info("Domain socket listening on "+t)}).on("error",c)}));continue}let n,s=$s.get(fs.CONFIG_PARAMS.HTTP_THREADRANGE);if(s){let a=typeof s=="string"?s.split("-"):s,c=mf();if(c<a[0]||c>a[1])continue}let i;try{let a=t.lastIndexOf(":");a>0?Jp?n={fd:Jp(+t.slice(a+1).replace(/[\[\]]/g,""),t.slice(0,a))}:n={host:+t.slice(a+1).replace(/[\[\]]/g,""),port:t.slice(0,a)}:Jp?n={fd:Jp(+t,"::")}:n={port:t}}catch(a){console.error(`Unable to bind to port ${t}`,a);continue}e.push(new Promise((a,c)=>{r.listen(n,()=>{a({port:t,name:r.name,protocol_name:r.protocol_name}),Ri.trace("Listening on port "+t,bR)}).on("error",c)}))}return Promise.all(e)}o(L2,"listenOnPorts");!pL&&!nRe?.noServerStart&&P2();function ERe(e,t){let r=(Qd(),v(fp)).getComponentName,n;if(t.securePort){N2(t.securePort,{protocol_name:"TLS",name:r()});let s=lRe("server",t.mtls),i=$s.get("tls");n=aRe({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),hf[t.securePort]=n}return t.port&&(N2(t.port,{protocol_name:"TCP",name:r()}),n=sRe(e,{noDelay:!0,keepAlive:!0,keepAliveInitialDelay:600}),hf[t.port]=n),n}o(ERe,"onSocket")});var o2={};Ce(o2,{startHTTPThreads:()=>gRe,startSocketServer:()=>RL,updateWorkerIdleness:()=>k2});async function gRe(e=2,t){JI().catch(r=>Sf.error?.("Error recording hostname for analytics:",r));try{if(t)SL(0,1,!0);else{let{loadRootComponents:r}=IR();if(e===0)return(0,Vs.setMainIsWorker)(!0),await EL().startServers(),Promise.resolve([]);await r()}H2();for(let r=0;r<e;r++)SL(r,e);return Promise.all(F2)}finally{(0,Vs.threadsHaveStarted)()}}function H2(){let e=(0,U2.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),gL=setInterval(()=>{Sf.notify(e)},_Re).unref())}function SL(e,t=1,r){if(_L++,(0,Vs.startWorker)("server/threads/threadServer.js",{name:By.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((a,c)=>{function l(u){u.type===My.CHILD_STARTED&&(n.removeListener("message",l),a(n))}o(l,"onMessage"),n.on("message",l),n.on("error",c)});F2.push(s),await s,pf.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",a=>{if(a.requestId){let c=wR.get(a.requestId);c&&c(a)}}),n.on("exit",i),n.on("shutdown",i);function i(){let a=pf.indexOf(n);a>-1&&pf.splice(a,1)}if(o(i,"removeWorker"),Ef){let a=Ef;Ef=[];for(let c of a)B2[c.localPort](null,c)}}}),r){let n=setInterval(()=>{TL?TL=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,Vs.shutdownWorkers)(),_L=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function RL(e=0,t){if(typeof e=="string")try{(0,OR.existsSync)(e)&&(0,OR.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=SRe:r=TRe(t):r=yL;let n=(0,_f.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);return n._handle&&(n._handle.onconnection=B2[e]=function(s,i){r.readsData||(i.reading=!1,i.readStop()),TL=!0,r(i,(a,c)=>{if(!a){if(D2){let u=i._socket||new _f.Socket({handle:i,writable:!0,readable:!0});D2.deliverSocket(u,e,c),u.resume()}else _L>0?(Ef.length===0&&setTimeout(()=>{Ef.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,Ef.push(i)):(console.log("start up a dynamic thread to handle request"),SL(0));gt(!1,"socket-routed");return}a.requests++;let l=i.fd;if(l>=0)a.postMessage({port:e,fd:l,data:c});else{let u=i._socket||new _f.Socket({handle:i,writable:!0,readable:!0});ARe(u,a,e)}gt(!0,"socket-routed")})},Sf.info(`HarperDB ${x2.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 yL(e,t){let r,n=0;for(let s of pf){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=NR)return NR=i,t(r);n=i}NR=0,t(r)}function SRe(e,t){let r={};e.getpeername(r);let n=r.address,s=gf.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);yL(e,a=>{gf.set(n,{worker:a,lastUsed:i}),t(a)})}function TRe(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new _f.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",a=>{n.readStop();let l=a.toString("latin1").match(t)?.[1],u=gf.get(l),d=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=d,s(u.worker);yL(n,f=>{gf.set(l,{worker:f,lastUsed:d}),s(f,a)})})}o(r,"findByHeaderAffinity")}function k2(){NR=0;for(let e of pf)e.expectedIdle=e.recentELU.idle+RRe,e.requests=1;pf.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function ARe(e,t,r){let n=yRe++;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(),wR.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")),wR.delete(n)),s.event=="destroy"&&(e.destroy(),wR.delete(n))})}var Vs,_f,Sf,OR,v2,U2,x2,pf,Ef,B2,D2,_L,F2,gL,_Re,TL,NR,M2,gf,RRe,wR,yRe,nL=fe(()=>{Vs=w(st()),_f=require("net");k();Sf=w(z()),OR=require("fs");Hi();v2=require("worker_threads"),U2=w(kd()),x2=w(Rt()),pf=[],Ef=[],B2=[],_L=0,F2=[];v2.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,Vs.onMessageFromWorkers)(e=>{e.type===xy.RESTART&&gL&&(clearInterval(gL),H2())}));_Re=6e5;o(gRe,"startHTTPThreads");o(H2,"licenseWarning");o(SL,"startHTTPWorker");o(RL,"startSocketServer");NR=0;o(yL,"findMostIdleWorker");M2=36e5,gf=new Map;o(SRe,"findByRemoteAddressAffinity");o(TRe,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of gf)r.lastUsed+M2<e&&gf.delete(t)},M2).unref();RRe=1e3;o(k2,"updateWorkerIdleness");(0,Vs.setMonitorListener)(k2);wR=new Map,yRe=1;o(ARe,"proxySocket")});var AL={};Ce(AL,{hdbServer:()=>wRe,start:()=>wRe});async function wRe(e){try{ro.default.debug("In Fastify server"+process.cwd()),ro.default.debug(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ro.default.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=G2.default.isMaster,await ORe();let t=e.securePort>0;Tf=CRe(t),await Tf.ready(),e||(e={}),e.isOperationsServer=!0;try{ve.http(Tf.server,e),Tf.server.closeIdleConnections||await Tf.listen({port:0,host:"::"})}catch(r){throw Tf.close(),ro.default.error(r),ro.default.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),ro.default.fatal(t),process.exit(1)}}async function ORe(){ro.default.trace("Configuring HarperDB process."),j2.default.setSchemaDataToGlobal(),await J2.default.setUsersWithRolesCache(),await X2.default.getLicense()}function CRe(e){ro.default.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=PRe(e),r=(0,q2.default)(t);r.server.headersTimeout=DRe(),r.setErrorHandler(mc.serverErrorHandler);let n=LRe();n&&r.register($2.default,n),r.register(function(i,a,c){i.setNotFoundHandler(function(l,u){r.server.emit("unhandled",l.raw,u.raw)}),c()}),r.register(Y2.default),r.register(V2.default),r.register(K2.default,{root:W2.default.join(z2.PACKAGE_ROOT,"studio/build-local")}),tm(r);let s=fc.default.get(Dy.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!Q2.default.isEmpty(s)&&s.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.sendFile("running.html")}),r.post("/",{preValidation:[mc.reqBodyValidationHandler,mc.authHandler],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),(0,mc.handlePostRequest)(i,a)}),r.get("/health",()=>"HarperDB is running."),ro.default.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}function PRe(e){let t=fc.default.get(Zp.OPERATIONSAPI_NETWORK_TIMEOUT),r=fc.default.get(Zp.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:IRe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}function LRe(){let e=fc.default.get(Zp.OPERATIONSAPI_NETWORK_CORS),t=fc.default.get(Zp.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===NRe)&&(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 DRe(){return fc.default.get(Zp.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??bRe}var G2,fc,ro,q2,$2,V2,K2,Y2,W2,z2,j2,Q2,J2,X2,mc,bRe,IRe,NRe,Zp,Tf,Z2=fe(()=>{G2=w(require("cluster")),fc=w(ce());k();ro=w(z()),q2=w(require("fastify")),$2=w(require("@fastify/cors")),V2=w(require("@fastify/compress")),K2=w(require("@fastify/static")),Y2=w(DN()),W2=w(require("path")),z2=w(Rt()),j2=w(ei()),Q2=w(ie()),J2=w(Jn()),X2=w(kd());Pr();mc=w(zT());po();fc.default.initSync();bRe=6e4,IRe=1024*1024*1024,NRe="TRUE",{CONFIG_PARAMS:Zp}=K;o(wRe,"operationsServer");o(ORe,"setUp");o(CRe,"buildServer");o(PRe,"getServerOptions");o(LRe,"getCORSOpts");o(DRe,"getHeaderTimeoutConfig")});var CL={};Ce(CL,{disableNATS:()=>vRe,publishToStream:()=>LR,setNATSReplicator:()=>bL,setPublishToStream:()=>URe,setSubscription:()=>OL,start:()=>MRe});function MRe(){eE.default.get(U.CLUSTERING_ENABLED)&&BRe()}function vRe(e=!0){sQ=e}function URe(e,t){LR=e,OL=t}function BRe(){if(sQ||process.env._DISABLE_NATS)return;let e=it(),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];bL(s,r,i)}}gl((r,n)=>{bL(r.tableName,r.databaseName,r),n&&oQ(r)}),!eQ&&(eQ=!0)}function bL(e,t,r){if(t==="system"&&FRe.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 Dr{static{o(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this.getId(),record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this.getId()})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this.getId(),record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this.getId(),record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this.getId()})}static defineSchema(i){oQ(i)}static subscribe(){let i=new $n;return OL(t,e,i),i}static subscribeOnThisThread(i){return i<(eE.default.get(U.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??xRe)}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 CR(s.transaction,s);let a=s.transaction;for(;a.next;)a=a.next;a.next=s.transaction.nats,i.user=s.user,i.context=s}else i=iQ;return i}o(n,"getNATSTransaction")}function oQ(e){let t=eE.default.get(U.CLUSTERING_NODENAME);LR(`${NL.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,wL.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 tQ,NL,wL,rQ,nQ,eE,PR,sQ,LR,OL,xRe,iQ,eQ,FRe,CR,IL,aQ=fe(()=>{Le();ba();tQ=w(lr()),NL=w(It()),wL=w(xi());pu();rQ=w(zN()),nQ=w(An()),eE=w(ce());k();PR=w(z());o(MRe,"start");o(vRe,"disableNATS");LR=tQ.publishToStream,OL=rQ.setSubscription;o(URe,"setPublishToStream");xRe=2;o(BRe,"assignReplicationSource");FRe=["hdb_job","hdb_raw_analytics","hdb_info","hdb_license"];o(bL,"setNATSReplicator");o(oQ,"publishSchema");CR=class{constructor(t,r){this.transaction=t;this.options=r}static{o(this,"NATSTransaction")}user;writesByDb=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writesByDb.get(t);n||this.writesByDb.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=eE.default.get(U.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writesByDb){let a=[],c=[],l,u;for(let d of i){let f=d.table,m=d.operation=="put"?"upsert":d.operation;l||(PR.trace(`Sending transaction event ${m}`),u=l={operation:m,schema:s,table:f,__origin:{user:this.user?.username,timestamp:t,node_name:r}},l.hash_values=c,m!=="delete"&&m!=="invalidate"&&(l.records=a)),l.table===f&&l.operation===m?(a.push(d.record),c.push(d.id)):u=u.next={operation:m,table:f,id:d.id,record:d.record},d.expiresAt&&(u.expiresAt=d.expiresAt)}l&&n.push(LR(`${NL.SUBJECT_PREFIXES.TXN}.${s}.${l.table}`,(0,wL.createNatsTableStreamName)(s,l.table),void 0,l)?.catch(d=>{throw PR.error("An error has occurred trying to replicate transaction",l,d),d.statusCode=504,d}))}return Promise.all(n)}},IL=class extends CR{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,nQ.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};iQ=new IL});async function fQ({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let a=await PL.get(e,{returnNonexistent:!0});i=new ML(e,t,a),a&&(i.sessionWasPresent=!0)}else{if(e){let a=await PL.get(e);a&&a.delete()}i=new MR(e,t)}return n&&(n.id=e,n.user={username:t?.username},tE.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function LL(){return DR++,DR>65500&&(DR=1),DR}function DL(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=As.getMatch(n,"mqtt");if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let a=new Js(i.relativeURL);a.checkPermission=r.user?.role?.permission??{};let c=i.Resource;return vt(r,()=>s?t===void 0?c.delete(a,r):c.put(a,e.data,r):c.publish(a,e.data,r))}var lQ,hc,uQ,dQ,cQ,PL,tE,DR,MR,ML,mQ=fe(()=>{Le();Pu();lQ=w(An()),hc=w(z());Uc();uQ=w(st()),dQ=w(EL());Pr();y_();cQ=100,PL=et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]}),tE=et({database:"system",table:"hdb_session_will",attributes:[{name:"id",isPrimaryKey:!0},{name:"topic",type:"string"},{name:"data"},{name:"qos",type:"number"},{name:"retain",type:"boolean"},{name:"user",type:"any"}]});(0,uQ.getWorkerIndex)()===0&&(async()=>{await dQ.whenComponentsLoaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of tE.search({})){let t=e.data,r={...e};r.user?.username&&(r.user=await ve.getUser(r.user.username));try{await DL(r,t,r)}catch{(0,hc.warn)("Failed to publish will",t)}tE.delete(e.id)}})();o(fQ,"getSession");DR=1;o(LL,"getNextMessageId");MR=class{static{o(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:a}=t,c=s.indexOf("?"),l,u;if(c>-1?(l=s.slice(c),u=s.slice(0,c)):u=s,!u)throw new Error("No topic provided");if(u.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let d=this.subscriptions.find(T=>T.topic===s),f;d?(f=i>0,d.end(),this.subscriptions.splice(this.subscriptions.indexOf(d),1)):f=i===2;let m={search:l,async:!0,user:this.user,startTime:a,omitCurrent:f,target:"",checkPermission:this.user?.role?.permission??{}};a&&(0,hc.trace)("Resuming subscription from",s,"from",a);let h=As.getMatch(u,"mqtt");if(!h){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}m.url=h.relativeURL;let p;if(m.url.indexOf("+")>-1||(p=m.url.indexOf("#"))>-1){let T=m.url.slice(1);if(p--,p>-1&&p!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(m.isCollection=!0,T.indexOf("+")===T.length-1)m.onlyChildren=!0,m.url="/"+T.slice(0,T.length-1);else{let R=T.split("/"),I;for(let te=0;te<R.length;te++)if(R[te].indexOf("+")>-1)if(R[te]==="+")I=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&I)throw new Error("Filters can not be combined");let P=!0;R[R.length-1]==="#"&&(R.length--,P=!1),I&&(n=o(te=>{let x=te.id;if(!Array.isArray(x))if(x?.indexOf?.("/")>-1)x=x.split("/");else return!1;if(P&&x.length!==R.length)return!1;for(let $=0;$<R.length;$++)if(R[$]!=="+"&&R[$]!==x[$])return!1;return!0},"filter"));let Y=R.indexOf("+");m.url="/"+(Y>-1?R.slice(0,Y):R).concat("").join("/")}}else m.isCollection=!1;let _=h.path,g=h.Resource,y=await vt(m,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i,T.isCollection=m.isCollection;let R=await g.subscribe(m,T);if(!R)return;if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let I=(async()=>{for await(let P of R)try{let Y;if(P.type&&P.type!=="put"&&P.type!=="delete"&&P.type!=="message"&&P.type!=="patch"||n&&!n(P))continue;r?(P.topic=s,Y=this.needsAcknowledge(P)):(P.acknowledge?.(),Y=LL());let te=P.id;if(Array.isArray(te)&&(te=Cu(te)),te==null&&(te=""),await this.listener(_+"/"+te,P.value,Y,t)===!1)break;this.awaitingAcks?.size>cQ?await new Promise($=>setTimeout($,this.awaitingAcks.size-cQ)):await new Promise(setImmediate)}catch(Y){(0,hc.warn)(Y)}})();return R});if(y)return y.topic=s,y.qos=t.qos,this.subscriptions.push(y),y}resume(){}needsAcknowledge(t){let r=LL();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 DL(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();vt(r,async()=>{try{if(!t){let n=await tE.get(this.sessionId);n?.doesExist()&&await DL(n,n.data,r)}}finally{await tE.delete(this.sessionId)}}).catch(n=>{(0,hc.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};o(DL,"publish");ML=class extends MR{static{o(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.localTime):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=LL(),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,hc.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,lQ.getNextMonotonicTime)()),(0,hc.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),PL.put(this.sessionRecord)}}});var vL={};Ce(vL,{bypassAuth:()=>HRe,start:()=>GRe});function HRe(){TQ=!0}function GRe({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new SQ.EventEmitter},e.mqtt.events.on("error",()=>{}));let a=e.mqtt,c=[],l=r?.mtls;return n&&(c=e.ws((u,d,f,m)=>{if(d.headers.get("sec-websocket-protocol")!=="mqtt")return m(u,d,f);a.events.emit("connection",u),nr.debug?.("Received WebSocket connection for MQTT from",u._socket.remoteAddress);let{onMessage:h,onClose:p}=pQ(u,_=>{u.send(_)},d,Promise.resolve(f).then(()=>d?.user),a);u.on("message",h),u.on("close",p),u.on("error",_=>{nr.info?.("WebSocket error",_)})},{...n})),(t||s)&&c.push(e.socket(async u=>{let d;if(a.events.emit("connection",u),nr.debug?.(`Received ${u.getCertificate?"SSL":"TCP"} connection for MQTT from ${u.remoteAddress}`),l){if(u.authorized)try{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,Rf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&UR.notify?.({username:d?.username,status:Ys.SUCCESS,type:ha.AUTHENTICATION,authStrategy:"MQTT mTLS",remoteAddress:u.remoteAddress})}catch(p){throw(0,Rf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&UR.error?.({username:h,status:Ys.FAILURE,type:ha.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:u.remoteAddress}),p}}else nr.debug?.("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",u.remoteAddress)}catch(h){a.events.emit("error",h,u),nr.error?.(h)}else if(l.required)return nr.info?.(`Unauthorized connection attempt, no authorized client certificate provided, error: ${u.authorizationError}`),u.end()}!d&&kRe(u.remoteAddress)&&(d=await(0,EQ.getSuperUser)(),nr.debug?.("Auto-authorizing local connection",d?.username));let{onMessage:f,onClose:m}=pQ(u,h=>u.write(h),null,d,a);u.on("data",f),u.on("close",m),u.on("error",h=>{nr.info?.("Socket error",h)})},{port:t,securePort:s,mtls:l})),c}function pQ(e,t,r,n,s){hQ||(hQ=!0,th(f=>{vR>0&&f.push({metric:"mqtt-connections",connections:vR,byThread:!0})}));let i;vR++;let a,c={protocolVersion:4},l=(0,xR.parser)({protocolVersion:5});function u(f){l.parse(f)}o(u,"onMessage");function d(){vR--,i||(i=!0,a?.disconnect?.(),s.events.emit("disconnected",a,e),s.sessions.delete(a),Kr(!1,"connection","mqtt","disconnect"),nr.debug?.("MQTT connection was closed",e.remoteAddress))}return o(d,"onClose"),l.on("packet",async f=>{try{n?.then&&(n=await n)}catch(R){e.close?.(1008,"Unauthorized"),nr.info?.(R);return}let m=f.cmd;if(a)a.then&&await a;else if(m!=="connect"){nr.info?.("Received packet before connection was established, closing connection"),e?.destroy?e.destroy():e?.terminate();return}let h=f.topic,p=h?.indexOf("/",1),_=p>0?h.slice(0,p):h;gt(f.length,"bytes-received",_,y(f),"mqtt");try{switch(a?.receivedPacket?.(),m){case"connect":if(c.protocolVersion=f.protocolVersion,f.username)try{n=await ve.getUser(f.username,f.password.toString(),r),(0,Rf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&UR.notify?.({username:n?.username,status:Ys.SUCCESS,type:ha.AUTHENTICATION,authStrategy:"MQTT",remoteAddress:e.remoteAddress})}catch(j){return(0,Rf.get)(U.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&UR.error?.({username:f.username,status:Ys.FAILURE,type:ha.AUTHENTICATION,authStrategy:"mqtt",remoteAddress:e.remoteAddress}),s.events.emit("auth-failed",f,e,j),Kr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",f,e),Kr(!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=ho(r?.headers.get?.("content-type")));f.will.data=f.will.payload?.length>0?j(f.will.payload):void 0,delete f.will.payload}a=fQ({user:n,...f}),a=await a,a.socket=e,r&&(a.request=r),s.sessions.add(a)}catch(j){return nr.error?.(j),s.events.emit("auth-failed",f,e,j),Kr(!1,"connection","mqtt","connect"),g({cmd:"connack",reasonCode:j.code||5,returnCode:j.code||128})}s.events.emit("connected",a,e),Kr(!0,"connection","mqtt","connect"),g({cmd:"connack",sessionPresent:a.sessionWasPresent,reasonCode:0,returnCode:0});let R=o(async(j,V,le,re)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",j);let se=j.indexOf("/",1),_e=se>0?j.slice(0,se):j;g({cmd:"publish",topic:j,payload:await T(V),messageId:le||Math.floor(Math.random()*1e8),qos:re.qos},_e);let Ne=e._socket??e;return Ne.writableNeedDrain?new Promise(Fe=>Ne.once("drain",Fe)):!Ne.closed}catch(se){return nr.error?.(se),a?.disconnect(),s.sessions.delete(a),!1}},"listener");a.setListener(R),a.sessionWasPresent&&await a.resume();break;case"subscribe":let I=[];for(let j of f.subscriptions){let V;try{let le=await a.addSubscription(j,j.qos>=1);V=le?le.qos||0:c.protocolVersion<5?128:143}catch(le){s.events.emit("error",le,e,j,a),le.statusCode?le.statusCode===500?nr.warn?.(le):nr.info?.(le):nr.error?.(le),V=c.protocolVersion<5?128:le.statusCode===403?135:le.statusCode===404?143:128}I.push(V)}await a.committed,g({cmd:"suback",granted:I,messageId:f.messageId});break;case"unsubscribe":{let j=[];for(let V of f.unsubscriptions)j.push(a.removeSubscription(V)?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 P=f.qos===2?"pubrec":"puback",Y=e.deserialize||(e.deserialize=ho(r?.headers.get?.("content-type"))),x=(f.payload?.length||0)>0?Y(f.payload):void 0,$;try{$=await a.publish(f,x)}catch(j){s.events.emit("error",j,e,f,a),nr.warn?.(j),f.qos>0&&g({cmd:P,messageId:f.messageId,reasonCode:128},f.topic);break}f.qos>0&&g({cmd:P,messageId:f.messageId,reasonCode:$===!1?144:0},f.topic);break;case"pubrec":g({cmd:"pubrel",messageId:f.messageId,reasonCode:0});break;case"pubcomp":case"puback":a.acknowledge(f.messageId);break;case"pingreq":g({cmd:"pingresp"});break;case"disconnect":i=!0,a?.disconnect(!0),s.events.emit("disconnected",a,e),s.sessions.delete(a),Kr(!0,"connection","mqtt","disconnect"),nr.debug?.("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,f,a),nr.error?.(R),g({cmd:"disconnect"})}function g(R,I){let P=(0,xR.generate)(R,c);t(P),gt(P.length,"bytes-sent",I,y(R),"mqtt")}o(g,"sendPacket");function y(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}o(y,"packetMethodName");function T(R){return ga(R,r)}o(T,"serialize")}),l.on("error",f=>{nr.warn("MQTT parsing error, closing connection:",f.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:u,onClose:d}}var xR,EQ,Rf,_Q,gQ,SQ,UR,nr,TQ,kRe,hQ,vR,RQ=fe(()=>{xR=require("mqtt-packet");mQ();EQ=w(Jn());po();Hi();Pr();Rf=w(ce());k();_Q=w(Ni()),gQ=w(z()),SQ=require("events"),UR=(0,_Q.loggerWithTag)("auth-event"),nr=(0,gQ.forComponent)("mqtt"),TQ=(0,Rf.get)(U.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;o(HRe,"bypassAuth");kRe=o(e=>TQ&&(e.includes("127.0.0.")||e==="::1"),"authorizeLocal");o(GRe,"start");vR=0;o(pQ,"onSocket")});function BR(e,t){if(t?.includes(".."))throw new UL(t);let r=t||"/";return(r==="."||r.startsWith("./"))&&(r=`/${e}${r.slice(1)}`),r.startsWith("/")||(r=`/${r}`),r.endsWith("/")||(r=`${r}/`),r}var UL,xL=fe(()=>{UL=class extends Error{static{o(this,"InvalidBaseURLPathError")}constructor(t){super(`urlPath must not contain '..'. Received: '${t}'`)}};o(BR,"resolveBaseURLPath")});function yQ(e){if(e.length===0)return".";if(e.length===1)return e[0];let t=e.map(s=>s.split("/")),r=Math.min(...t.map(s=>s.length)),n=[];for(let s=0;s<r;s++){let i=t[0][s];if(t.every(a=>a[s]===i))n.push(i);else break}return n.length===0?".":n.join("/")}var AQ=fe(()=>{o(yQ,"deriveCommonPatternBase")});function FR(e){let t={source:[],onlyFiles:!1,onlyDirectories:!1,ignore:[]},r=o((n,s)=>{typeof s=="string"?n.push(s):Array.isArray(s)&&n.push(...s)},"addToArray");return typeof e=="string"||Array.isArray(e)?r(t.source,e):(r(t.source,e.source),r(t.ignore,e.ignore),t.onlyFiles=e.only==="files",t.onlyDirectories=e.only==="directories"),t}var BL=fe(()=>{o(FR,"deriveGlobOptions")});var bQ,FL,rE,IQ=fe(()=>{xL();AQ();BL();bQ=require("micromatch"),FL=class extends Error{static{o(this,"ComponentInvalidPatternError")}constructor(t){super(`Config 'files' option glob pattern must not contain '..' or start with '/'. Received: '${t}'`),this.name="ComponentInvalidPatternError"}},rE=class{static{o(this,"Component")}globOptions;baseURLPath;patternBases;directory;name;config;commonPatternBase;constructor(t,r,n){this.name=t,this.directory=r,this.config=n,this.baseURLPath=BR(this.name,this.config.urlPath),this.globOptions=FR(this.config.files),this.globOptions.source=this.globOptions.source.map(s=>{if(s.includes("..")||s.startsWith("/"))throw new FL(s);return s==="."||s==="./"?"**/*":s}),this.patternBases=this.globOptions.source.map(s=>(0,bQ.scan)(s).base),this.commonPatternBase=yQ(this.patternBases)}}});function NQ(e,t){return new RegExp(`^${e}(/|$)`).test(t)}function nu(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(NQ(n,t)){t=t.slice(n.length+1);break}}if(r==="directory"){if(t===n){t="";break}else if(NQ(n,t)){t=t.slice(n.length+1);break}}}return(0,wQ.join)(e.baseURLPath,t)}var wQ,HL=fe(()=>{wQ=require("node:path");o(NQ,"pathStartsWithBase");o(nu,"deriveURLPath")});function OQ(e){return typeof e=="string"||Array.isArray(e)||!("files"in e)?{files:e}:e}var kR,CQ,PQ,kL,LQ,DQ,HR,MQ=fe(()=>{kR=require("node:events");IQ();CQ=w(z()),PQ=w(require("chokidar")),kL=require("node:path"),LQ=require("node:fs/promises");HL();DQ=require("micromatch"),HR=class extends kR.EventEmitter{static{o(this,"EntryHandler")}#e;#t;#r;ready;constructor(t,r,n,s){super(),this.#e=new rE(t,r,OQ(n)),this.#r=s||CQ.default.loggerWithTag(t),this.ready=(0,kR.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,DQ.isMatch)(r,this.#e.globOptions.source,{ignore:this.#e.globOptions.ignore}))return;let s=(0,kL.join)(this.directory,r);switch(t){case"add":case"change":{let i=nu(this.#e,r,"file");(0,LQ.readFile)(s).then(a=>{let c={eventType:t,entryType:"file",contents:a,stats:n,absolutePath:s,urlPath:i};this.emit("all",c),this.emit(t,c)});break}case"unlink":{let i=nu(this.#e,r,"file"),a={eventType:t,entryType:"file",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}case"addDir":case"unlinkDir":{let i=nu(this.#e,r,"directory"),a={eventType:t,entryType:"directory",stats:n,absolutePath:s,urlPath:i};this.emit("all",a),this.emit(t,a);break}}}#s(t){this.emit("error",t)}#i(){this.emit("ready")}async#a(){await this.#t?.close(),this.#t=void 0;let t=this.#e.patternBases.map(r=>(0,kL.join)(this.#e.directory,r));return this.#t=PQ.default.watch(this.#e.commonPatternBase,{cwd:this.#e.directory,persistent:!1,ignored:o(r=>r!==this.#e.directory&&t.every(n=>!r.startsWith(n)),"ignored")}).on("all",this.#n.bind(this)).on("error",this.#s.bind(this)).on("ready",this.#i.bind(this)),this.ready}close(){return this.#t?.close(),this.#t=void 0,this.emit("close"),this.removeAllListeners(),this}update(t){return this.#e=new rE(this.name,this.directory,OQ(t)),this.#a()}};o(OQ,"castConfig")});var GR,GL=fe(()=>{GR={rest:!0,graphqlSchema:{files:"*.graphql"},roles:{files:"roles.yaml"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js"},static:{files:"web/**"}}});var $R,vQ,UQ,xQ,BQ,FQ,qL,$L,VL,KL,YL,qR,HQ=fe(()=>{$R=require("events"),vQ=w(require("yaml")),UQ=w(require("chokidar")),xQ=require("node:fs/promises"),BQ=require("util"),FQ=w(z());GL();qL=class extends Error{static{o(this,"OptionsWatcherConfigFileError")}constructor(t,r){super(`Error watching config file ${t}: ${typeof r=="object"&&r!==null&&"message"in r?r.message:r}`),this.name="OptionsWatcherConfigFileError"}},$L=class extends Error{static{o(this,"InvariantUninitializedOptionsWatcherError")}constructor(){super("Invariant: OptionsWatcher has not been initialized yet. This should never happen."),this.name="InvariantUninitializedOptionsWatcherError"}},VL=class extends Error{static{o(this,"InvalidValueTypeError")}constructor(t,r){super(`Invalid value type for key ${t.join(".")}. Expected object, string, array, number, boolean, or undefined. Received ${typeof r}.`),this.name="InvalidValueTypeError"}},KL=class extends Error{static{o(this,"KeyDoesNotExistError")}constructor(t,r){super(`Cannot set property ${t.join(".")} as ${r} does not exist.`),this.name="KeyDoesNotExistError"}},YL=class extends Error{static{o(this,"CannotSetPropertyError")}constructor(t){super(`Cannot set property ${t.join(".")} as parent is not an object.`),this.name="CannotSetPropertyError"}},qR=class extends $R.EventEmitter{static{o(this,"OptionsWatcher")}#e;#t;#r;#n;#s;#i;ready;constructor(t,r,n){super(),this.#s=t,this.#e=r,this.#i=n||FQ.default.loggerWithTag(t),this.ready=(0,$R.once)(this,"ready"),this.#t=UQ.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,xQ.readFile)(this.#e,"utf-8").then(t=>{this.#n=vQ.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 qL(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=GR,this.#r=this.#n[this.#s]}#f(t,r,n=[]){if(!this.#l(r)||!this.#l(t)){this.#u(n,t);return}for(let s of Object.keys(r))s in t||this.#u(n.concat(s),void 0);for(let[s,i]of Object.entries(t)){let a=n.concat(s),c=this.#m(a);if(typeof i!=typeof c||Array.isArray(i)&&!Array.isArray(c)||!Array.isArray(i)&&Array.isArray(c)){this.#u(a,i);continue}if(!Array.isArray(i)&&typeof i=="object"&&i!==null){this.#l(c)?this.#f(i,c,a):this.#u(a,i);continue}(0,BQ.isDeepStrictEqual)(i,c)||this.#u(a,i)}}#l(t){return typeof t=="object"&&t!==null&&t!==void 0&&!Array.isArray(t)}#m(t){let r=this.#r;for(let n of t){if(r==null||typeof r!="object"||!(n in r))return;r=r[n]}return structuredClone(r)}#u(t,r){if(!this.#r)throw new $L;if(!["object","string","array","number","boolean","undefined"].includes(typeof r))throw new VL(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 KL(t,s);n=n[s]}if(n==null||typeof n!="object")throw new YL(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}}});function kQ(){$Re[0]=1}var qRe,$Re,GQ=fe(()=>{Sp();qRe=qo.primaryStore.getUserSharedBuffer("restart-needed",new ArrayBuffer(1)),$Re=new Uint8Array(qRe);o(kQ,"requestRestart")});var YR,qQ,VR,KR,$Q=fe(()=>{YR=require("node:events");MQ();HQ();qQ=w(z());GQ();VR=class extends Error{static{o(this,"MissingDefaultFilesOptionError")}constructor(){super("No default files option exists. Ensure `files` is specified in config.yaml"),this.name="MissingDefaultFilesOptionError"}},KR=class extends YR.EventEmitter{static{o(this,"Scope")}#e;#t;#r;#n;#s;#i;options;resources;server;ready;constructor(t,r,n,s,i){super(),this.#r=t,this.#t=r,this.#e=n,this.#i=qQ.default.forComponent(this.#r),this.resources=s,this.server=i,this.#s=[],this.ready=(0,YR.once)(this,"ready"),this.options=new qR(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 HR(this.#r,this.#t,t,this.#i).on("error",this.#d.bind(this)).on("add",this.#o("add")).on("change",this.#o("change")).on("unlink",this.#o("unlink")).on("addDir",this.#o("addDir")).on("unlinkDir",this.#o("unlinkDir"));return this.#s.push(r),r}#o(t){let r=this;return function(){this.listenerCount("all")>0||this.listenerCount(t)>1||r.requestRestart()}}#f(){let t=this;return o(function(...[n,s,i]){if(n[0]==="files"||n[0]==="urlPath"){if(!t.#n){t.#n=t.#c(i);return}t.#n.update(i);return}this.listenerCount("change")>1||(t.#i.debug(`Options changed: ${n.join(".")}, requesting restart`),t.requestRestart())},"handleOptionsWatcherChange")}#l(){let t=this.options.getAll();if(t&&typeof t=="object"&&t!==null&&!Array.isArray(t)&&"files"in t)return t.files}handleEntry(t,r){if(t===void 0){if(this.#n)return this.#n;let s=this.#l();if(s)return this.#n=this.#c(s),this.#n;this.emit("error",new VR);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 VR);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}`),kQ()}}});function su(e){return typeof e=="string"&&e.trim()!==""}function WL(e){return Array.isArray(e)&&e.length!==0&&e.every(t=>su(t))}function WQ(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}async function VRe(e){e.config.root&&nE.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 eD(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(WQ(e.config.files)&&e.config.files.only==="files")return!1;t=e.patternBases}let s=!1;for(let i of t){let a=(0,sE.join)(e.directory,i);WR.isMainThread&&e.module.setupDirectory&&(s=await e.module.setupDirectory(e.baseURLPath,a,e.resources)),e.resources.isWorker&&e.module.handleDirectory&&(s=await e.module.handleDirectory(e.baseURLPath,a,e.resources))}return s}async function zQ(e){let t=!1;if(t=await VRe(e),t)return t;let r=await(0,VQ.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,sE.join)(e.directory,n.path);if(n.dirent.isDirectory()){let i=nu(e,n.path,"directory");WR.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=nu(e,n.path,"file"),a=await(0,KQ.readFile)(s);WR.isMainThread&&e.module.setupFile?(await e.module.setupFile(a,i,s,e.resources),t=!0):e.resources.isWorker&&e.module.handleFile&&(await e.module.handleFile(a,i,s,e.resources),t=!0)}else nE.default.error(`Entry received from glob pattern match for component ${e.name} is neither a file nor a directory:`,n)}return t}var WR,VQ,nE,sE,KQ,YQ,zR,yi,zL,jL,QL,JL,XL,ZL,eD,tD,rD,jQ=fe(()=>{WR=require("node:worker_threads"),VQ=w(require("fast-glob")),nE=w(z());xL();BL();sE=require("node:path"),KQ=require("node:fs/promises");HL();YQ=require("micromatch"),zR=class{static{o(this,"ComponentV1")}config;name;directory;module;resources;globOptions;patternBases;baseURLPath;constructor(t){if(this.config=t.config,this.name=t.name,this.directory=t.directory,this.module=t.module,this.resources=t.resources,!su(this.config.files)&&!WL(this.config.files)&&!WQ(this.config.files))throw new zL(this);if(typeof this.config.files=="object"&&!Array.isArray(this.config.files)){if(this.config.files.source===void 0||!WL(this.config.files.source)&&!su(this.config.files.source))throw new jL(this);if(this.config.files.only!==void 0&&(typeof this.config.files.only!="string"||!["all","files","directories"].includes(this.config.files.only)))throw new QL(this);if(this.config.files.ignore!==void 0&&!WL(this.config.files.ignore)&&!su(this.config.files.ignore))throw new JL(this)}if(this.config.root!==void 0&&!su(this.config.root))throw new ZL(this);if(this.config.path!==void 0&&!su(this.config.path))throw new tD(this);if(this.config.path&&(nE.default.warn("Resource extension 'path' option is deprecated. Please replace with 'urlPath'."),this.config.urlPath=this.config.path),this.config.urlPath!==void 0&&(!su(this.config.urlPath)||typeof this.config.urlPath=="string"&&this.config.urlPath.includes("..")))throw new rD(this);this.globOptions=FR(this.config.files),this.globOptions.source=this.globOptions.source.map(r=>{if(r.includes(".."))throw new XL(this,r);return r.startsWith("/")&&(nE.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,YQ.scan)(r).base),this.baseURLPath=BR(this.name,this.config.urlPath)}},yi=class extends Error{static{o(this,"ComponentV1ProcessingError")}constructor(t,r){super(`Component ${r.name} (from ${(0,sE.basename)(r.directory)}) ${t}`)}},zL=class extends yi{static{o(this,"InvalidFilesOptionError")}constructor(t){super("'files' option must be a non-empty string, an array of non-empty strings, or an object.",t)}},jL=class extends yi{static{o(this,"InvalidFilesSourceOptionError")}constructor(t){super("'files' object must have a non-empty 'source' property.",t)}},QL=class extends yi{static{o(this,"InvalidFilesOnlyOptionError")}constructor(t){super("'files.only' option must be one of 'all', 'files', or 'directories'.",t)}},JL=class extends yi{static{o(this,"InvalidFileIgnoreOptionError")}constructor(t){super("'files.ignore' option must be a non-empty string or an array of non-empty strings.",t)}},XL=class extends yi{static{o(this,"InvalidGlobPattern")}constructor(t,r){super(`'files' glob pattern must not contain '..'. Received: '${r}'`,t)}},ZL=class extends yi{static{o(this,"InvalidRootOptionError")}constructor(t){super("deprecated 'root' option must be a non-empty string. Consider removing and updating 'files' glob pattern instead.",t)}},eD=class extends yi{static{o(this,"InvalidRootOptionUseError")}constructor(t){super("the 'root' option is deprecated and only supported if 'files' is a singular, non-empty string. Please remove the 'root' option and modify the 'files' glob pattern instead.",t)}},tD=class extends yi{static{o(this,"InvalidPathOptionError")}constructor(t){super("deprecated 'path' option must be a non-empty string. Consider replacing with 'urlPath'.",t)}},rD=class extends yi{static{o(this,"InvalidURLPathOptionError")}constructor(t){super("'urlPath' option must be a non-empty string that must not contain '..'.",t)}};o(su,"isNonEmptyString");o(WL,"isArrayOfNonEmptyStrings");o(WQ,"isObject");o(VRe,"handleRoots");o(zQ,"processResourceExtensionComponent")});var fp={};Ce(fp,{componentErrors:()=>iE,getComponentName:()=>AR,loadComponent:()=>XR,loadComponentDirectories:()=>XQ,setErrorReporter:()=>YRe});function XQ(e,t){t&&(sD=t),e&&(cD=e);let r=[];if((0,Pt.existsSync)(nD)){let s=(0,Pt.readdirSync)(nD,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Fr.join)(nD,a);r.push(XR(c,sD,Oy,!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(XR(n,sD,n,!1,void 0,!!process.env.DEV_MODE)),Promise.all(r).then(()=>{JQ=!0})}function YRe(e){QR=e}function WRe(e,t){return new Promise((r,n)=>{let s=setTimeout(()=>{qo.primaryStore.unlock(e,0),n(new Error("symlinking harperdb module timed out"))},1e4);if(qo.primaryStore.attemptLock(e,0,()=>{clearTimeout(s),r()}))try{(0,Pt.rmSync)(t,{recursive:!0,force:!0}),(0,Pt.existsSync)((0,Fr.join)(e,"node_modules"))||(0,Pt.mkdirSync)((0,Fr.join)(e,"node_modules")),(0,Pt.symlinkSync)(uD.PACKAGE_ROOT,t,"dir"),r()}finally{qo.primaryStore.unlock(e,0)}})}function ZQ(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 qo.primaryStore.attemptLock(e.name,0,()=>{clearTimeout(s),n(ZQ(e,t))})?Promise.race([t.handleApplication(e),new Promise((i,a)=>setTimeout(()=>a(new Error(`handleApplication timed out after ${r}ms for ${e.name}`)),r))]).finally(()=>{qo.primaryStore.unlock(e.name,0)}):new Promise((i,a)=>{n=i,s=setTimeout(()=>{a(new Error(`Timeout waiting for lock on ${e.name}`))},r+5e3)})})}async function XR(e,t,r,n,s,i){let a=(0,Pt.realpathSync)(e);if(jR.has(a))return jR.get(a);jR.set(a,!0),s&&(cD=s);try{let c;n&&(iE=new Map);let l=(0,Fr.join)(e,"harperdb-config.yaml");(0,Pt.existsSync)(l)?c=n?(0,ZR.getConfigObj)():(0,oD.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():!n&&(0,Pt.existsSync)(l=(0,Fr.join)(e,"config.yaml"))?c=(0,oD.parseDocument)((0,Pt.readFileSync)(l,"utf8")).toJSON():c=GR;try{let m=(0,Fr.join)(e,"node_modules","harperdb");(n||((0,Pt.existsSync)(m)||!e.startsWith((0,aD.getHdbBasePath)()))&&(!(0,Pt.existsSync)(m)||(0,Pt.realpathSync)(uD.PACKAGE_ROOT)!==(0,Pt.realpathSync)(m)))&&await WRe(e,m)}catch(m){na.default.error("Error symlinking harperdb module",m),m.code=="EPERM"&&process.platform==="win32"&&na.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=JR,d={};for(let m in c){JR=m;let h=c[m];if(iE.set(n?m:(0,Fr.basename)(e),!1),!h)continue;let p,_=h.package;try{if(_){let I=e,P;for(;!(0,Pt.existsSync)(P=(0,Fr.join)(I,"node_modules",m));)if(I=(0,Fr.dirname)(I),I.length<(0,aD.getHdbBasePath)().length){P=null;break}if(P)p=await XR(P,t,r,!1),d[m]=!0;else throw new Error(`Unable to find package ${m}:${_}`)}else p=KRe[m];if(!p)continue;let g=o(I=>(I.origin=r,et(I)),"ensureTable"),y=h.network||(h.port||h.securePort)&&h,T=y?.securePort||y?.https&&y.port,R=!y?.https&&y?.port;if("handleApplication"in p&&("start"in p||"startOnMainThread"in p||"handleFile"in p||"handleDirectory"in p||"setupFile"in p||"setupDirectory"in p))throw new Error(`Component ${m} has both 'handleComponent' and 'start' or 'startOnMainThread' methods. Please use only one of them.`);if(t.isWorker&&p.handleApplication){p.suppressHandleApplicationWarning!==!0&&na.default.warn(`Plugin ${m} is using the experimental handleApplication API`);let I=new KR(m,e,l,t,ve);await ZQ(I,p);continue}if(iD.isMainThread&&(p=await p.startOnMainThread?.({server:ve,ensureTable:g,port:R,securePort:T,resources:t,...h})||p,n&&y))for(let I of[R,T])try{if(+I&&!QQ.includes(I)){let P=lD.get(U.HTTP_SESSIONAFFINITY);P&&na.default.warn("Session affinity is not recommended and may cause memory leaks"),(P||!Bg)&&(QQ.push(I),RL(I,P))}}catch(P){console.error("Error listening on socket",I,P,m)}if(t.isWorker&&(p=await p.start?.({server:ve,ensureTable:g,port:R,securePort:T,resources:t,...h})||p),cD.set(p,!0),(p.handleFile||p.handleDirectory||p.setupFile||p.setupDirectory)&&h.files!=null){let I=new zR({config:h,name:m,directory:e,module:p,resources:t});d[m]=await zQ(I)}}catch(g){g.message=`Could not load component '${m}' for application '${(0,Fr.basename)(e)}' due to: ${g.message}`,QR?.(g),((0,oE.getWorkerIndex)()===0?console:na.default).error(g),t.set(h.path||"/",new Qc(g),null,!0),iE.set(n?m:(0,Fr.basename)(e),g.message)}}if(JR=u,iD.isMainThread&&!JQ&&i&&(0,oE.watchDir)(e,async()=>XQ()),c.extensionModule||c.pluginModule){let m=await Ug((0,Fr.join)(e,c.extensionModule||c.pluginModule));return jR.set(a,m),m}let f=Object.values(d);if(f.length>0&&f.every(m=>!m)&&t.isWorker){let m=`${e} did not load any modules, resources, or files, is this a valid component?`;QR?.(new Error(m)),((0,oE.getWorkerIndex)()===0?console:na.default).error(m),iE.set((0,Fr.basename)(e),m)}for(let[m,h]of Object.entries(d))h||na.default.warn(`Component ${m} from (${(0,Fr.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}`,QR?.(c),t.set("",new Qc(c))}}var Pt,Fr,iD,oD,lD,uD,na,oE,aD,ZR,nD,cD,JQ,sD,iE,KRe,QQ,jR,QR,JR,AR,Qd=fe(()=>{Pt=require("node:fs"),Fr=require("node:path"),iD=require("node:worker_threads"),oD=require("yaml"),lD=w(ce()),uD=w(Rt());k();uk();Tk();vk();kk();Gk();eG();wz();Mz();Uz();na=w(z());Gz();oE=w(st());gN();Pr();Le();nL();aD=w(ce());Z2();uT();aQ();es();RQ();ZR=w(yt());Eh();$A();$Q();jQ();hL();Sp();GL();nD=(0,ZR.resolvePath)(lD.get(U.COMPONENTSROOT)),cD=new Map,iE=new Map;o(XQ,"loadComponentDirectories");KRe={REST:Hg,rest:Hg,graphql:uN,graphqlSchema:cN,roles:_N,jsResource:SN,fastifyRoutes:AP,login:RN,static:bP,operationsApi:AL,customFunctions:{},http:yR,clustering:CL,replication:vo,authentication:ip,mqtt:vL,loadEnv:IP,logging:na.default,dataLoader:NP},QQ=[],jR=new Map;o(YRe,"setErrorReporter");AR=o(()=>JR,"getComponentName");o(WRe,"symlinkHarperModule");o(ZQ,"sequentiallyHandleApplication");o(XR,"loadComponent")});var IR=M((nHe,tJ)=>{var{isMainThread:eJ}=require("worker_threads"),{getTables:zRe,getDatabases:tHe,table:rHe}=(Le(),v(ft)),{loadComponentDirectories:jRe,loadComponent:QRe}=(Qd(),v(fp)),{resetResources:JRe}=(Pu(),v(TU)),XRe=iC(),ZRe=yt(),{dirname:eye}=require("path"),{getConnection:tye}=lr(),rye=ce(),{CONFIG_PARAMS:nye}=(k(),v(K)),{loadCertificates:sye}=rs(),dD=new Map;async function iye(e=!1){!eJ&&rye.get(nye.CLUSTERING_ENABLED)&&tye();try{eJ&&await XRe()}catch(n){console.error(n)}let t=JRe();zRe(),t.isWorker=e,await sye(),await QRe(eye(ZRe.getConfigFilePath()),t,"hdb",!0,dD),await jRe(dD,t);let r=[];for(let[n]of dD)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}o(iye,"loadRootComponents");tJ.exports.loadRootComponents=iye});var st=M((iHe,bi)=>{"use strict";jy();var{Worker:oye,MessageChannel:aye,parentPort:no,isMainThread:ED,threadId:cye,workerData:so}=require("worker_threads"),{PACKAGE_ROOT:lye}=Rt(),{join:iJ,isAbsolute:uye,extname:dye}=require("path"),{server:oJ}=(Pr(),v(Bf)),{watch:fye,readdir:mye}=require("fs/promises"),{totalmem:rJ}=require("os"),yf=(k(),v(K)),aJ=ce(),Ai=z(),{randomBytes:hye}=require("crypto"),{_assignPackageExport:pye}=Ws(),nJ=1024*1024,pc=[],Ks=[],Eye=50,_D=1e4,_ye="restart",cJ="request_thread_info",lJ="resource_report",uJ="thread_info",dJ="added-port",gye="ack",fD;pye("threads",Ks);bi.exports={startWorker:mD,restartWorkers:SD,shutdownWorkers:Aye,workers:pc,setMonitorListener:Lye,onMessageFromWorkers:bye,onMessageByType:gJ,broadcast:Nye,broadcastWithAcknowledgement:Oye,setChildListenerByType:yye,getWorkerIndex:fJ,getWorkerCount:mJ,getTicketKeys:pJ,setMainIsWorker:Tye,setTerminateTimeout:Sye,restartNumber:so?.restartNumber||1};Ks.onMessageByType=gJ;Ks.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ks.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};bi.exports.whenThreadsStarted=new Promise(e=>{bi.exports.threadsHaveStarted=e});var gD;function Sye(e){_D=e}o(Sye,"setTerminateTimeout");function fJ(){return so?so.workerIndex:gD?0:void 0}o(fJ,"getWorkerIndex");function mJ(){return so?so.workerCount:gD?1:void 0}o(mJ,"getWorkerCount");function Tye(e){gD=e,bi.exports.threadsHaveStarted()}o(Tye,"setMainIsWorker");var hJ=1,ey;function pJ(){return ey||(ey=ED?hye(48):so.ticketKeys,ey)}o(pJ,"getTicketKeys");Object.defineProperty(oJ,"workerIndex",{get(){return fJ()}});Object.defineProperty(oJ,"workerCount",{get(){return mJ()}});var EJ={[cJ](e,t){Cye(t)},[lJ](e,t){Pye(t,e)}};function mD(e,t={}){let r=process.constrainedMemory?.()||rJ();r=Math.min(r,rJ(),2e4*nJ);let n=aJ.get(yf.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/nJ/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],a=[];for(let l of Ks){let u=new aye;u.existingPort=l,i.push(u),a.push(u.port2)}dye(e)||(e+=".js");let c=new oye(uye(e)?e:iJ(lye,e),{resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps","--expose-internals"],argv:process.argv.slice(2),workerData:{addPorts:a,addThreadIds:i.map(l=>l.existingPort.threadId),workerIndex:t.workerIndex,workerCount:hJ=t.threadCount,name:t.name,restartNumber:bi.exports.restartNumber,ticketKeys:pJ()},transferList:a,...t});for(let{port1:l,existingPort:u}of i)u.postMessage({type:dJ,port:l,threadId:c.threadId},[l]);return ry(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>mD(e,t),c.on("error",l=>{Ai.error(`Worker index ${t.workerIndex} error:`,l)}),c.on("exit",l=>{pc.splice(pc.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Eye?(t.unexpectedRestarts=c.unexpectedRestarts+1,mD(e,t)):Ai.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",l=>{EJ[l.type]?.(l,c)}),pc.push(c),Mye(),t.onStarted&&t.onStarted(c),c.name=t.name,c}o(mD,"startWorker");var Rye=[yf.THREAD_TYPES.HTTP];async function SD(e=null,t=Math.max(hJ>3,1),r=!0){if(ED){try{process.chdir(process.cwd())}catch(a){Ai.error("Unable to reestablish current working directory",a)}if(r){let{loadRootComponents:a}=IR();await a()}bi.exports.restartNumber++,t<1&&(t=t*pc.length);let n=[],s=[];for(let a of pc.slice(0)){if(e&&a.name!==e||a.wasShutdown)continue;Ai.trace("sending shutdown request to ",a.threadId),a.postMessage({restartNumber:bi.exports.restartNumber,type:yf.ITC_EVENT_TYPES.SHUTDOWN}),a.wasShutdown=!0,a.emit("shutdown",{});let c=Rye.indexOf(a.name)>-1,l=new Promise(u=>{let d=setTimeout(()=>{Ai.warn("Thread did not voluntarily terminate, terminating from the outside",a.threadId),a.terminate()},_D*2).unref();a.on("exit",()=>{clearTimeout(d),n.splice(n.indexOf(l)),!c&&r&&a.startCopy(),u()})});if(n.push(l),c&&r){let u=a.startCopy(),d=new Promise(f=>{let m=o(h=>{h.type===yf.ITC_EVENT_TYPES.CHILD_STARTED&&(Ai.trace("Worker has started",u.threadId),f(),s.splice(s.indexOf(d)),u.off("message",m))},"startListener");Ai.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}=Kd();r&&(e==="http"||!e)&&aJ.get(yf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else no.postMessage({type:_ye,workerType:e})}o(SD,"restartWorkers");function yye(e,t){EJ[e]=t}o(yye,"setChildListenerByType");function Aye(e){return SD(e,1/0,!1)}o(Aye,"shutdownWorkers");var _J=[];function bye(e){_J.push(e)}o(bye,"onMessageFromWorkers");var hD=new Map;function gJ(e,t){let r=hD.get(e);r||hD.set(e,r=[]),r.push(t)}o(gJ,"onMessageByType");var Iye=10;async function Nye(e,t){let r=0;for(let n of Ks)try{n.postMessage(e),r++>Iye&&(r=0,await new Promise(setImmediate))}catch(s){Ai.error("Unable to send message to worker",s)}t&&TJ(e,null)}o(Nye,"broadcast");var ty=new Map,wye=1;function Oye(e){return new Promise(t=>{let r=0;for(let n of Ks)try{let s=wye++,i=o(()=>{ty.delete(s),--r===0&&t(),n!==no&&--n.refCount===0&&n.unref()},"ackHandler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,ty.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,a]of ty)a.port===n&&a()})),n.postMessage(e),r++}catch(s){Ai.error("Unable to send message to worker",s)}r===0&&t()})}o(Oye,"broadcastWithAcknowledgement");function Cye(e){e.postMessage({type:uJ,workers:SJ()})}o(Cye,"sendThreadInfo");function SJ(){let e=Date.now();return pc.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}o(SJ,"getChildWorkerInfo");function Pye(e,t){e.resources=t,e.resources.updated=Date.now()}o(Pye,"recordResourceReport");var pD;function Lye(e){pD=e}o(Lye,"setMonitorListener");var Dye=1e3,sJ=!1;function Mye(){sJ||(sJ=!0,setInterval(()=>{for(let e of pc){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}pD&&pD()},Dye).unref())}o(Mye,"startMonitoring");var vye=1e3;if(no&&so?.addPorts){ry(no);for(let e=0,t=so.addPorts.length;e<t;e++){let r=so.addPorts[e];r.threadId=so.addThreadIds[e],ry(r)}setInterval(()=>{let e=process.memoryUsage();no.postMessage({type:lJ,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},vye).unref(),fD=o(()=>new Promise((e,t)=>{no.on("message",r),no.postMessage({type:cJ});function r(n){n.type===uJ&&(no.off("message",r),e(n.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else fD=SJ;bi.exports.getThreadInfo=fD;function ry(e,t){Ks.push(e),e.on("message",r=>{if(r.type===dJ)r.port.threadId=r.threadId,ry(r.port);else if(r.type===gye){let n=ty.get(r.id);n&&n()}else TJ(r,e)}).on("close",()=>{Ks.splice(Ks.indexOf(e),1)}).on("exit",()=>{Ks.splice(Ks.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(ry,"addPort");function TJ(e,t){for(let n of _J)n(e,t);let r=hD.get(e.type);if(r)for(let n of r)try{n(e,t)}catch(s){Ai.error(s)}}o(TJ,"notifyMessageListeners");if(ED){let e,t,r=new Set,n=o(async(s,i)=>{i&&(e=i);for(let a of await mye(s,{withFileTypes:!0}))a.isDirectory()&&a.name!=="node_modules"&&n(iJ(s,a.name));try{for await(let{filename:a}of fye(s,{persistent:!1}))r.add(a),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await SD(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(a){console.warn("Error trying to watch component directory",s,a)}},"watchDir");bi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else no.on("message",async e=>{let{type:t}=e;t===yf.ITC_EVENT_TYPES.SHUTDOWN&&(bi.exports.restartNumber=e.restartNumber,no.unref(),setTimeout(()=>{Ai.warn("Thread did not voluntarily terminate",cye),process.exit(0)},_D).unref())})});var NJ=M((lHe,IJ)=>{"use strict";var{promises:Af,createReadStream:Uye,createWriteStream:xye}=require("fs"),{createGzip:Bye}=require("zlib"),{promisify:Fye}=require("util"),{pipeline:Hye}=require("stream"),kye=Fye(Hye),RD=require("path"),bJ=ce();bJ.initSync();var ny=z(),{CONFIG_PARAMS:Gye,ITC_EVENT_TYPES:aHe}=(k(),v(K)),{onMessageFromWorkers:cHe}=st(),{convertToMS:RJ}=ie(),{onStorageReclamation:qye}=(o_(),v($v)),$ye=6e4,Vye="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Kye="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",TD,yJ;IJ.exports=Yye;function Yye({logger:e,maxSize:t,interval:r,retention:n,enabled:s,path:i,auditInterval:a}){if(s===!1)return;let c=0;if(qye(e.path,f=>{c=f},!0),!t&&!r)throw new Error(Vye);if(!i)throw new Error(Kye);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=RJ(r));let d;return TD=Date.now(),ny.trace("Log rotate enabled, maxSize:",t,"interval:",r),yJ=setInterval(async()=>{if(l){let f;f=await Af.stat(e.path),f.size>=l&&(d=await AJ(e.path,i))}if(u&&Date.now()-TD>=u&&(d=await AJ(e.path,i),TD=Date.now()),n||c){let f=RJ(n??"1M")/(1+c);c=0;let m=await Af.readdir(i);for(let h of m)try{let p=await Af.stat(RD.join(i,h));Date.now()-p.mtimeMs>f&&await Af.unlink(RD.join(i,h))}catch(p){ny.error("Error trying to remove log",h,p)}}},a??$ye).unref(),{end(){clearInterval(yJ)},getLastRotatedLogPath(){return d}}}o(Yye,"logRotator");async function AJ(e,t){let r=bJ.get(Gye.LOGGING_ROTATION_COMPRESS),n=RD.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.log`);return await Af.rename(e,n),r&&(e=n,n+=".gz",await kye(Uye(e),Bye(),xye(n)),await Af.unlink(e)),ny.closeLogFile(),ny.notify(`hdb.log rotated, old log moved to ${n}`),n}o(AJ,"moveLogFile")});var LJ={};Ce(LJ,{RootConfigWatcher:()=>yD});var wJ,OJ,CJ,sy,PJ,yD,DJ=fe(()=>{wJ=w(require("chokidar")),OJ=require("node:fs/promises"),CJ=w(yt()),sy=require("node:stream"),PJ=require("yaml"),yD=class extends sy.EventEmitter{static{o(this,"RootConfigWatcher")}#e;#t;#r;constructor(){super(),this.#e=(0,CJ.getConfigFilePath)(),this.#t=wJ.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,OJ.readFile)(this.#e,"utf-8").then(t=>{if(!t)return;let r=(0,PJ.parse)(t);if(!this.#r){this.#r=r,this.emit("ready",this.#r);return}this.emit("change",this.#r=r)}).catch(t=>{})}ready(){return(0,sy.once)(this,"ready")}close(){return this.#t.close(),this.#r=void 0,this.emit("close"),this.removeAllListeners(),this}get config(){return this.#r}}});var z=M((hHe,fy)=>{"use strict";var ia=require("fs-extra"),{workerData:Wye,threadId:zye,isMainThread:HJ}=require("worker_threads"),lE=require("path"),kJ=require("yaml"),GJ=require("properties-reader"),Hr=(k(),v(K)),MJ=Lc(),jye=require("os"),{PACKAGE_ROOT:CD}=Rt(),{_assignPackageExport:Qye}=Ws(),{Console:Jye}=require("console"),vJ=process.stdout.nativeWrite||(process.stdout.nativeWrite=process.stdout.write),UJ=new Map,{join:oa}=lE,xJ=1e4,sr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Xye={STDOUT:"stdOut",STDERR:"stdErr"},mHe=oa(CD,"logs"),Zye=oa(CD,"config/yaml/",Hr.HDB_DEFAULT_CONFIG_FILE),eAe=1e4,uE,dE,iy,sa,bD,AD,ay,Lt,ms,cy,ly,bf,cE,aE;function oy(e,t,r){e.rotation=t.rotation;let n=t.path;n?t.root||(t.root=lE.dirname(n)):t.root?n=oa(t.root,bD):(n=Lt.path,t.root||(t.root=lE.dirname(n))),n?e.path=n:console.error("No path for logger",t),e.level=sr[t.level]??Lt?.level??sr.info,qJ(e),e.logToStdstreams=t.stdStreams??!1,e.tag=t.tag??(Lt.path===e.path&&r)}o(oy,"updateLogger");function qJ(e){let t=e.conditional??(e.conditional={});t.notify=sr.notify>=e.level?e.notify.bind(e):void 0,t.fatal=sr.fatal>=e.level?e.fatal.bind(e):void 0,t.error=sr.error>=e.level?e.error.bind(e):void 0,t.warn=sr.warn>=e.level?e.warn.bind(e):void 0,t.info=sr.info>=e.level?e.info.bind(e):void 0,t.debug=sr.debug>=e.level?e.debug.bind(e):void 0,t.trace=sr.trace>=e.level?e.trace.bind(e):void 0}o(qJ,"updateConditional");async function ID(){aE||(aE=new gAe,await aE.ready(),aE.on("change",ID));let e=aE.config,t=e.logging??{};oy(Lt,t),ay=Lt.path,uE=t.console??!1,t.external&&oy(ms,t.external);for(let r in e){let n=e[r];n.logging?oy(Lt.forComponent(r),n.logging,r):Lt.hasComponent(r)&&oy(Lt.forComponent(r),t,r)}}o(ID,"updateLogSettings");var ND=class extends Jye{static{o(this,"HarperLogger")}constructor(t,r){t.stdout.removeListener=()=>{},t.stderr.removeListener=()=>{},t.stdout.listenerCount=()=>{},t.stderr.listenerCount=()=>{},super(t),this.level=r}trace(...t){gn="trace",this.level<=sr.trace&&super.info(...t),gn="info"}debug(...t){gn="debug",this.level<=sr.debug&&super.info(...t),gn="info"}info(...t){gn="info",this.level<=sr.info&&super.info(...t),gn="info"}warn(...t){gn="warn",this.level<=sr.warn&&super.warn(...t),gn="info"}error(...t){gn="error",this.level<=sr.error&&super.error(...t),gn="info"}fatal(...t){bf=!0;try{gn="fatal",this.level<=sr.fatal&&super.error(...t),gn="info"}finally{bf=!1}}notify(...t){bf=!0;try{gn="notify",this.level<=sr.notify&&super.info(...t),gn="info"}finally{bf=!1}}withTag(t){return VJ(t,!0,this)}forComponent(t){return this}hasComponent(t){return!1}};cE===void 0&&$J();fy.exports={notify:cAe,fatal:lAe,error:OD,warn:uAe,info:iAe,debug:aAe,trace:oAe,logLevel:sa,loggerWithTag:VJ,suppressLogging:nAe,initLogSettings:$J,logCustomLevel:dAe,closeLogFile:KJ,createLogger:dy,logsAtLevel:tAe,getLogFilePath:o(()=>ay,"getLogFilePath"),forComponent:o(e=>Lt.forComponent(e),"forComponent"),setMainLogger:EAe,OUTPUTS:Xye,AuthAuditLog:_Ae,start:ID,startOnMainThread:ID,errorToString:pAe};fy.exports.externalLogger={notify(...e){ms.notify(...e)},fatal(...e){ms.fatal(...e)},error(...e){ms.error(...e)},warn(...e){ms.warn(...e)},info(...e){ms.info(...e)},debug(...e){ms.debug(...e)},trace(...e){ms.trace(...e)},withTag(e){return ms.withTag(e)}};Qye("logger",fy.exports.externalLogger);function tAe(e){return sr[sa]<=sr[e]}o(tAe,"logsAtLevel");function $J(e=!1){try{if(cE===void 0||e){KJ();let t=fAe(),r=MJ(["ROOTPATH"]);try{cE=GJ(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ia.pathExistsSync(oa(r.ROOTPATH,Hr.HDB_CONFIG_FILE)))throw s}let n;if({level:sa,configLogPath:AD,toFile:dE,logConsole:uE,rotation:n,toStream:iy}=mAe(r.ROOTPATH?oa(r.ROOTPATH,Hr.HDB_CONFIG_FILE):cE.get("settings_path")),bD=Hr.LOG_NAMES.HDB,ay=oa(AD,bD),Lt=dy({path:ay,level:sa,stdStreams:iy,rotation:n}),ms=Lt.forComponent("external"),ms.tag=null,HJ)try{require("segfault-handler").registerHandler(oa(AD,"crash.log"))}catch{}}}catch(t){if(cE=void 0,t.code===Hr.NODE_ERROR_CODES.ENOENT||t.code===Hr.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=MJ(Object.keys(Hr.CONFIG_PARAM_MAP),!0);for(let s in r){let i=Hr.CONFIG_PARAM_MAP[s];i&&i.toLowerCase();let a=r[s];if(i===Hr.CONFIG_PARAMS.LOGGING_LEVEL){sa=a;continue}i===Hr.CONFIG_PARAMS.LOGGING_CONSOLE&&(uE=i)}let{defaultLevel:n}=hAe();dE=!1,iy=!0,sa=sa===void 0?n:sa,Lt=dy({level:sa}),ms=Lt.forComponent("external"),ms.tag=null;return}throw OD("Error initializing log settings"),OD(t),t}process.env.DEV_MODE&&(iy=!0),rAe()}o($J,"initLogSettings");var Ec=!0;function rAe(){dE&&(process.stdout.write=function(e){return typeof e=="string"&&Ec&&uE&&(e=e.toString(),e[e.length-1]===`
127
+ `&&(e=e.slice(0,-1)),ly(e)),vJ.apply(process.stdout,arguments)},process.stderr.write=function(e){return typeof e=="string"&&Ec&&uE&&(e[e.length-1]===`
128
+ `&&(e=e.slice(0,-1)),ly(e)),vJ.apply(process.stderr,arguments)})}o(rAe,"stdioLogging");function VJ(e,t,r=Lt){return e=e.replace(/ /g,"-"),{notify:n(r.notify,"notify"),fatal:n(r.fatal,"fatal"),error:n(r.error,"error"),warn:n(r.warn,"warn"),info:n(r.info,"info"),debug:n(r.debug,"debug"),trace:n(r.trace,"trace")};function n(s,i){return!t||r.level<=sr[i]?function(...a){uy=e;try{return s.call(r,...a)}finally{uy=void 0}}:null}o(n,"logWithTag")}o(VJ,"loggerWithTag");function nAe(e){try{Ec=!1,e()}finally{Ec=!0}}o(nAe,"suppressLogging");var sAe=Wye?.name?.replace(/ /g,"-")||"main",gn="info",wD,uy;function dy({path:e,level:t,stdStreams:r,rotation:n,isExternalInstance:s,writeToLog:i,component:a}){t||(t="info");let c=sr[t],l;function u(h){if(dE)if(l.logToStdstreams){f(h.replace(/\x1b\[[0-9;]*m/g,"")),Ec=!1;try{process.stdout.write(h)}finally{Ec=!0}}else f(h);else r&&process.stdout.write(h)}o(u,"logStdOut");function d(h){if(dE){if(f(h),r){Ec=!1;try{process.stderr.write(h)}finally{Ec=!0}}}else r&&process.stderr.write(h)}o(d,"logStdErr");let f=e&&FJ(e,n,s);function m(h){return{write(p){let _=[gn];_.unshift(wD||sAe+"/"+zye),uy&&_.push(uy),l.tag&&_.push(l.tag),h(`[${_.join("] [")}]: ${p}`)}}}if(o(m,"logPrepend"),s&&(ly=f),l=new ND({stdout:m(i??u),stderr:m(i??d),colorMode:r??!1},c),qJ(l),l.path=e,Object.defineProperty(l,"path",{get(){return e},set(h){e=h,f=FJ(e,l.rotation,s),s&&(ly=f)},enumerable:!0}),l.closeLogFile=f?.closeLogFile,l.logToStdstreams=r,!a){let h=new Map;l.forComponent=function(p){let _=h.get(p);return _||(_=dy({path:e,level:t,stdStreams:r,isExternalInstance:p==="external",rotation:n,writeToLog:i,component:!0}),h.set(p,_)),_},l.hasComponent=function(p){return h.has(p)}}return l}o(dy,"createLogger");var BJ=100;function FJ(e,t,r){let n=UJ.get(e),s,i,a,c,l=0;n||(n=d,n.closeLogFile=m,n.path=e,UJ.set(e,n)),HJ&&JSON.stringify(t)!==JSON.stringify(n.rotation)&&(n.rotation=t,setTimeout(()=>{if(n.rotator?.end(),!t)return;let p=NJ();try{n.rotator=p({logger:n,...t})}catch(_){n("Error initializing log rotator",_)}},100));let u=0;return n;function d(p){u++;let _=`${new Date().toISOString()} ${p}${p.endsWith(`
129
129
  `)?"":`
130
- `}`;c?(c.length<DJ?c.push(_):c.length===DJ&&c.push(`Maximum log buffer rate reached, logs will be throttled
131
- `),bf&&(clearTimeout(a),f())):bf||l<performance.now()+MJ?f(_):(l=Math.min(l,performance.now()+MJ),c=[_],a=setTimeout(f,1))}function f(p){if(h(),s){let _=performance.now();sa.appendFileSync(s,c?c.join(""):p);let g=performance.now();l=Math.max(g,l)+(g-_)*50}else i||console.log(c?c.join(""):p);c&&(c=null)}function m(){try{sa.closeSync(s)}catch{}s=null,r&&(oy=null)}function h(p){if(!s){try{s=sa.openSync(e,"a"),r&&(oy=s)}catch(_){if(_.code==="ENOENT"&&!p)return sa.mkdirpSync(lE.dirname(e)),h(!0);i||(i=!0,console.error(_))}setTimeout(()=>{m()},jye).unref()}}}o(vJ,"getFileLogger");function eAe(...e){Lt.info(...e)}o(eAe,"info");function tAe(...e){Lt.trace(...e)}o(tAe,"trace");function ND(...e){Lt.error(...e)}o(ND,"error");function rAe(...e){Lt.debug(...e)}o(rAe,"debug");function nAe(...e){Lt.notify(...e)}o(nAe,"notify");function sAe(...e){Lt.fatal(...e)}o(sAe,"fatal");function iAe(...e){Lt.warn(...e)}o(iAe,"warn");function oAe(e,t,r,...n){ID=r.service_name;try{Lt[e](...n)}finally{ID=void 0}}o(oAe,"logCustomLevel");function aAe(){let e;try{e=Vye.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ia(e,Hr.HDB_HOME_DIR_NAME,Hr.BOOT_PROPS_FILE_NAME);return sa.existsSync(t)||(t=ia(wD,"utility/hdb_boot_properties.file")),t}o(aAe,"getPropsFilePath");function cAe(e){try{if(e.includes("config/settings.js")){let l=BJ(e);return{level:l.get(Hr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:lE.dirname(l.get(Hr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(Hr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(Hr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=xJ.parseDocument(sa.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===Hr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(cAe,"getLogConfig");function lAe(){try{let e=xJ.parseDocument(sa.readFileSync(zye,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(lAe,"getDefaultConfig");function uAe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(uAe,"errorToString");function dAe(e){Lt=e}o(dAe,"setMainLogger");function GJ(){try{sa.closeSync(oy)}catch{}oy=null}o(GJ,"closeLogFile");function fAe(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(fAe,"AuthAuditLog");var{RootConfigWatcher:mAe}=(OJ(),v(wJ))});var ie=M(be=>{"use strict";var Ec=require("path"),YJ=require("fs-extra"),kn=z(),qJ=require("fs-extra"),dy=require("os"),hAe=require("net"),pAe=require("recursive-iterator"),Nr=(k(),v(K)),{PACKAGE_ROOT:EAe}=Rt(),_Ae=QP(),$J=require("papaparse"),fy=require("moment"),{inspect:gAe}=require("util"),VJ=require("is-number"),SAe=require("minimist"),TAe=require("https"),RAe=require("http"),yAe=/^((\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)))$/,WJ=require("util").promisify(setTimeout),AAe=100,bAe=5,IAe="",NAe=4,KJ={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};be.isEmpty=hs;be.isEmptyOrZeroLength=io;be.arrayHasEmptyValues=CAe;be.arrayHasEmptyOrZeroLengthValues=PAe;be.buildFolderPath=LAe;be.isBoolean=zJ;be.errorizeMessage=wAe;be.stripFileExtension=MAe;be.autoCast=vAe;be.autoCastJSON=jJ;be.autoCastJSONDeep=CD;be.removeDir=UAe;be.compareVersions=xAe;be.isCompatibleDataVersion=BAe;be.escapeRawValue=FAe;be.unescapeValue=HAe;be.stringifyProps=kAe;be.timeoutPromise=qAe;be.isClusterOperation=VAe;be.getClusterUser=YAe;be.checkGlobalSchemaTable=KAe;be.getHomeDir=JJ;be.getPropsFilePath=GAe;be.promisifyPapaParse=WAe;be.removeBOM=XJ;be.createEventPromise=zAe;be.checkProcessRunning=jAe;be.checkSchemaTableExist=QAe;be.checkSchemaExists=ZJ;be.checkTableExists=e4;be.getStartOfTomorrowInSeconds=JAe;be.getLimitKey=XAe;be.isObject=DAe;be.isNotEmptyAndHasValue=OAe;be.autoCasterIsNumberCheck=QJ;be.backtickASTSchemaItems=ZAe;be.isPortTaken=$Ae;be.createForkArgs=ebe;be.autoCastBoolean=tbe;be.asyncSetTimeout=WJ;be.getTableHashAttribute=rbe;be.doesSchemaExist=nbe;be.doesTableExist=sbe;be.stringifyObj=ibe;be.ms_to_time=obe;be.changeExtension=abe;be.getEnvCliRootPath=PD;be.noBootFile=cbe;be.httpRequest=lbe;be.transformReq=ube;be.convertToMS=dbe;be.PACKAGE_ROOT=EAe;function wAe(e){return e instanceof Error?e:new Error(e)}o(wAe,"errorizeMessage");function hs(e){return e==null}o(hs,"isEmpty");function OAe(e){return!hs(e)&&(e||e===0||e===""||zJ(e))}o(OAe,"isNotEmptyAndHasValue");function io(e){return hs(e)||e.length===0||e.size===0}o(io,"isEmptyOrZeroLength");function CAe(e){if(hs(e))return!0;for(let t=0;t<e.length;t++)if(hs(e[t]))return!0;return!1}o(CAe,"arrayHasEmptyValues");function PAe(e){if(io(e))return!0;for(let t=0;t<e.length;t++)if(io(e[t]))return!0;return!1}o(PAe,"arrayHasEmptyOrZeroLengthValues");function LAe(...e){try{return e.join(Ec.sep)}catch{console.error(e)}}o(LAe,"buildFolderPath");function zJ(e){return hs(e)?!1:e===!0||e===!1}o(zJ,"isBoolean");function DAe(e){return hs(e)?!1:typeof e=="object"}o(DAe,"isObject");function MAe(e){return io(e)?IAe:e.slice(0,-NAe)}o(MAe,"stripFileExtension");function vAe(e){return hs(e)||e===""||typeof e!="string"?e:KJ[e]!==void 0?KJ[e]:QJ(e)===!0?Number(e):yAe.test(e)?new Date(e):e}o(vAe,"autoCast");function jJ(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(jJ,"autoCastJSON");function CD(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=CD(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=CD(r);n!==r&&(e[t]=n)}return e}else return jJ(e)}o(CD,"autoCastJSONDeep");function QJ(e){if(e.startsWith("0.")&&VJ(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&VJ(e))}o(QJ,"autoCasterIsNumberCheck");async function UAe(e){if(io(e))throw new Error(`Directory path: ${e} does not exist`);try{await qJ.emptyDir(e),await qJ.remove(e)}catch(t){throw kn.error(`Error removing files in ${e} -- ${t}`),t}}o(UAe,"removeDir");function xAe(e,t){if(io(e)){kn.info("Invalid current version sent as parameter.");return}if(io(t)){kn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(xAe,"compareVersions");function BAe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(BAe,"isCompatibleDataVersion");function FAe(e){if(hs(e))return e;let t=String(e);return t==="."?Nr.UNICODE_PERIOD:t===".."?Nr.UNICODE_PERIOD+Nr.UNICODE_PERIOD:t.replace(Nr.FORWARD_SLASH_REGEX,Nr.UNICODE_FORWARD_SLASH)}o(FAe,"escapeRawValue");function HAe(e){if(hs(e))return e;let t=String(e);return t===Nr.UNICODE_PERIOD?".":t===Nr.UNICODE_PERIOD+Nr.UNICODE_PERIOD?"..":String(e).replace(Nr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(HAe,"unescapeValue");function kAe(e,t){if(hs(e))return kn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+dy.EOL}!io(n)&&n[0]===";"?r+=" "+n+s+dy.EOL:io(n)||(r+=n+"="+s+dy.EOL)}catch{kn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(kAe,"stringifyProps");function JJ(){let e;try{e=dy.homedir()}catch{e=process.env.HOME}return e}o(JJ,"getHomeDir");function GAe(){let e=Ec.join(JJ(),Nr.HDB_HOME_DIR_NAME,Nr.BOOT_PROPS_FILE_NAME);return YJ.existsSync(e)||(e=Ec.join(__dirname,"../","hdb_boot_properties.file")),e}o(GAe,"getPropsFilePath");function qAe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(qAe,"timeoutPromise");async function $Ae(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=hAe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o($Ae,"isPortTaken");function VAe(e){try{return Nr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){kn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(VAe,"isClusterOperation");function KAe(e,t){let r=(Le(),v(ft)).getDatabases();if(!r[e])return my.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return my.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(KAe,"checkGlobalSchemaTable");function YAe(e,t){if(hs(t)){kn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hs(e)||io(e)){kn.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){kn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){kn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(YAe,"getClusterUser");function WAe(){$J.parsePromise=function(e,t,r){return new Promise(function(n,s){$J.parse(e,{header:!0,transformHeader:XJ,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(WAe,"promisifyPapaParse");function XJ(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(XJ,"removeBOM");function zAe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;kn.info(`Got cluster status event response: ${gAe(s)}`);try{i.cancel()}catch{kn.error("Error trying to cancel timeout.")}n(s)})})}o(zAe,"createEventPromise");async function jAe(e){let t=!0,r=0;do await WJ(AAe*r++),(await _Ae.findPs(e)).length>0&&(t=!1);while(t&&r<bAe);if(t)throw new Error(`process ${e} was not started`)}o(jAe,"checkProcessRunning");function QAe(e,t){let r=ZJ(e);if(r)return r;let n=e4(e,t);if(n)return n}o(QAe,"checkSchemaTableExist");function ZJ(e){let{getDatabases:t}=(Le(),v(ft));if(!t()[e])return my.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(ZJ,"checkSchemaExists");function e4(e,t){let{getDatabases:r}=(Le(),v(ft));if(!r()[e][t])return my.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(e4,"checkTableExists");function JAe(){let e=fy().utc().add(1,"d").startOf("d").unix(),t=fy().utc().unix();return e-t}o(JAe,"getStartOfTomorrowInSeconds");function XAe(){return fy().utc().format("DD-MM-YYYY")}o(XAe,"getLimitKey");function ZAe(e){try{let t=new pAe(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){kn.error("Got an error back ticking items."),kn.error(t)}}o(ZAe,"backtickASTSchemaItems");function ebe(e){return[e]}o(ebe,"createForkArgs");function tbe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(tbe,"autoCastBoolean");function rbe(e,t){let{getDatabases:r}=(Le(),v(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(rbe,"getTableHashAttribute");function nbe(e){let{getDatabases:t}=(Le(),v(ft));return t()[e]!==void 0}o(nbe,"doesSchemaExist");function sbe(e,t){let{getDatabases:r}=(Le(),v(ft));return r()[e]?.[t]!==void 0}o(sbe,"doesTableExist");function ibe(e){try{return JSON.stringify(e)}catch{return e}}o(ibe,"stringifyObj");function obe(e){let t=fy.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(obe,"ms_to_time");function abe(e,t){let r=Ec.basename(e,Ec.extname(e));return Ec.join(Ec.dirname(e),r+t)}o(abe,"changeExtension");function PD(){if(process.env[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=SAe(process.argv);if(e[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(PD,"getEnvCliRootPath");var OD;function cbe(){if(OD)return OD;let e=PD();if(PD()&&YJ.pathExistsSync(Ec.join(e,Nr.HDB_CONFIG_FILE)))return OD=!0,!0}o(cbe,"noBootFile");function lbe(e,t){let r;return e.protocol==="http:"?r=RAe:r=TAe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(lbe,"httpRequest");function ube(e){if(!e.schema&&!e.database){e.schema=Nr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(ube,"transformReq");function dbe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(dbe,"convertToMS");var my=tn()});var o4=M((uHe,i4)=>{"use strict";var ps=ce(),fbe=kd(),Ke=(k(),v(K)),fE=It(),oa=require("path"),{PACKAGE_ROOT:py}=Rt(),t4=ce(),hy=ie(),If="/dev/null",mbe=oa.join(py,"launchServiceScripts"),r4=oa.join(py,"utility/scripts"),hbe=oa.join(r4,Ke.HDB_RESTART_SCRIPT),n4=oa.resolve(py,"dependencies",`${process.platform}-${process.arch}`,fE.NATS_BINARY_NAME);function s4(){let t=fbe.licenseSearch().ram_allocation||Ke.RAM_ALLOCATION_ENUM.DEFAULT,r=Ke.MEM_SETTING_KEY+t,n={[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return hy.noBootFile()&&(n[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=hy.getEnvCliRootPath()),{name:Ke.PROCESS_DESCRIPTORS.HDB,script:Ke.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:py}}o(s4,"generateMainServerConfig");var pbe=9930;function Ebe(){ps.initSync(!0);let e=ps.get(Ke.CONFIG_PARAMS.ROOTPATH),t=oa.join(e,"clustering",fE.NATS_CONFIG_FILES.HUB_SERVER),r=oa.join(ps.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=t4.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=fE.LOG_LEVEL_FLAGS[ps.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==pbe?"-"+n:""),script:n4,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ps.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}o(Ebe,"generateNatsHubServerConfig");var _be=9940;function gbe(){ps.initSync(!0);let e=ps.get(Ke.CONFIG_PARAMS.ROOTPATH),t=oa.join(e,"clustering",fE.NATS_CONFIG_FILES.LEAF_SERVER),r=oa.join(ps.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=t4.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=fE.LOG_LEVEL_FLAGS[ps.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==_be?"-"+n:""),script:n4,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ps.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}o(gbe,"generateNatsLeafServerConfig");function Sbe(){ps.initSync();let e=oa.join(ps.get(Ke.CONFIG_PARAMS.LOGGING_ROOT),Ke.LOG_NAMES.HDB),t={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ke.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:mbe,autorestart:!1};return ps.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=If,t.error_file=If),t}o(Sbe,"generateClusteringUpgradeV4ServiceConfig");function Tbe(){let e={[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.RESTART_HDB};return hy.noBootFile()&&(e[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=hy.getEnvCliRootPath()),{...{name:Ke.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:r4},script:hbe}}o(Tbe,"generateRestart");function Rbe(){return{apps:[s4()]}}o(Rbe,"generateAllServiceConfigs");i4.exports={generateAllServiceConfigs:Rbe,generateMainServerConfig:s4,generateRestart:Tbe,generateNatsHubServerConfig:Ebe,generateNatsLeafServerConfig:gbe,generateClusteringUpgradeV4ServiceConfig:Sbe}});var Yd=M((mHe,T4)=>{"use strict";var ot=(k(),v(K)),ybe=ie(),ca=tT(),Ey=lr(),aa=It(),_c=o4(),_y=ce(),iu=z(),Abe=Bo(),{startWorker:a4,onMessageFromWorkers:bbe}=st(),Ibe=Dd(),fHe=require("util"),Nbe=require("child_process"),wbe=require("fs"),{execFile:Obe}=Nbe,Je;T4.exports={enterPM2Mode:Cbe,start:gc,stop:LD,reload:l4,restart:u4,list:DD,describe:m4,connect:la,kill:vbe,startAllServices:Ube,startService:MD,getUniqueServicesList:h4,restartAllServices:xbe,isServiceRegistered:p4,reloadStopStart:E4,restartHdb:f4,deleteProcess:Dbe,startClusteringProcesses:g4,startClusteringThreads:S4,isHdbRestartRunning:Mbe,isClusteringRunning:Fbe,stopClustering:Bbe,reloadClustering:Hbe,expectedRestartOfChildren:d4};var mE=!1;bbe(e=>{e.type==="restart"&&_y.initSync(!0)});function Cbe(){mE=!0}o(Cbe,"enterPM2Mode");function la(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}o(la,"connect");var Sn,Pbe=10,c4;function gc(e,t=!1){if(mE)return Lbe(e);let r=Obe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=Sn.indexOf(r);a>-1&&Sn.splice(a,1),!c4&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Pbe&&(wbe.existsSync(ca.getHubConfigPath())?gc(e):(await ca.generateNatsConfig(!0),gc(e),await new Promise(c=>setTimeout(c,3e3)),await ca.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ca.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=_y.get(ot.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&aa.LOG_LEVEL_HIERARCHY[a]>=aa.LOG_LEVEL_HIERARCHY[d||"info"]){let h=d===aa.LOG_LEVELS.ERR||d===aa.LOG_LEVELS.WRN?iu.OUTPUTS.STDERR:iu.OUTPUTS.STDOUT;iu.logCustomLevel(d||"info",h,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=aa.LOG_LEVELS[m]}if(aa.LOG_LEVEL_HIERARCHY[a]>=aa.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===aa.LOG_LEVELS.ERR||d===aa.LOG_LEVELS.WRN?iu.OUTPUTS.STDERR:iu.OUTPUTS.STDOUT;iu.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Sn&&(Sn=[],!t)){let i=o(()=>{c4=!0,Sn&&(Sn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Sn.push(r)}o(gc,"start");function Lbe(e){return new Promise(async(t,r)=>{try{await la()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Lbe,"startWithPM2");function LD(e){if(!mE){for(let t of Sn||[])t.name===e&&(Sn.splice(Sn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await la()}catch(n){r(n)}Je.stop(e,async(n,s)=>{n&&(Je.disconnect(),r(n)),Je.delete(e,(i,a)=>{i&&(Je.disconnect(),r(n)),Je.disconnect(),t(a)})})})}o(LD,"stop");function l4(e){return new Promise(async(t,r)=>{try{await la()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(l4,"reload");function u4(e){if(!mE){d4();for(let t of Sn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await la()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}o(u4,"restart");function d4(){for(let e of Sn||[])e.config&&(e.config.restarts=0)}o(d4,"expectedRestartOfChildren");function Dbe(e){return new Promise(async(t,r)=>{try{await la()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Dbe,"deleteProcess");async function f4(){await gc(_c.generateRestart())}o(f4,"restartHdb");async function Mbe(){let e=await DD();for(let t in e)if(e[t].name===ot.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Mbe,"isHdbRestartRunning");function DD(){return new Promise(async(e,t)=>{try{await la()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(DD,"list");function m4(e){return new Promise(async(t,r)=>{try{await la()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(m4,"describe");function vbe(){if(!mE){for(let e of Sn||[])e.kill();Sn=[];return}return new Promise(async(e,t)=>{try{await la()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(vbe,"kill");async function Ube(){try{await g4(),await S4(),await gc(_c.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}o(Ube,"startAllServices");async function MD(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ot.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=_c.generateMainServerConfig();break;case ot.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=_c.generateNatsIngestServiceConfig();break;case ot.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=_c.generateNatsReplyServiceConfig();break;case ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=_c.generateNatsHubServerConfig(),await gc(r,t),await ca.removeNatsConfig(e);return;case ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=_c.generateNatsLeafServerConfig(),await gc(r,t),await ca.removeNatsConfig(e);return;case ot.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=_c.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await gc(r)}catch(r){throw Je?.disconnect(),r}}o(MD,"startService");async function h4(){try{let e=await DD(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Je?.disconnect(),e}}o(h4,"getUniqueServicesList");async function xbe(e=[]){try{let t=!1,r=await h4();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===ot.PROCESS_DESCRIPTORS.HDB?t=!0:await u4(a))}t&&await E4(ot.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}o(xbe,"restartAllServices");async function p4(e){if(Sn?.find(r=>r.name===e))return!0;let t=await Ibe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(p4,"isServiceRegistered");async function E4(e){let t=_y.get(ot.CONFIG_PARAMS.THREADS_COUNT)??_y.get(ot.CONFIG_PARAMS.THREADS),r=await m4(e),n=ybe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await LD(e),await MD(e)):e===ot.PROCESS_DESCRIPTORS.HDB?await f4():await l4(e)}o(E4,"reloadStopStart");var _4;async function g4(e=!1){for(let t in ot.CLUSTERING_PROCESSES){let r=ot.CLUSTERING_PROCESSES[t];await MD(r,e)}}o(g4,"startClusteringProcesses");async function S4(){_4=a4(ot.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ot.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Ey.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Ey.updateLocalStreams();let e=await Abe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ot.PRE_4_0_0_VERSION){iu.info("Starting clustering upgrade 4.0.0 process"),a4(ot.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(S4,"startClusteringThreads");async function Bbe(){for(let e in ot.CLUSTERING_PROCESSES)if(e!==ot.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ot.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await _4.terminate();else{let t=ot.CLUSTERING_PROCESSES[e];await LD(t)}}o(Bbe,"stopClustering");async function Fbe(){for(let e in ot.CLUSTERING_PROCESSES){let t=ot.CLUSTERING_PROCESSES[e];if(await p4(t)===!1)return!1}return!0}o(Fbe,"isClusteringRunning");async function Hbe(){await ca.generateNatsConfig(!0),await Ey.reloadNATSHub(),await Ey.reloadNATSLeaf(),await ca.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ca.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Hbe,"reloadClustering")});var vD=Yd(),R4=(k(),v(K));o(async function(){try{let t=await vD.describe(R4.PROCESS_DESCRIPTORS.HDB);for(let r of t)await vD.reload(r.pm_id);await vD.deleteProcess(R4.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
130
+ `}`;c?(c.length<xJ?c.push(_):c.length===xJ&&c.push(`Maximum log buffer rate reached, logs will be throttled
131
+ `),bf&&(clearTimeout(a),f())):bf||l<performance.now()+BJ?f(_):(l=Math.min(l,performance.now()+BJ),c=[_],a=setTimeout(f,1))}function f(p){if(h(),s){let _=performance.now();ia.appendFileSync(s,c?c.join(""):p);let g=performance.now();l=Math.max(g,l)+(g-_)*50}else i||console.log(c?c.join(""):p);c&&(c=null)}function m(){try{ia.closeSync(s)}catch{}s=null,r&&(cy=null)}function h(p){if(!s){try{s=ia.openSync(e,"a"),r&&(cy=s)}catch(_){if(_.code==="ENOENT"&&!p)return ia.mkdirpSync(lE.dirname(e)),h(!0);i||(i=!0,console.error(_))}setTimeout(()=>{m()},eAe).unref()}}}o(FJ,"getFileLogger");function iAe(...e){Lt.info(...e)}o(iAe,"info");function oAe(...e){Lt.trace(...e)}o(oAe,"trace");function OD(...e){Lt.error(...e)}o(OD,"error");function aAe(...e){Lt.debug(...e)}o(aAe,"debug");function cAe(...e){Lt.notify(...e)}o(cAe,"notify");function lAe(...e){Lt.fatal(...e)}o(lAe,"fatal");function uAe(...e){Lt.warn(...e)}o(uAe,"warn");function dAe(e,t,r,...n){wD=r.service_name;try{Lt[e](...n)}finally{wD=void 0}}o(dAe,"logCustomLevel");function fAe(){let e;try{e=jye.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=oa(e,Hr.HDB_HOME_DIR_NAME,Hr.BOOT_PROPS_FILE_NAME);return ia.existsSync(t)||(t=oa(CD,"utility/hdb_boot_properties.file")),t}o(fAe,"getPropsFilePath");function mAe(e){try{if(e.includes("config/settings.js")){let l=GJ(e);return{level:l.get(Hr.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),configLogPath:lE.dirname(l.get(Hr.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),toFile:l.get(Hr.HDB_SETTINGS_NAMES.LOG_TO_FILE),toStream:l.get(Hr.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=kJ.parseDocument(ia.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]),a=t.getIn(["logging","console"]),c=t.getIn(["logging","rotation"])?.toJSON();return{level:r,configLogPath:n,toFile:s,toStream:i,logConsole:a,rotation:c}}catch(t){if(t.code===Hr.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(mAe,"getLogConfig");function hAe(){try{let e=kJ.parseDocument(ia.readFileSync(Zye,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{defaultLevel:t,defaultToFile:r,defaultToStream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}o(hAe,"getDefaultConfig");function pAe(e){return typeof e.message=="string"?`${e.constructor.name}: ${e.message}`:e.toString()}o(pAe,"errorToString");function EAe(e){Lt=e}o(EAe,"setMainLogger");function KJ(){try{ia.closeSync(cy)}catch{}cy=null}o(KJ,"closeLogFile");function _Ae(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}o(_Ae,"AuthAuditLog");var{RootConfigWatcher:gAe}=(DJ(),v(LJ))});var ie=M(be=>{"use strict";var _c=require("path"),QJ=require("fs-extra"),kn=z(),YJ=require("fs-extra"),my=require("os"),SAe=require("net"),TAe=require("recursive-iterator"),Nr=(k(),v(K)),{PACKAGE_ROOT:RAe}=Rt(),yAe=JP(),WJ=require("papaparse"),hy=require("moment"),{inspect:AAe}=require("util"),zJ=require("is-number"),bAe=require("minimist"),IAe=require("https"),NAe=require("http"),wAe=/^((\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)))$/,JJ=require("util").promisify(setTimeout),OAe=100,CAe=5,PAe="",LAe=4,jJ={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};be.isEmpty=hs;be.isEmptyOrZeroLength=io;be.arrayHasEmptyValues=vAe;be.arrayHasEmptyOrZeroLengthValues=UAe;be.buildFolderPath=xAe;be.isBoolean=XJ;be.errorizeMessage=DAe;be.stripFileExtension=FAe;be.autoCast=HAe;be.autoCastJSON=ZJ;be.autoCastJSONDeep=LD;be.removeDir=kAe;be.compareVersions=GAe;be.isCompatibleDataVersion=qAe;be.escapeRawValue=$Ae;be.unescapeValue=VAe;be.stringifyProps=KAe;be.timeoutPromise=WAe;be.isClusterOperation=jAe;be.getClusterUser=JAe;be.checkGlobalSchemaTable=QAe;be.getHomeDir=t4;be.getPropsFilePath=YAe;be.promisifyPapaParse=XAe;be.removeBOM=r4;be.createEventPromise=ZAe;be.checkProcessRunning=ebe;be.checkSchemaTableExist=tbe;be.checkSchemaExists=n4;be.checkTableExists=s4;be.getStartOfTomorrowInSeconds=rbe;be.getLimitKey=nbe;be.isObject=BAe;be.isNotEmptyAndHasValue=MAe;be.autoCasterIsNumberCheck=e4;be.backtickASTSchemaItems=sbe;be.isPortTaken=zAe;be.createForkArgs=ibe;be.autoCastBoolean=obe;be.asyncSetTimeout=JJ;be.getTableHashAttribute=abe;be.doesSchemaExist=cbe;be.doesTableExist=lbe;be.stringifyObj=ube;be.ms_to_time=dbe;be.changeExtension=fbe;be.getEnvCliRootPath=DD;be.noBootFile=mbe;be.httpRequest=hbe;be.transformReq=pbe;be.convertToMS=Ebe;be.PACKAGE_ROOT=RAe;function DAe(e){return e instanceof Error?e:new Error(e)}o(DAe,"errorizeMessage");function hs(e){return e==null}o(hs,"isEmpty");function MAe(e){return!hs(e)&&(e||e===0||e===""||XJ(e))}o(MAe,"isNotEmptyAndHasValue");function io(e){return hs(e)||e.length===0||e.size===0}o(io,"isEmptyOrZeroLength");function vAe(e){if(hs(e))return!0;for(let t=0;t<e.length;t++)if(hs(e[t]))return!0;return!1}o(vAe,"arrayHasEmptyValues");function UAe(e){if(io(e))return!0;for(let t=0;t<e.length;t++)if(io(e[t]))return!0;return!1}o(UAe,"arrayHasEmptyOrZeroLengthValues");function xAe(...e){try{return e.join(_c.sep)}catch{console.error(e)}}o(xAe,"buildFolderPath");function XJ(e){return hs(e)?!1:e===!0||e===!1}o(XJ,"isBoolean");function BAe(e){return hs(e)?!1:typeof e=="object"}o(BAe,"isObject");function FAe(e){return io(e)?PAe:e.slice(0,-LAe)}o(FAe,"stripFileExtension");function HAe(e){return hs(e)||e===""||typeof e!="string"?e:jJ[e]!==void 0?jJ[e]:e4(e)===!0?Number(e):wAe.test(e)?new Date(e):e}o(HAe,"autoCast");function ZJ(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(ZJ,"autoCastJSON");function LD(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=LD(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=LD(r);n!==r&&(e[t]=n)}return e}else return ZJ(e)}o(LD,"autoCastJSONDeep");function e4(e){if(e.startsWith("0.")&&zJ(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&zJ(e))}o(e4,"autoCasterIsNumberCheck");async function kAe(e){if(io(e))throw new Error(`Directory path: ${e} does not exist`);try{await YJ.emptyDir(e),await YJ.remove(e)}catch(t){throw kn.error(`Error removing files in ${e} -- ${t}`),t}}o(kAe,"removeDir");function GAe(e,t){if(io(e)){kn.info("Invalid current version sent as parameter.");return}if(io(t)){kn.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,a=s.replace(n,"").split("."),c=i.replace(n,"").split("."),l=Math.min(a.length,c.length);for(let u=0;u<l;u++)if(r=parseInt(a[u],10)-parseInt(c[u],10),r)return r;return a.length-c.length}o(GAe,"compareVersions");function qAe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}o(qAe,"isCompatibleDataVersion");function $Ae(e){if(hs(e))return e;let t=String(e);return t==="."?Nr.UNICODE_PERIOD:t===".."?Nr.UNICODE_PERIOD+Nr.UNICODE_PERIOD:t.replace(Nr.FORWARD_SLASH_REGEX,Nr.UNICODE_FORWARD_SLASH)}o($Ae,"escapeRawValue");function VAe(e){if(hs(e))return e;let t=String(e);return t===Nr.UNICODE_PERIOD?".":t===Nr.UNICODE_PERIOD+Nr.UNICODE_PERIOD?"..":String(e).replace(Nr.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(VAe,"unescapeValue");function KAe(e,t){if(hs(e))return kn.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let a of i)r+=";"+a+my.EOL}!io(n)&&n[0]===";"?r+=" "+n+s+my.EOL:io(n)||(r+=n+"="+s+my.EOL)}catch{kn.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}o(KAe,"stringifyProps");function t4(){let e;try{e=my.homedir()}catch{e=process.env.HOME}return e}o(t4,"getHomeDir");function YAe(){let e=_c.join(t4(),Nr.HDB_HOME_DIR_NAME,Nr.BOOT_PROPS_FILE_NAME);return QJ.existsSync(e)||(e=_c.join(__dirname,"../","hdb_boot_properties.file")),e}o(YAe,"getPropsFilePath");function WAe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:o(function(){clearTimeout(r)},"cancel")}}o(WAe,"timeoutPromise");async function zAe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=SAe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}o(zAe,"isPortTaken");function jAe(e){try{return Nr.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){kn.error(`Error checking operation against cluster ops ${t}`)}return!1}o(jAe,"isClusterOperation");function QAe(e,t){let r=(Le(),v(ft)).getDatabases();if(!r[e])return py.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return py.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(QAe,"checkGlobalSchemaTable");function JAe(e,t){if(hs(t)){kn.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hs(e)||io(e)){kn.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){kn.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){kn.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(JAe,"getClusterUser");function XAe(){WJ.parsePromise=function(e,t,r){return new Promise(function(n,s){WJ.parse(e,{header:!0,transformHeader:r4,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}o(XAe,"promisifyPapaParse");function r4(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(r4,"removeBOM");function ZAe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;kn.info(`Got cluster status event response: ${AAe(s)}`);try{i.cancel()}catch{kn.error("Error trying to cancel timeout.")}n(s)})})}o(ZAe,"createEventPromise");async function ebe(e){let t=!0,r=0;do await JJ(OAe*r++),(await yAe.findPs(e)).length>0&&(t=!1);while(t&&r<CAe);if(t)throw new Error(`process ${e} was not started`)}o(ebe,"checkProcessRunning");function tbe(e,t){let r=n4(e);if(r)return r;let n=s4(e,t);if(n)return n}o(tbe,"checkSchemaTableExist");function n4(e){let{getDatabases:t}=(Le(),v(ft));if(!t()[e])return py.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(n4,"checkSchemaExists");function s4(e,t){let{getDatabases:r}=(Le(),v(ft));if(!r()[e][t])return py.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(s4,"checkTableExists");function rbe(){let e=hy().utc().add(1,"d").startOf("d").unix(),t=hy().utc().unix();return e-t}o(rbe,"getStartOfTomorrowInSeconds");function nbe(){return hy().utc().format("DD-MM-YYYY")}o(nbe,"getLimitKey");function sbe(e){try{let t=new TAe(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){kn.error("Got an error back ticking items."),kn.error(t)}}o(sbe,"backtickASTSchemaItems");function ibe(e){return[e]}o(ibe,"createForkArgs");function obe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(obe,"autoCastBoolean");function abe(e,t){let{getDatabases:r}=(Le(),v(ft)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}o(abe,"getTableHashAttribute");function cbe(e){let{getDatabases:t}=(Le(),v(ft));return t()[e]!==void 0}o(cbe,"doesSchemaExist");function lbe(e,t){let{getDatabases:r}=(Le(),v(ft));return r()[e]?.[t]!==void 0}o(lbe,"doesTableExist");function ube(e){try{return JSON.stringify(e)}catch{return e}}o(ube,"stringifyObj");function dbe(e){let t=hy.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}o(dbe,"ms_to_time");function fbe(e,t){let r=_c.basename(e,_c.extname(e));return _c.join(_c.dirname(e),r+t)}o(fbe,"changeExtension");function DD(){if(process.env[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=bAe(process.argv);if(e[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Nr.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(DD,"getEnvCliRootPath");var PD;function mbe(){if(PD)return PD;let e=DD();if(DD()&&QJ.pathExistsSync(_c.join(e,Nr.HDB_CONFIG_FILE)))return PD=!0,!0}o(mbe,"noBootFile");function hbe(e,t){let r;return e.protocol==="http:"?r=NAe:r=IAe,new Promise((n,s)=>{let i=r.request(e,a=>{a.setEncoding("utf8"),a.body="",a.on("data",c=>{a.body+=c}),a.on("end",()=>{n(a)})});i.on("error",a=>{s(a)}),i.write(t instanceof Buffer?t:JSON.stringify(t)),i.end()})}o(hbe,"httpRequest");function pbe(e){if(!e.schema&&!e.database){e.schema=Nr.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(pbe,"transformReq");function Ebe(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}o(Ebe,"convertToMS");var py=tn()});var u4=M((gHe,l4)=>{"use strict";var ps=ce(),_be=kd(),Ke=(k(),v(K)),fE=It(),aa=require("path"),{PACKAGE_ROOT:_y}=Rt(),i4=ce(),Ey=ie(),If="/dev/null",gbe=aa.join(_y,"launchServiceScripts"),o4=aa.join(_y,"utility/scripts"),Sbe=aa.join(o4,Ke.HDB_RESTART_SCRIPT),a4=aa.resolve(_y,"dependencies",`${process.platform}-${process.arch}`,fE.NATS_BINARY_NAME);function c4(){let t=_be.licenseSearch().ram_allocation||Ke.RAM_ALLOCATION_ENUM.DEFAULT,r=Ke.MEM_SETTING_KEY+t,n={[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Ey.noBootFile()&&(n[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ey.getEnvCliRootPath()),{name:Ke.PROCESS_DESCRIPTORS.HDB,script:Ke.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:_y}}o(c4,"generateMainServerConfig");var Tbe=9930;function Rbe(){ps.initSync(!0);let e=ps.get(Ke.CONFIG_PARAMS.ROOTPATH),t=aa.join(e,"clustering",fE.NATS_CONFIG_FILES.HUB_SERVER),r=aa.join(ps.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=i4.get(Ke.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=fE.LOG_LEVEL_FLAGS[ps.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==Tbe?"-"+n:""),script:a4,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return ps.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}o(Rbe,"generateNatsHubServerConfig");var ybe=9940;function Abe(){ps.initSync(!0);let e=ps.get(Ke.CONFIG_PARAMS.ROOTPATH),t=aa.join(e,"clustering",fE.NATS_CONFIG_FILES.LEAF_SERVER),r=aa.join(ps.get(Ke.HDB_SETTINGS_NAMES.LOG_PATH_KEY),Ke.LOG_NAMES.HDB),n=i4.get(Ke.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=fE.LOG_LEVEL_FLAGS[ps.get(Ke.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==ybe?"-"+n:""),script:a4,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return ps.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=If,i.error_file=If),i}o(Abe,"generateNatsLeafServerConfig");function bbe(){ps.initSync();let e=aa.join(ps.get(Ke.CONFIG_PARAMS.LOGGING_ROOT),Ke.LOG_NAMES.HDB),t={name:Ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:Ke.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:gbe,autorestart:!1};return ps.get(Ke.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=If,t.error_file=If),t}o(bbe,"generateClusteringUpgradeV4ServiceConfig");function Ibe(){let e={[Ke.PROCESS_NAME_ENV_PROP]:Ke.PROCESS_DESCRIPTORS.RESTART_HDB};return Ey.noBootFile()&&(e[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Ey.getEnvCliRootPath()),{...{name:Ke.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:o4},script:Sbe}}o(Ibe,"generateRestart");function Nbe(){return{apps:[c4()]}}o(Nbe,"generateAllServiceConfigs");l4.exports={generateAllServiceConfigs:Nbe,generateMainServerConfig:c4,generateRestart:Ibe,generateNatsHubServerConfig:Rbe,generateNatsLeafServerConfig:Abe,generateClusteringUpgradeV4ServiceConfig:bbe}});var Yd=M((RHe,b4)=>{"use strict";var ot=(k(),v(K)),wbe=ie(),la=rT(),gy=lr(),ca=It(),gc=u4(),Sy=ce(),iu=z(),Obe=Bo(),{startWorker:d4,onMessageFromWorkers:Cbe}=st(),Pbe=Dd(),THe=require("util"),Lbe=require("child_process"),Dbe=require("fs"),{execFile:Mbe}=Lbe,Je;b4.exports={enterPM2Mode:vbe,start:Sc,stop:MD,reload:m4,restart:h4,list:vD,describe:_4,connect:ua,kill:Hbe,startAllServices:kbe,startService:UD,getUniqueServicesList:g4,restartAllServices:Gbe,isServiceRegistered:S4,reloadStopStart:T4,restartHdb:E4,deleteProcess:Bbe,startClusteringProcesses:y4,startClusteringThreads:A4,isHdbRestartRunning:Fbe,isClusteringRunning:$be,stopClustering:qbe,reloadClustering:Vbe,expectedRestartOfChildren:p4};var mE=!1;Cbe(e=>{e.type==="restart"&&Sy.initSync(!0)});function vbe(){mE=!0}o(vbe,"enterPM2Mode");function ua(){return Je||(Je=require("pm2")),new Promise((e,t)=>{Je.connect((r,n)=>{r&&t(r),e(n)})})}o(ua,"connect");var Sn,Ube=10,f4;function Sc(e,t=!1){if(mE)return xbe(e);let r=Mbe(e.script,e.args.split(" "),e);r.name=e.name,r.config=e,r.on("exit",async i=>{let a=Sn.indexOf(r);a>-1&&Sn.splice(a,1),!f4&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<Ube&&(Dbe.existsSync(la.getHubConfigPath())?Sc(e):(await la.generateNatsConfig(!0),Sc(e),await new Promise(c=>setTimeout(c,3e3)),await la.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await la.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let a=Sy.get(ot.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,l,u=0,d;for(;l=c.exec(i);){if(l.index&&ca.LOG_LEVEL_HIERARCHY[a]>=ca.LOG_LEVEL_HIERARCHY[d||"info"]){let h=d===ca.LOG_LEVELS.ERR||d===ca.LOG_LEVELS.WRN?iu.OUTPUTS.STDERR:iu.OUTPUTS.STDOUT;iu.logCustomLevel(d||"info",h,n,i.slice(u,l.index).trim())}let[f,m]=l;u=l.index+f.length,d=ca.LOG_LEVELS[m]}if(ca.LOG_LEVEL_HIERARCHY[a]>=ca.LOG_LEVEL_HIERARCHY[d||"info"]){let f=d===ca.LOG_LEVELS.ERR||d===ca.LOG_LEVELS.WRN?iu.OUTPUTS.STDERR:iu.OUTPUTS.STDOUT;iu.logCustomLevel(d||"info",f,n,i.slice(u).trim())}}if(o(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),!Sn&&(Sn=[],!t)){let i=o(()=>{f4=!0,Sn&&(Sn.map(a=>a.kill()),process.exit(0))},"killChildren");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Sn.push(r)}o(Sc,"start");function xbe(e){return new Promise(async(t,r)=>{try{await ua()}catch(n){r(n)}Je.start(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(xbe,"startWithPM2");function MD(e){if(!mE){for(let t of Sn||[])t.name===e&&(Sn.splice(Sn.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ua()}catch(n){r(n)}Je.stop(e,async(n,s)=>{n&&(Je.disconnect(),r(n)),Je.delete(e,(i,a)=>{i&&(Je.disconnect(),r(n)),Je.disconnect(),t(a)})})})}o(MD,"stop");function m4(e){return new Promise(async(t,r)=>{try{await ua()}catch(n){r(n)}Je.reload(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(m4,"reload");function h4(e){if(!mE){p4();for(let t of Sn||[])t.name===e&&t.kill()}return new Promise(async(t,r)=>{try{await ua()}catch(n){r(n)}Je.restart(e,(n,s)=>{Je.disconnect(),t(s)})})}o(h4,"restart");function p4(){for(let e of Sn||[])e.config&&(e.config.restarts=0)}o(p4,"expectedRestartOfChildren");function Bbe(e){return new Promise(async(t,r)=>{try{await ua()}catch(n){r(n)}Je.delete(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(Bbe,"deleteProcess");async function E4(){await Sc(gc.generateRestart())}o(E4,"restartHdb");async function Fbe(){let e=await vD();for(let t in e)if(e[t].name===ot.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(Fbe,"isHdbRestartRunning");function vD(){return new Promise(async(e,t)=>{try{await ua()}catch(r){t(r)}Je.list((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(vD,"list");function _4(e){return new Promise(async(t,r)=>{try{await ua()}catch(n){r(n)}Je.describe(e,(n,s)=>{n&&(Je.disconnect(),r(n)),Je.disconnect(),t(s)})})}o(_4,"describe");function Hbe(){if(!mE){for(let e of Sn||[])e.kill();Sn=[];return}return new Promise(async(e,t)=>{try{await ua()}catch(r){t(r)}Je.killDaemon((r,n)=>{r&&(Je.disconnect(),t(r)),Je.disconnect(),e(n)})})}o(Hbe,"kill");async function kbe(){try{await y4(),await A4(),await Sc(gc.generateAllServiceConfigs())}catch(e){throw Je?.disconnect(),e}}o(kbe,"startAllServices");async function UD(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ot.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=gc.generateMainServerConfig();break;case ot.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=gc.generateNatsIngestServiceConfig();break;case ot.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=gc.generateNatsReplyServiceConfig();break;case ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=gc.generateNatsHubServerConfig(),await Sc(r,t),await la.removeNatsConfig(e);return;case ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=gc.generateNatsLeafServerConfig(),await Sc(r,t),await la.removeNatsConfig(e);return;case ot.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=gc.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Sc(r)}catch(r){throw Je?.disconnect(),r}}o(UD,"startService");async function g4(){try{let e=await vD(),t={};for(let r=0,n=e.length;r<n;r++){let s=e[r];t[s.name]===void 0&&(t[s.name]={name:s.name,exec_mode:s.pm2_env.exec_mode})}return t}catch(e){throw Je?.disconnect(),e}}o(g4,"getUniqueServicesList");async function Gbe(e=[]){try{let t=!1,r=await g4();for(let n=0,s=Object.values(r).length;n<s;n++){let a=Object.values(r)[n].name;e.includes(a)||(a===ot.PROCESS_DESCRIPTORS.HDB?t=!0:await h4(a))}t&&await T4(ot.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Je?.disconnect(),t}}o(Gbe,"restartAllServices");async function S4(e){if(Sn?.find(r=>r.name===e))return!0;let t=await Pbe.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(S4,"isServiceRegistered");async function T4(e){let t=Sy.get(ot.CONFIG_PARAMS.THREADS_COUNT)??Sy.get(ot.CONFIG_PARAMS.THREADS),r=await _4(e),n=wbe.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await MD(e),await UD(e)):e===ot.PROCESS_DESCRIPTORS.HDB?await E4():await m4(e)}o(T4,"reloadStopStart");var R4;async function y4(e=!1){for(let t in ot.CLUSTERING_PROCESSES){let r=ot.CLUSTERING_PROCESSES[t];await UD(r,e)}}o(y4,"startClusteringProcesses");async function A4(){R4=d4(ot.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ot.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await gy.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await gy.updateLocalStreams();let e=await Obe.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ot.PRE_4_0_0_VERSION){iu.info("Starting clustering upgrade 4.0.0 process"),d4(ot.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(A4,"startClusteringThreads");async function qbe(){for(let e in ot.CLUSTERING_PROCESSES)if(e!==ot.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ot.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await R4.terminate();else{let t=ot.CLUSTERING_PROCESSES[e];await MD(t)}}o(qbe,"stopClustering");async function $be(){for(let e in ot.CLUSTERING_PROCESSES){let t=ot.CLUSTERING_PROCESSES[e];if(await S4(t)===!1)return!1}return!0}o($be,"isClusteringRunning");async function Vbe(){await la.generateNatsConfig(!0),await gy.reloadNATSHub(),await gy.reloadNATSLeaf(),await la.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await la.removeNatsConfig(ot.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(Vbe,"reloadClustering")});var xD=Yd(),I4=(k(),v(K));o(async function(){try{let t=await xD.describe(I4.PROCESS_DESCRIPTORS.HDB);for(let r of t)await xD.reload(r.pm_id);await xD.deleteProcess(I4.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();